2011-05-19 33 views
6

Según How can columns be set to 'autosize' in Excel documents created with NPOI? Así lo hice:¿Cómo establecer "AutoSize" en la columna de la hoja de Excel? (NPOI)

foreach (DataColumn column in dataTable.Columns) 
{ 
    int rowIndex = 0; 
    foreach (DataRow row in dataTable.Rows) 
    { 
     HSSFRow dataRow = sheet.CreateRow(rowIndex); 
     dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString()); 
     rowIndex++; 
    } 
     sheet.AutoSizeColumn(column.Ordinal); 
} 

Pero no funciona. ¿Cómo hacerlo bien?

Respuesta

10

Aquí hay un código que está trabajando para mí, con sus bucles:

HSSFWorkbook spreadsheet = new HSSFWorkbook(); 

    DataSet results = GetSalesDataFromDatabase(); 

    //here, we must insert at least one sheet to the workbook. otherwise, Excel will say 'data lost in file' 
    HSSFSheet sheet1 = spreadsheet.CreateSheet("Sheet1"); 

    foreach (DataColumn column in results.Tables[0].Columns) 
    { 
     int rowIndex = 0; 
     foreach (DataRow row in results.Tables[0].Rows) 
     { 
      HSSFRow dataRow = sheet1.CreateRow(rowIndex); 
      dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString()); 
      rowIndex++; 
     } 
     sheet1.AutoSizeColumn(column.Ordinal); 
    } 

    //Write the stream data of workbook to the file 'test.xls' in the temporary directory 
    FileStream file = new FileStream(Path.Combine(Path.GetTempPath(), "test.xls") , FileMode.Create); 
    spreadsheet.Write(file); 
    file.Close(); 

Si esto no funciona para usted, entonces tenemos que mirar el tipo de datos que está empujando hacia fuera, ver si hay una diferencia que hace la diferencia allí. (Estoy asumiendo que no tenemos una discrepancia de versión ni nada de eso).

+0

No puedo ver en su respuesta cuál fue el problema y la solución. Agregaste un código que no está presente en la pregunta, pero ese código parece irrelevante para el autosizing. – buffjape

+0

Sí, ese es el tipo de punto del código de ejemplo. De ahí las palabras después de la muestra del código. – Yellowfog

+0

Específicamente, ¿cuál fue el problema que resolvió? ¿Qué línea de código lo solucionó? – buffjape

1

Solo para agregar un poco más a la respuesta de YellowFog. Descubrí que tenía que agregar todos los datos a la hoja, luego iterar a través de las columnas, estableciendo AutoSizeColumn (idx) para que esto funcione correctamente.

Cuestiones relacionadas