Pregunta

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

Actualmente, uso ExcelPackage, que tiene algunos inconvenientes y problemas muy serios. Como no necesito crear hojas de Excel demasiado complejas (lo más "complicado" es que explícitamente necesito establecer un tipo de celda numérica o de texto), estoy mirando hacia la Opción 1 a continuación, pero me pregunto si habrá ¿Existen otras formas buenas y compatibles de generar hojas de Excel 2007? Puntos de bonificación si pueden crearse sin tener que guardarlos en el disco duro, es decir, generarlos y enviarlos directamente a una secuencia.

.net 3.0 es el objetivo aquí, sin bondad 3.5 :(

Editar: Gracias hasta ahora. El SDK de XML solo es de 3.5, pero el Roulet ruso ... erm ... Interoperabilidad COM también es 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.

¿Fue útil?

Solución

Puedes probar a utilizar . Esto le permitirá crear archivos Excel en la memoria usando, por ejemplo, un 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 dijo que no estaba disponible. Version 1 del SDK También está disponible que soporta .NET 3.0. No está tan completo, pero al menos lo ayudará a administrar las partes XML del documento y las relaciones entre ellas.

Otros consejos

Solo estoy generando una tabla HTML, que Excel puede abrir:

<!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 también como fuente de datos para letras seriales en Word, funciona con OpenOffice calc, etc. Y es muy fácil de generar.

Iba a comentar la publicación de BKimmel, pero al parecer no tengo suficientes puntos TAN geniales todavía.

Si Excel ya está abierto, puedes obtener que molesto " personal.xls ya está abierto " mensaje. Intento conseguir la aplicación primero. Si eso falla, entonces créalo:

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

Hice la mayor parte del trabajo Open XML (xlsx) en SpreadsheetGear for .NET y está lejos De 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 for .NET parece satisfacer sus necesidades:

  • Funciona con .NET 2.0, .NET 3.0 y .NET 3.5.
  • Admite la escritura en una secuencia con IWorkbook.SaveToStream o la escritura en una matriz de bytes con IWorkbook.SaveToMemory.
  • Es compatible con los libros de Excel 97-2003 (xls), que probablemente sea lo próximo que se le solicite si necesita admitir a muchos usuarios.

Puede descargar una evaluación gratuita y totalmente funcional aquí .

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

Lo que sea que termines haciendo, verifica si tu solución es compatible con Unicode. Me he encontrado con algunos problemas serios al usar soluciones existentes para escribir archivos xls (es decir, archivos anteriores a 2007).

Puede usar los ensamblajes de interoperabilidad primarios (la API de Office) para generar documentos de Excel mediante programación. No me gustaría hacer nada demasiado complejo al usarlos, pero no suena así, es su requisito.

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

Aquí hay algunos recursos:

Solía ??generar Markup de procesamiento de palabras documentos que utilizan una biblioteca de funciones para crear el XML correcto para tablas y párrafos.

Luego, acabo de cambiar el tipo MIME para que el encabezado de respuesta sea un documento de Word y envié el XML como respuesta al cliente. Se abre en su navegador o se guarda como un archivo.

No parece haber el mismo SDK de 2003 para Excel, aunque hay MS Open XML SDK

Cada código-snob vivo odia vbscript, pero es simple y funciona:

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

Pon eso en un archivo de texto, agrega un " .vbs " Al final y listo.

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