com - standard - windows server 2008 todo en 1 32/64 bits(mega)
Automatización de Excel 2007 sobre un Windows Server 2008 x64 (5)
Hay muchos más errores de los que se mencionaron con los que tendrá que trabajar para que Excel funcione en Windows Server 2007 de 64 bits. ¡Vea los pasos que hice después de trabajar en esto durante dos días completos!
Soy muy consciente del artículo de la base de soporte de Microsoft que indica que no se admite la automatización de la interfaz de usuario de los productos de Office. Parece que Windows Server 2008 x64 y Excel 2007 aplican la declaración dada.
Estoy ejecutando el siguiente código en un método OnStart de servicio de NT (cuenta del sistema local). Todo lo que hace es la automatización de Excel de la forma en que funciona cuando ejecuta el mismo código en una aplicación de consola.
El código provisto tiene dos partes. La primera parte lanza Excel, crea un nuevo libro de trabajo y lo guarda en el nombre de archivo dado. La segunda parte inicia una nueva instancia de Excel y abre el archivo dado. La operación abierta termina en esta excepción:
El servicio no se puede iniciar. System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel no puede acceder al archivo ''c: / temp / test.xls''. Hay varias razones posibles:
• El nombre del archivo o la ruta no existe. • El archivo está siendo utilizado por otro programa. • El libro que está intentando guardar tiene el mismo nombre que un libro abierto actualmente.
¿Por qué el Excel automatizado fue capaz de iniciar y escribir archivos en el disco pero falla cuando se le pide "simplemente" que abra un archivo existente?
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//
string filename = "c://temp//test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
true,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
false,
false,
System.Reflection.Missing.Value,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
book = null;
}
finally
{
excel.Quit();
excel = null;
}
//
GC.Collect();
Muy a menudo he encontrado que llamar a Salir () no es suficiente para liberar los recursos. Intenta agregar:
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
entre la instrucción Quit () y establecerlo en nulo.
Si está utilizando Apache, es posible que también deba seguir estos pasos para que MS Word funcione correctamente (junto con todo lo que se describe en otras respuestas):
A continuación, se muestra una captura de pantalla que muestra los dos cuadros de diálogo que deberá mostrar:
Para Apache:
Servicios-> Apache-> Clic derecho (Propiedades) -> pestaña Iniciar sesión
MS Word:
Inicie dcomcnfg.exe-> Console Root-> Component Services-> Computers-> My Computer-> DCOM Config-> Find Microsoft Application-> Right Click (Propiedades) -> pestaña Identity
** Si no puede encontrar el MS Word, asegúrese de que está iniciando la configuración DCOM correcta (64 bits frente a 32 bits) según la versión de Office que haya instalado.
Hay dos opciones aquí, puede configurar Apache para que use la cuenta del sistema local y marcar la casilla de verificación PARA PERMITIR la interacción del escritorio. Si hace esto, deberá configurar la Identidad para MS Word como Usuario interactivo .
De lo contrario, debe configurar ambos para el mismo usuario (lo ideal es que el usuario que inició sesión) como se muestra en la imagen.
También como se indica en la fuente, debe establecer los derechos correctos para la carpeta de Escritorio. Esto me funcionó en Windows 2008-64bits y Office 2010 32bits.
Cree el directorio "C: / Windows / SysWOW64 / config / systemprofile / Desktop" (para Windows de 64 bits) o "C: / Windows / System32 / config / systemprofile / Desktop" (para Windows de 32 bits)
Asigne al usuario "Servicios de red (Service Réseau)" los siguientes derechos para la carpeta creada:
Leer y ejecutar, listar contenidos de carpeta, leer
Juan.
La solución es realmente simple. El hilo del foro msdn se puede encontrar here
Para resumir, estoy publicando la solución aquí, el crédito es para H Ogawa
Esta solución es ...
・ Windows 2008 Server x64
Por favor haga esta carpeta.
C: / Windows / SysWOW64 / config / systemprofile / Desktop
・ Windows 2008 Server x86
Por favor haga esta carpeta.
C: / Windows / System32 / config / systemprofile / Desktop
... en lugar de dcomcnfg.exe.
Esta operación quitó problemas de automatización de oficina en mi sistema.
Una carpeta de escritorio parece ser necesaria en la carpeta systemprofile para abrir el archivo de Excel.
Desaparece de Windows2008, Windows2003 tenía la carpeta y creo que causa este error.