2012-01-19 16 views
5

Encontré muchas recomendaciones aquí para usar ExcelLibrary para editar archivos excell, pero no puedo encontrar ninguna documentación en ningún lugar.Excellibrary documentation

http://code.google.com/p/excellibrary/

+0

¿Hay algo específico que estés intentando hacer? Utilicé ExcelLibrary y encontré que la API es simple de entender. – Lester

+0

Estoy tratando de convertir el archivo de Excel a C# datatable, y no sé sintax. Siempre me gusta tener documentación completa, y no puedo encontrar nada aquí. –

+0

Para aquellos que todavía eligen bibliotecas: Hay un proyecto mucho mejor (y también mejor documentado): http://epplus.codeplex.com/ – Laoujin

Respuesta

6

Prueba esto:

var workbook = Workbook.Load("spreadsheet.xls"); 
var worksheet = workbook.Worksheets[0]; // assuming only 1 worksheet 
var cells = worksheet.Cells; 
var dataTable = new DataTable("datatable"); 

// add columns 
dataTable.Columns.Add("column1"); 
dataTable.Columns.Add("column2"); 
... 

// add rows 
for (int rowIndex = cells.FirstRowIndex + 1; rowIndex <= cells.LastRowIndex; rowIndex++) 
{ 
    var values = new List<string>(); 
    foreach(var cell in cells.GetRow(rowIndex)) 
    { 
     values.Add(cell.Value.StringValue); 
    } 

    dataTable.LoadDataRow(values.ToArray(), true); 
} 

no es exactamente el código más bonito pero devuelve un DataTable. Recomiendo que simplemente use los valores directamente si es posible, es decir. en lugar de convertir a DataTable, lea los valores directamente y omita este paso de conversión.

+0

Gracias Lester. Solo un problema, la primera fila no es encabezado. No necesito uno. ¿Qué puedo hacer para que la primera fila no sea el encabezado, por lo que es el valor predeterminado (Columna1, Columna2, etc.). Gracias. –

+1

He actualizado el código. Simplemente deberá insertar manualmente el número de columnas según sea necesario. Es posible que puedas hacer 1 mejor y simplemente ponerlo en un bucle, pero no puedo probar ahora mismo. – Lester

0

no estoy seguro de lo que es esto, pero creo que el método preferido para la manipulación de documentos de Microsoft Office es utilizar Open XML SDK 2.0.

+2

No, no lo son: "Actualmente se implementa el formato .xls (BIFF8). En el futuro .xlsx (Excel 2007) también puede ser compatible. – Vinzz

+0

Sí, tienes toda la razón. Fui demasiado rápido para responder y no lo leí por completo. Enmendaré mi respuesta. – BG100

2

Esta pregunta y sus respuestas son muy antiguas. Cualquiera que mire esto ahora, olvídate de ExcelLibrary. NPOI es ahora el camino a seguir, y funciona bien tanto para .xls y .xlsx

https://npoi.codeplex.com/ - dónde obtener las descargas # C
https://poi.apache.org/ - la mejor documentación que he encontrado, a pesar de que es la versión Java.

1
//create new xls file 
string file = "C:\newdoc.xls"; 
Workbook workbook = new Workbook(); 
Worksheet worksheet = new Worksheet("First Sheet"); 
worksheet.Cells[0, 1] = new Cell((short)1); 
worksheet.Cells[2, 0] = new Cell(9999999); 
worksheet.Cells[3, 3] = new Cell((decimal)3.45); 
worksheet.Cells[2, 2] = new Cell("Text string"); 
worksheet.Cells[2, 4] = new Cell("Second string"); 
worksheet.Cells[4, 0] = new Cell(32764.5, "#,##0.00"); 
worksheet.Cells[5, 1] = new Cell(DateTime.Now, @"YYYY-MM-DD"); worksheet.Cells.ColumnWidth[0, 1] = 3000; 
workbook.Worksheets.Add(worksheet); workbook.Save(file); 

// open xls file 
Workbook book = Workbook.Load(file); 
Worksheet sheet = book.Worksheets[0]; 

// traverse cells 
foreach (Pair, Cell> cell in sheet.Cells) 
{ 
    dgvCells[cell.Left.Right, cell.Left.Left].Value = cell.Right.Value; 
} 

// traverse rows by Index 
for (int rowIndex = sheet.Cells.FirstRowIndex; rowIndex <= sheet.Cells.LastRowIndex; rowIndex++) 
{ 
    Row row = sheet.Cells.GetRow(rowIndex); 
    for (int colIndex = row.FirstColIndex; colIndex <= row.LastColIndex; colIndex++) 
    { 
     Cell cell = row.GetCell(colIndex); 
    } 
} 
+0

Por favor, brinde más explicaciones, thx –

+0

Cómo autohabilitar la celda en ExcelLibrary.dll? –