NPOI自适应宽度不支持中文解决方案

  • A+
所属分类:NPOI

NPOI自适应宽度不支持中文解决方案

具体代码:

  1. //列宽自适应,只对英文和数字有效  
  2. for (int i = 0; i <= maxColumn; i++)  
  3. {  
  4.     sheet.AutoSizeColumn(i);  
  5. }  
  6. //获取当前列的宽度,然后对比本列的长度,取最大值  
  7. for (int columnNum = 0; columnNum <= maxColumn; columnNum++)  
  8. {  
  9.     int columnWidth = sheet.GetColumnWidth(columnNum) / 256;  
  10.     for (int rowNum = 1; rowNum <= sheet.LastRowNum; rowNum++)  
  11.     {  
  12.         IRow currentRow;  
  13.         //当前行未被使用过  
  14.         if (sheet.GetRow(rowNum) == null)  
  15.         {  
  16.             currentRow = sheet.CreateRow(rowNum);  
  17.         }  
  18.         else   
  19.         {  
  20.             currentRow = sheet.GetRow(rowNum);  
  21.         }  
  22.                               
  23.         if(currentRow.GetCell(columnNum) != null)  
  24.         {  
  25.             ICell currentCell = currentRow.GetCell(columnNum);  
  26.             int length = Encoding.Default.GetBytes(currentCell.ToString()).Length;  
  27.             if (columnWidth < length)  
  28.             {  
  29.                 columnWidth = length;  
  30.             }  
  31.         }  
  32.     }  
  33.     sheet.SetColumnWidth(columnNum, columnWidth * 256);  
  34. }  

需要注意的是列的宽度为 列宽*256,所以获得的宽度需要处以256得到真实的宽度,同样再设置的时候需要再乘上256才能得到正确的值。

钰玺

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • 笑八达 笑八达 0

      世间博客不少,风景这边独好!