Как установить «AutoSize» в столбце листа Excel?(NPOI) - PullRequest
10 голосов
/ 19 мая 2011

В соответствии с Как можно задать для столбцов «автоматический размер» в документах 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);
 }

Но это не работает. Как правильно поступить?

Ответы [ 2 ]

17 голосов
/ 11 июля 2011

Вот код, который работает для меня, используя ваши циклы:

    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();

Если он не работает для вас, тогда нам нужно посмотреть на тип данных, которые вы выдвигаете,посмотрим, есть ли разница, которая имеет значение там.(Я предполагаю, что у нас нет несоответствия версий или чего-то подобного).

2 голосов
/ 11 августа 2016

Просто чтобы добавить дополнительный бит к ответу от YellowFog.Я обнаружил, что мне нужно добавить все данные на лист, а затем выполнить итерации по столбцам, установив AutoSizeColumn (idx), чтобы это работало правильно.

...