hojas - microsoft.office.interop.excel c# example
Programando creación de hojas de Excel 2007 (8)
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
Ponlo en un archivo de texto, agrega un ".vbs" al final y presto.
Intento crear documentos de Excel 2007 mediante programación. Ahora, hay dos formas que he encontrado:
- Crear manualmente el XML, como se describe en esta publicación
- 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 de 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 3.5 bondad :(
Editar: Gracias hasta ahora. El XML SDK es solo 3.5, pero Russian Roulet ... erm ... COM Interop 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.
Excel es muy programable 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 sea que termine haciendo, verifique 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).
Puede usar las Asambleas de interoperabilidad primarias (la API de Office) para generar documentos Excel de manera programática. 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.
Aquí hay algunos recursos:
Solía generar documentos de Wordprocessing Markup utilizando una biblioteca de funciones para crear el XML correcto para tablas y párrafos.
Luego cambié el tipo de MIME para que el encabezado de respuesta fuera un documento de Word y envié el XML como la respuesta al cliente. Se abre en su navegador o se guarda como un archivo.
No parece haber el mismo SDK 2003 para Excel aunque hay MS Open XML SDK
Iba a comentar en la publicación de BKimmel, pero aparentemente todavía no tengo suficientes puntos tan interesantes.
Si Excel ya está abierto, puede obtener ese molesto mensaje "personal.xls ya está abierto". Intento obtener la aplicación primero. Si eso falla, entonces créelo:
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
Podría intentar usar el SDK de Office Open XML . Esto le permitirá crear archivos de Excel en la memoria usando digamos 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 indicó que no estaba disponible. La versión 1 del SDK también está disponible y es compatible con .NET 3.0. No es tan completo, pero al menos lo ayudará a administrar las partes XML del documento y las relaciones entre ellos.
Solo estoy generando una tabla HTML, que se puede abrir con 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: "yyyy-mm-dd"">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 bien 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.
Hice la mayor parte del trabajo Open XML (xlsx) en SpreadsheetGear for .NET 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 for .NET parece satisfacer sus necesidades:
- Funciona 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 probablemente sean lo próximo que se le pida si necesita admitir muchos usuarios.
Puede descargar una evaluación gratuita y completamente funcional aquí .