C#利用NPOI生成具有精確列寬行高的Excel文件


前言

NPOI是操作Excel的神器,導出導入快如閃電,

但是SetColumnWidth函數個人感覺不會用,怎么弄都無法控制好,因為他是以字符數量去設置寬度,實際上Excel列寬還有個像素的概念,更搞不懂了

//附帶SetColumnWidth的用法和注釋

[csharp]  view plaincopy
  1. IWorkbook hssfworkbook = new HSSFWorkbook();  
  2. ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");   
  3. sheet1.SetColumnWidth(1, 100 * 256);  
  4.   
  5. // 摘要:  
  6.         //     Set the width (in units of 1/256th of a character width) The maximum column  
  7.         //     width for an individual cell is 255 characters.  This value represents the  
  8.         //     number of characters that can be displayed in a cell that is formatted with  
  9.         //     the standard font.  
  10.         //  
  11.         // 參數:  
  12.         //   columnIndex:  
  13.         //     the column to set (0-based)  
  14.         //  
  15.         //   width:  
  16.         //     the width in units of 1/256th of a character width  


看着這注釋我就覺得很蛋疼

遇到的問題

那么如果你需要生成固定格式的Excel,要有精確的列寬和行高,要用於打印等特殊需求,又如何解決呢

 

解決方案

哈哈,投機取巧之法,

建立一個已經設置好行高列寬的xls作為模板,在需要填充字符的地方隨便填充一點字符(避免NPOI任務該單元格是NULL),設置好字體等內容,

利用NPOI打開這個xls文件,對對應的空格進行SetValue,然后保存文件,由於NPOI是對於文件流的操作而不是用Excel.exe去操作Excel,所以生成文件的效率極高,

兩秒鍾不到可以生成一百個內容不一單元格樣式一模一樣的Excel文件,NPOI不愧為操作xls的神器,

這樣子可以省去大量的功夫,連字體大小字符居中還是靠右對齊、顏色都可以在模板設置好而無需通過NPOI設置,畢竟寫代碼設置單元格樣式感覺是挺麻煩的事情

 

結束語

此解決方案只適合需要輸出少量字符的情況,對於輸出字符數量不確定的情況,因為可能會填滿單元格導致列寬或者行高產生變化,

從而影響了打印預覽等,對於這種情況由於沒測試所以不進行描述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM