2008-09-30 27 views
14

Estoy intentando crear documentos de Excel 2007 mediante programación. Ahora, hay dos maneras que he encontrado:Creación mediante programación de hojas de Excel 2007

  • crear manualmente el XML, como se indica en this post
  • usando una biblioteca de terceros como ExcelPackage.

Actualmente, uso ExcelPackage, que tiene algunos inconvenientes y problemas realmente serios. Como no necesito crear hojas de Excel demasiado complejas (lo más "complicado" es que explícitamente necesito establecer un tipo de celda en texto numérico o texto), estoy mirando hacia la Opción 1 a continuación, pero me pregunto si hay ¿Alguna otra forma buena y compatible para generar Hojas de Excel 2007? Puntos de bonificación si se pueden crear sin tener que guardarlos en el disco duro, es decir, generarlos y enviarlos directamente a una transmisión.

.NET 3.0 es el objetivo aquí, no hay bondad 3.5 :(

Editar:. Gracias hasta ahora El XML SDK 3.5 es de hecho solamente, pero el ruso Roulet ... erm ... interoperabilidad COM es también algo que quiero evitar siempre que sea posible, especialmente porque Excel 2007 tiene un formato de documento algo complicado pero aún bastante fácil de crear. Echaré un vistazo a los diversos enlaces y sugerencias publicados.

Respuesta

9

Puede intentar con el Office Open XML SDK Esto le permitirá crear archivos de Excel en la memoria utilizando, por ejemplo, MemoryStream y mucho más fácilmente que generar todo el XML a mano.

Como señaló Brian Kim, la versión 2.0 del SDK requiere .NET 3.5 que usted indicó que no estaba disponible. Version 1 del SDK también está disponible que admite .NET 3.0. No es tan completo, pero al menos lo ayudará a administrar las partes XML del documento y las relaciones entre ellos.

+0

Parece que se requiere .net 3.5 para esto. –

+0

Buen punto, corregido. –

0

Solía ​​generar documentos Wordprocessing Markup usando una biblioteca de funciones para crear el XML correcto para tablas y párrafos.

Luego cambié el tipo MIME para que el encabezado de respuesta sea un documento de Word y envíe el XML como la respuesta al cliente. Se abre en su navegador o se guarda como un archivo.

No parece ser el mismo SDK para Excel 2003 aunque hay MS Open XML SDK

0

Excel es muy scripts a través de objetos COM. No lo he probado, pero esta debería ser una solución sólida, aunque no sea rápida ni ligera.

Lo que termine haciendo, compruebe si su solución es compatible con Unicode. Me he encontrado con algunos problemas graves al usar soluciones existentes para escribir archivos xls (es decir, archivos previos a 2007).

+2

La automatización COM de Excel en el servidor puede ser bastante escamosa. Microsoft solo lo admite en el escritorio. –

0

Puede utilizar las Asambleas de interoperabilidad primarias (la API de Office) para generar documentos de Excel mediante programación. No me gustaría hacer algo excesivamente complejo al usarlas, pero no parece que sea su requisito.

Este enfoque debería funcionar para generar los documentos en la memoria también.

Éstos son algunos recursos:

+0

EVITE PIA ... Sí, no es una coincidencia entre Pain In the .ss y Primary Interop Ass-emblies. Créeme, aún puedo sentir el dolor. –

0

Cada código snob odia viva VBScript, pero es simple y funciona:

Set myxlapp = CreateObject("Excel.Application") 
Set mywb = myxlapp.Workbooks.Add 
myxlapp.Visible = true 

Poner que en un archivo de texto, agregue un ".vbs" al final y presto.

1

Iba a comentar sobre la publicación de BKimmel, pero aparentemente todavía no tengo suficientes puntos tan interesantes.

Si Excel ya está abierto, puede obtener el molesto mensaje "personal.xls ya está abierto". Intento obtener la aplicación primero. Si eso no funciona, entonces crearlo:

On Error Resume Next 
Set myxlApp = GetObject(, "Excel.Application") 
If Err.Number <> 0 Then 
    Err.Clear 
    Set myxlApp = CreateObject("Excel.Application") 
    If Err.Number <> 0 Then 
    ' return False, show message, etc. 
    End If 
End If 
2

Sólo estoy generación de tabla HTML, que puede ser abierto por Excel:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Wnioski</title> 
<style type="text/css"> 
<!-- 
br { mso-data-placement: same-cell; } 
td { mso-number-format: \@; mso-displayed-decimal-separator: "."; } 
--> 
</style> 

<table> 
<tr style="height:15.0pt"> 
<td style="mso-number-format: general">474</td> 
<td>474</td> 

<tr> 
<td>data2</td> 
<td>data3</td> 

<tr> 
<td style="mso-number-format: &quot;yyyy-mm-dd&quot;">2008-10-01</td> 
<td style="mso-number-format: standard">0.00</td> 

<tr> 
<td style="mso-number-format: general">line1<br>line2<br>line3</td> 
<td></td> 

</table> 

Esto funciona así también como una fuente de datos para cartas en serie en Word , funciona con OpenOffice calc etc. Y es muy fácil de generar.

+0

parece que le faltan algunas etiquetas en ese ejemplo ... ;-) –

+0

no es necesario. Pegue este código en http://validator.w3.org/#validate_by_input, así que compruébelo usted mismo. tampoco es obligatorio, pero Excel funciona mejor con ellos. – Tometzky

1

Hice la mayor parte del trabajo Open XML (xlsx) en y está lejos de ser un ejercicio trivial. Recomiendo usar Office Open XML SDK u otra biblioteca de terceros como SpreadsheetGear o uno de nuestros competidores (solo Google "SpreadsheetGear" para ver quiénes son nuestros competidores).

SpreadsheetGear para .NET parecería satisfacer sus necesidades:

  • Obras con .NET 2.0, .NET 3.0 y .NET 3.5.
  • Admite escribir en una secuencia con IWorkbook.SaveToStream o escribir en una matriz de bytes con IWorkbook.SaveToMemory.
  • Admite libros de Excel 97-2003 (xls) que es probable que sea lo siguiente que se le pida si necesita admitir muchos usuarios.

Puede descargar una evaluación gratuita y completamente funcional here.

Cuestiones relacionadas