How to set “AutoSize” to Excel sheet column? (NPOI)

后端 未结 2 1084
孤城傲影
孤城傲影 2020-12-19 01:23

According to How can columns be set to 'autosize' in Excel documents created with NPOI? I did so:

foreach (DataColumn column in dataTable.Columns)
{
         


        
相关标签:
2条回答
  • 2020-12-19 02:12

    Just to add an extra bit to the answer by YellowFog. I found that I had to add all data to the sheet, then iterate through the columns, setting AutoSizeColumn(idx) for this to work correctly.

    0 讨论(0)
  • 2020-12-19 02:16

    Here is some code that is working for me, using your loops:

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

    If it doesn't work for you then we need to look at the kind of data you're pushing out, see if there's a difference that makes a difference there. (I'm assuming that we don't have a version discrepancy or anything like that).

    0 讨论(0)
提交回复
热议问题