2009-09-02 18 views
29

Estoy confundido como el infierno con todas las millones de maneras de leer/escribir/crear archivos de Excel. VSTO, OLEDB, etc., pero todos parecen para tener el requisito de que la oficina debe estar instalada.¿Cómo puedo crear, leer y escribir de manera programática sin tener una oficina instalada?

Aquí está mi situación: necesito desarrollar una aplicación que tome un archivo de Excel como entrada, haga algunos cálculos y cree un nuevo archivo de Excel que básicamente será una modificación del primer archivo de Excel. Todo con la restricción de que la máquina que ejecuta esto puede no tener Office instalado. (No pregunte por qué ...)

Necesito admitir todos formatos de excel. La única gracia salvadora es que las hojas de cálculo de formatos son realmente simples. Solo un montón de columnas y valores, nada sofisticado. Y desafortunadamente, ningún CSV como usuario final puede que ni siquiera sepa qué es un archivo CSV.

+0

¿Qué versiones necesitas para dar soporte? –

+0

Esto depende de las características de MS Excel que necesite. ¿Necesitas alguna característica elegante? – voyager

+3

Qué tan tolerante debe ser de las "funciones perdidas". Por ejemplo, ¿necesita mantener fórmulas, tablas pivote, gráficos, etc.? ¿O solo son datos en estos archivos? –

Respuesta

47

escriba su excel en formato de tabla HTML:

<html> 
<body> 
    <table> 
    <tr> 
    <td style="background-color:#acc3ff">Cell1</td> 
    <td style="font-weight:bold">Cell2</td> 
    </tr> 
    </table> 
</body> 
</html> 

y darle a su archivo una extensión xls. Excel lo convertirá automáticamente

+22

estás volviendo loco bromeando. – eviljack

+3

He usado este método varias veces, es simple, funciona muy bien. Pero en el caso de las aplicaciones web, simplemente configure el tipo de contenido/tipo mime para sobresalir (no puedo recordar el tipo de mime exacto de la parte superior de mi cabeza) –

+1

Y, dependiendo de su versión de Excel, generalmente también toma el formato. ¿Celda de mesa en negrita? Excel lo lleva .. ¿Color de fondo? copia eso también ... –

6

leer y escribir archivos csv en su lugar. Excel los lee muy bien y son más fáciles de usar. Si necesita trabajar contra archivos .xls, intente tener soporte para OpenOffice y Excel. OpenOffice puede leer y escribir archivos de Excel.

+1

La API de OpenOffice puede ser muy útil aquí: http://api.openoffice.org/ –

+2

El problema aquí es 0 formateo. –

8

Sin Office instalado, necesitará algo diseñado para comprender el formato de archivo binario de Excel (a menos que solo desee abrir archivos .xlsx de Office 2007).

Lo mejor que he encontrado (y que uso) es SpreadsheetGear, que además de ser .NET nativo, es mucho más rápido y más estable que las soluciones COM/OLE (que he usado en el pasado)

0

Los archivos de Excel están en un formato propietario por lo que (afaik) no podrá hacerlo sin tener disponible la interoperabilidad de la oficina. Existen algunas herramientas de terceros (que presumiblemente licencian el formato de MS?) Pero no las he usado para comentar sobre su utilidad.

Supongo que no puede controlar el formato de archivo base, es decir, que no es posible crear formatos CSV o XML simples.

0

Solía ​​utilizar una biblioteca muy bonita llamada CarlosAg, que utiliza el formato XML de Excel. Fue genial (y Excel reconoce el formato), y también increíblemente rápido. Verifique here.

Ah, como nota al margen, solíamos usar esto por la misma razón que lo necesita. Los servidores que generaron estos archivos no pudieron tener Excel instalado.

0

Si no puede trabajar con archivos CSV según la sugerencia @RHicke, y suponiendo que esté trabajando en una aplicación web, ya que una aplicación de escritorio podría tener instalado XL según los requisitos.

diría, crear su aplicación de procesamiento como un servicio web, y construir una XL complemento que interactuará con su servicio web directamente desde XL.

2

¿Consideró la forma número bazillion y uno: utilizando el Open XML SDK? Puede conservar los estilos y ajustarlos a su gusto. Todo lo que puede hacer en un archivo real es posible lograrlo programáticamente.El SDK viene con una herramienta llamada Document Reflector que muestra el XML subyacente e incluso muestra las declaraciones LINQ que se pueden usar para generarlas. Esa es la clave para jugar con ella, ver cómo se realizan los cambios y luego volver a crear eso en el código.

La única advertencia es que esto funcionará para los nuevos formatos basados ​​en XML (* .xlsx) y no para las versiones anteriores. Hay una ligera curva de aprendizaje, pero cada vez hay más material en blogs y otros sitios.

1

Excel XLSX archivos "solo" XML, más precisamente archivos ZIP que contienen varios archivos XML. Simplemente cambie el nombre de un archivo de Excel Test.xslx al Test.zip y ábralo con su programa ZIP favorito. Los esquemas XML son, afaik, estandarizados y disponibles. Pero creo que podría no ser tan fácil manipularlos solo usando herramientas y frameworks de procesamiento XML primitivos.

1

Si el costo no es un problema, le sugiero que busque en el producto Excel de Aspose. Uso su producto Word y estoy satisfecho.

Aspose.Cells

+2

Después de probar algunas de las alternativas gratuitas, mi equipo decidió usar Aspose.Cells también. Es muy intuitivo de usar y el código es fácil de mantener. – dawntrader

0

Puedo entender el requisito de no tener instalado en una máquina servidor de la oficina. Hay muchas bibliotecas como Aspose disponibles, algunas de las cuales requieren licencia. Si se dirige a formatos de MS Excel, entonces está disponible una biblioteca nativa de Interoperabilidad, proveedor de datos ACE OLEDB de Microsoft, que puede instalar en una máquina y comenzar a leer, escribiendo mediante programación. Debe definir una cadena de conexión y comandos según lo necesite. (Ref: This article @yoursandmyideas) habla sobre el uso de esta biblioteca junto con la información de configuración y solución de problemas.

Cuestiones relacionadas