2011-08-09 29 views
6

Comencé a usar los ensamblados de interoperabilidad de Excel proporcionados por Microsoft para una de mis aplicaciones C#. Todo va bien, pero parece que hay una falta de tipeo fuerte, y sinceramente parece que estoy escribiendo código VBA. ¿Hay alguna forma alternativa de interactuar con Excel desde C# que brinde una mejor experiencia de OO? Estoy usando VS2010 y .Net 4.0 por cierto.excel interop alternative

+0

¿Cuál es el problema principal que tiene? ¿Obtienen muchos tipos dinámicos y no intellisense o es el modelo de objetos de oficina que (por diseño) es muy genérico? – Eddy

+0

Creo que te refieres a mecanografía "fuerte" y no "mecanografía". – Davy8

Respuesta

0

¿Qué tipo de interacción estás buscando? ¿Solo escribiendo? ¿leyendo? Control total de todos los aspectos?

Existen muchas bibliotecas de terceros para manipular documentos de Excel, especialmente si se mantiene en el formato xlsx (2007 o posterior). Si simplemente está escribiendo cosas, incluso hay implementaciones de código abierto que puede ver (por ejemplo, Sourceforge tiene Excel Writer).

-2

La automatización OLE es la forma estándar de Windows para las comunicaciones, además del Portapapeles. Debido a que no todos los idiomas que necesitan OLE tienen genéricos (o incluso tipificación estática fuerte), la interfaz es necesariamente muy general.

Si simplemente se niega a usar OLE, podría utilizar un host de secuencias de comandos de Windows para moverse por la GUI y obtener sus datos de esa manera, o raspar la pantalla con las DLL de WinAPI. También puede escribir o deslizar un ETL para archivos de Excel según los estándares del documento para archivos XLS y XLSX. De cualquier forma que lo cortes, creo que las desventajas de trabajar con OLE se ven mitigadas por la ventaja extrema de que no tienes que tratar de interactuar con Excel de ninguna otra manera.

1

Dependiendo de lo que esté tratando de hacer, como generar un documento XLSX, puede usar el Open XML SDK.

Esto es bueno para generar documentos de oficina; especialmente porque no requiere la instalación de una oficina para su uso.

Es gratis; una API limpia y agradable, y es compatible con Microsoft. Por ejemplo:

public static void CreateNewWordDocument(string document) 
{ 
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document)) 
    { 
     // Set the content of the document so that Word can open it. 
     MainDocumentPart mainPart = wordDoc.AddMainDocumentPart(); 

     SetMainDocumentContent(mainPart); 
    } 
} 

Ejemplo de: http://msdn.microsoft.com/en-us/library/bb497758.aspx. Hay ejemplos para trabajar con hojas de cálculo here.

Si está intentando interactuar directamente con Excel (como la automatización de UI); no generar un documento; entonces la respuesta de KeithS es cómo iría.

+0

¿Cumplo el voto de votantes para comentar? – vcsjones

1

Las bibliotecas NetOffice son una alternativa a los Ensambles de interoperabilidad primarios de Office (PIA). NetOffice proporciona un conjunto de librerías de interoperabilidad independiente de la versión, por lo que puede admitir todas las versiones de Office con su aplicación e incluye IntelliSense para mostrarle qué métodos están disponibles bajo qué versiones de Office.

NetOffice también ayuda un poco a hacer un seguimiento de las referencias COM, que a veces puede ser una molestia en .NET/COM interoperabilidad.