Pregunta

Soy muy consciente del artículo de la base de soporte de Microsoft que indica que no está soportado para automatizar productos de oficina UI menos. Parece que Windows Server 2008 x64 y Excel 2007 hacer cumplir la declaración dada.

estoy ejecutando el siguiente código en un servicio de NT (cuenta del sistema local) Método OnStart. Todo lo que hace es la automatización de Excel la forma en que está funcionando cuando se ejecuta el mismo código en una aplicación de consola.

El código proporcionado tiene dos partes. La primera parte presenta Excel, crea un nuevo libro de trabajo y lo guarda en el archivo indicado. La segunda parte presenta una nueva instancia de Excel y se abre el archivo dado. La operación de extremos abiertos en esta excepción:

El servicio no se puede iniciar. System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel no puede tener acceso al archivo 'C: \ temp \ test.xls'. Hay varias razones posibles:

• No existen el nombre de archivo o ruta. • 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 capaz de lanzar y escribir archivos en el disco, pero falla cuando se le preguntó “sólo“para abrir 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();
¿Fue útil?

Solución

La solución es muy simple. El hilo del foro de MSDN se puede encontrar aquí

Para hacer una larga historia corta que lo pongo aquí la solución, el crédito va a 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 se llevó problemas de automatización de oficinas en mi sistema.

Una carpeta de escritorio parece ser necesaria en la carpeta systemprofile abrir el archivo de Excel.

Desaparece Windows2008, Windows2003 tenía la carpeta, y creo que causan este error.

Otros consejos

También al igual que se indica en la fuente, es necesario establecer los derechos correctos para la carpeta de escritorio. Esto funcionó para mí en 32bits de Windows 2008-64bits y Office 2010.

  1. Crear directorio "C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop" (para Windows de 64 bits) o "C: \ Windows \ System32 \ config \ systemprofile \ Desktop" (para Windows de 32 bits)

  2. Asignar usuario "servicios de red (servicio) Réseau" los siguientes derechos para la carpeta creada:

Leer y ejecutar, contenido de carpeta, Leer

Juan.

Me he encontrado muy a menudo que llamar Salir () no es suficiente para liberar los recursos. Trate de añadir: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

entre la declaración Salir () y se establece en null.

Hay muchos más errores que el que mencionó que tendrá que trabajar a través con el fin de obtener Excel trabaja en Windows Server 2007 de 64 bits. Consulte los pasos que trabajaron a cabo después de haber trabajado en esto durante dos días completos!

Si está usando Apache, es posible que también tenga que seguir estos pasos para obtener MS Word funciona correctamente (junto con todo lo descrito en otras respuestas):

A continuación se muestra una captura de pantalla que muestra los dos cuadros de diálogo que necesita para que aparezca: introducir descripción de la imagen aquí

Para Apache:

Servicios-> Apache-> Derecho Haga clic en (Propiedades) -> pestaña Iniciar sesión

MS Word:

Lanzamiento dcomcnfg.exe-> Consola Raíz> Componente Servicios-> Computadoras-> Mi PC-> DCOM Config-> Encuentra Microsoft Aplicación-> Derecho Haga clic en (Propiedades) -> Identidad Tab

** si no puede encontrar la palabra MS, asegúrese de que está poniendo en marcha la correcta Configuración DCOM (64 bits vs 32 bits) dependiendo de qué versión de Office que haya instalado.

Hay dos opciones aquí, puede configurar Apache para utilizar cuenta del sistema local y marque la casilla de verificación para permitir la interacción de escritorio. Si se hace esto, entonces es necesario configurar el Identidad para MS Word a usuario interactivo .

En caso contrario, es necesario establecer tanto al mismo usuario (Lo ideal sería que el usuario que se registra en) como se muestra en la imagen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top