Pregunta

Estoy buscando una biblioteca de Excel que lea/escriba archivos .xls (no .xlsx).

Estoy usando excelente biblioteca Pero es muy buggy y yo Parece que no puedo abrir los archivos que creo. El problema ha sido conocido durante casi un año y aún no se ha solucionado.

He visto en otro hilo que alguien sugirió Epplus, pero eso solo funciona con el formato .xlsx 2007/2010.

he usado Kogragra En el pasado, y he estado bastante contento con eso, pero creo que solo puede leer ... no escribir.

Si conoce una biblioteca, hágame saber cómo se llama.

EDITAR: Estoy bastante feliz de crear mi archivo de Excel con el Microsoft.Office.inTerop.excel incorporado si es necesario, sin embargo, mi máquina tiene Office 2007 y las máquinas de destino solo tienen Office 2003. Noté que tengo 2 versiones de archivo para Esa biblioteca: 12 y 14. Verifiqué la versión de Excel en las máquinas de destino y es 11.8169.8172 - ¿Supongo que el Interopulador de Excel incorporado no funcionará en el objetivo?

¿Fue útil?

Solución

Yo lo recomiendo NPOI. Npoi es LIBRE y funciona exclusivamente con archivos .xls. Me ha ayudado mucho.

Detalle: No necesita tener instalado Microsoft Office en su máquina para trabajar con archivos .xls si usa NPOI.

Consulte estas publicaciones de blog:

Creación de hojas de cálculo de Excel .xls y .xlsx en C#

NPOI con tabla de Excel y gráfico dinámico

ACTUALIZAR

NPOI 2.0 agregó soporte para XLSX y DOCX.

Puedes leer más sobre esto aquí:

NPOI 2.0 Serie de publicaciones programadas para

Otros consejos

¿Hay alguna razón por la que no pueda usar la conexión ODBC de Excel para leer y escribir en Excel? Por ejemplo, he usado el siguiente código para leer desde un archivo de Excel fila por fila como una base de datos:

private DataTable LoadExcelData(string fileName)
{
  string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";

  OleDbConnection con = new OleDbConnection(Connection);

  OleDbCommand command = new OleDbCommand();

  DataTable dt = new DataTable(); OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$] WHERE LastName <> '' ORDER BY LastName, FirstName", con);

  myCommand.Fill(dt);

  Console.WriteLine(dt.Rows.Count);

  return dt;
}

Puede escribir en la "base de datos" de Excel de la misma manera. Como puede ver, puede seleccionar el número de versión para usar para que pueda rebajar las versiones de Excel para la máquina con Excel 2003. En realidad, lo mismo es cierto para usar el Interop. Puede usar la versión inferior y debe funcionar con Excel 2003 a pesar de que solo tiene la versión más alta en su PC de desarrollo.

Puede considerar la herramienta de terceros que llamó Componente de Excel JetCell .NET Para archivos de Excel de lectura/escritura:

Muestra de C#

// Create New Excel Workbook
ExcelWorkbook Wbook = new ExcelWorkbook();
ExcelCellCollection Cells = Wbook.Worksheets.Add("Sheet1").Cells;

Cells["A1"].Value = "Excel writer example (C#)";
Cells["A1"].Style.Font.Bold = true;
Cells["B1"].Value = "=550 + 5";

// Write Excel XLS file
Wbook.WriteXLS("excel_net.xls");

Muestra de vb.net

' Create New Excel Workbook
Dim Wbook As ExcelWorkbook = New ExcelWorkbook()
Dim Cells As ExcelCellCollection = Wbook.Worksheets.Add("Sheet1").Cells

Cells("A1").Value = "Excel writer example (C#)"
Cells("A1").Style.Font.Bold = True
Cells("B1").Value = "=550 + 5"

' Write Excel XLS file
Wbook.WriteXLS("excel_net.xls")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top