2010-11-02 38 views
7

¿Hay alguna manera de consultar una hoja de cálculo de Excel 2010, sin usar Jet o exportar como CSV y consultar el archivo csv?Consultar hoja de cálculo de Excel con C# .NET sin usar Jet OLE DB

La razón por la que no puedo usar Jet es porque la aplicación necesita ejecutarse como un servicio web, en Windows Server 2008 R2, sin soporte de 32 bits; por lo tanto, Jet no funcionará. Esto es un hecho, ya que WOW 64 no está instalado en el servidor de destino.

This thread sugiere utilizar una máquina proxy de 32 bits, pero tampoco es una opción.

Más información: El servidor está ejecutando SharePoint 2010.

Gracias,

JD

+2

¿No puedes importar la hoja de cálculo de Excel en una base de datos "real"? Como está escribiendo un servicio web, probablemente tenga problemas con la simultaneidad, si mantiene su fuente de datos como un archivo de Excel ... Luego, puede programar un trabajo para actualizar la tabla del servidor sql de vez en cuando. – rsenna

+0

No. Es un requisito comercial que la información se almacene en el archivo de Excel. No es mi elección ... – Darbio

+0

No sabía que era posible excluir la instalación de WOW64; según mi experiencia, cualquier programa de 32 bits se ejecuta en una máquina de 64 bits, es probable que WOW64 esté allí, pero ni siquiera lo notas. – markmnl

Respuesta

12

Sí - se puede utilizar Excel.Interop - referencia a él desde su programa en C# mediante la adición de una referencia a la Microsoft.Office.Interop.Excel (versión 13 creo que para Excel 2010) en la pestaña .Net del cuadro de diálogo Agregar referencia de VS.

FYI: No es una buena idea ejecutar los demonios en un servidor utiliza la interoperabilidad: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2, sin embargo, si se trata de un programa en ejecución a corto, a cargo de un usuario y supervisar él, debería estar bien ..

Si desea que sus clientes ejecutar el programa que se necesita para instalar el ensamblados de interoperabilidad primarios (PIA) si ya didnt al instalar la oficina, que se puede conseguir aquí:

XP: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=C41BD61E-3060-4F71-A6B4-01FEBA508E52
2003: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD
2007: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=59DAEBAA-BED4-4282-A28C-B864D8BFA513
2010: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938fe8ad-583b-4bd7-a345-23250dc15855

He estado usando Office11 en mi máquina de Vista x64, así que no creo x64 planteará ningún problema.

¡Ten en cuenta que la documentación es terrible! hay alrededor de 10 versiones diferentes de la ayuda, documentación disponible. Recomiendo:

familiarizarse con el:

  • Aplicación
  • Cuaderno
  • Hoja de trabajo
  • Rango

objetos. Puede leer los datos en una lista < > > > (en cuyo caso todas sus celdas deberían formatearse como texto) o algo en la memoria, entonces ya no tiene que lidiar con Interop y es rápido. Desde C#, siempre use un método (algunos documentos le dicen erróneamente que no puede usar sus métodos para uso interno) tales como: Range.get_Values ​​("A1") a diferencia de: Rango.Células;

Un buen lugar para comenzar es aquí: http://dotnetperls.com/excel-interop

documentación oficial está aquí: http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx, pero contiene una carga de galleta comercialización hasta llegar a las piezas de la biblioteca de interoperabilidad de los cuales son de una década de antigüedad.

Y tenga cuidado: los índices de Excel están basados ​​en 1, es decir, ¡el primer elemento en la matriz 2D devuelta comienza en my2DArray [1,1]!

+0

Eso era lo que estaba a punto de sugerir. 64 bit puede presentar una o dos arrugas, pero debería funcionar. – winwaed

+0

Brillante! Lo único es que esto requiere una copia de Office 2010 instalada en el servidor, lo que no es ideal, pero estoy seguro de que funcionará. Gracias. – Darbio

+0

Creo que, sea lo que sea lo que decida, necesitará al menos algunos componentes de Office. – winwaed

4

Además de Excel.Interop, ¿puedes usar ADO.Net para usar el motor ACE en lugar del antiguo motor JET? ACE se introdujo con Excel/Access 2007 y está destinado a reemplazar a JET.

1

Aquí hay otro paquete de 3 ª parte que acaba de ser sugerido a mí por un compañero de trabajo: Aspose Excel Spreadsheet Components

Parece que esto va a mitigar la necesidad de interoperabilidad y tener que tener instalado el PIA de Office.

Sin embargo, no hay precios, por lo que puede no ser barato.

+0

Creo que los componentes genuinos de Microsoft serán más confiables, y no debería haber un problema de costo porque ya es un servidor basado en Microsoft, es decir. No es como si fuera una caja de Linux que está forzando el uso de componentes de terceros. – winwaed

+1

Como se indicó anteriormente, requiere que Office 2010 esté instalado en el servidor, por lo que existen problemas de costos asociados con el uso de un enfoque de interoperabilidad (ya que requiere una licencia de Microsoft para usar Office). En segundo lugar, el paquete que he sugerido es un DLL de huella pequeña que se adapta mejor a un entorno de servidor donde no sea posible/deseable instalar Office 2010. – Darbio

4

Me enfrenté a esto también. Mi situación: aplicación cliente no trivial que necesita ejecutarse en Windows 7 x64 y x86. Necesidad de extraer datos de hojas de cálculo de Excel; no se requiere flexibilidad y un mínimo "dolor del usuario". ACEDB (redistribución de motor de base de datos de Access.) No lo hizo, ya que aparentemente la versión x64 de eso no se puede instalar cuando x86 (32-bit) Office ya está instalado. PIA no era una opción: "dolor mínimo para el usuario".

que utilizan esta biblioteca: http://npoi.codeplex.com

Viene con muestras extensas y yo era capaz de construir la aplicación "Cualquier CPU" en lugar de limitar a 86, lo que causó problemas con algunos otros archivos DLL de terceros que estuvimos tratando de usar Estuve trabajando con NPOI en aproximadamente 10 minutos, así que definitivamente puedo recomendarlo.

Cuestiones relacionadas