C#操作NPOI插件的HSSFWorkBook,常见的那些坑
使用HSSFWorkBook類實例化時,經常會遇到一個問題:HSSFWorkBook.isReadOnly。
HSSFWorkBook.isReadOnly,貌似是異常,但它又不影響你正常導出Excel模板,但是必須注意的是,Excel模板的后綴名要為.xls,如果是.xlsx,那么就會出現打開文件錯誤,其實是Excel版本的兼容性問題。
有時候HSSFRow sheetRow = (HSSFRow)sheet.CreateRow(index);創建新的row,接著使用sheetRow.CreateCell(2).SetCellValue(new HSSFRichTextString("字符串"));給每個cell賦值時,有可能遇到一個問題:
for (int i=0; i<ts.Days; i++){HSSFRow sheetRow = (HSSFRow)sheet.CreateRow(4+i);sheetRow.CreateCell(0).SetCellValue(new HSSFRichTextString(startDate.AddDays(i).ToString("yyyy-MM-dd")));//日期:2018-01-01sheetRow.CreateCell(1).SetCellValue(new HSSFRichTextString(startDate.AddDays(i).ToString("dddd")));//周一、周二......//必須添加上"",如果沒有給空字符串,該cell為null,上傳模板的時候,Cells的個數會根據user是否輸入數據而有所改變sheetRow.CreateCell(2).SetCellValue(new HSSFRichTextString(""));sheetRow.CreateCell(3).SetCellValue(new HSSFRichTextString(""));sheetRow.CreateCell(4).SetCellValue(new HSSFRichTextString(""));}?注意,代碼里頭有3個cell的值設置為"",如果不設置,那么這3個cell根本就是null,再者,當用戶把這個模板下載下來,有些cell輸入值,有些cell沒有輸入,如:
| test1 | test2 | test3 | test4 | test5 | 
| ? | test2 | ? | test4 | ? | 
| ? | ? | test3 | ? | ? | 
| test1 | ? | ? | ? | test5 | 
| ? | ? | ? | ? | ? | 
那么在讀取數據的時候,第一行的Cells.Count==5,第二、四行的Cells.Count==2,第三行的Cells.Count==1,第五行的Cells.Count==0。如果像代碼里面設置空字符串,就不管后續用戶有沒有輸入新數據,都可以確保取到相關位置的值,不會出現out?of?range的異常。
使用GetCell(index)方法精確找位:
有時候你需要將上傳的excel表格的值顯示在客戶端,同時還要根據某幾個cell值是否為空值,或者null來進行剔除,如果真出現不定量的值為null的Cell個數,顯然用Cells[index]是不行的,上面提及到,Cells.Count不統計null的Cell格子,譬如對于上圖的第二行,Cells[0]的值可能就是test2,如何精確找到對應Cell的位置呢?為了應對此情況,NPOI還提供了一個方法來精確尋找Cell格子,就是GetCell(index)。那么通過GetCell(index)可以精確找到相應位置,進而可以判斷是否為空,是否為null,然后進行篩選,賦值等操作。
使用StringCellValue方法,通常我們想要取出某個cell的值,可能會使用:
?
string resGp = sheet.GetRow(0).Cells[1].StringCellValue; //但如果,sheet.GetRow(0).Cells[1]的值是一個數值, //這里不是說數據類型,是形式上就是阿拉伯數字, //那么調用StringCellValue就會拋出異常 //不調用StringCellValue,其效果一樣,而且解決值為阿拉伯數字的情況 string resGp = sheet.GetRow(0).Cells[1];//上面一句雖然避免了異常問題,但是,如果想獲取阿拉伯數值的數據,那就使用ToString()
string resGp = sheet.GetRow(0).Cells[1].ToString();
?
轉載于:https://www.cnblogs.com/SysoCjs/p/9789791.html
總結
以上是生活随笔為你收集整理的C#操作NPOI插件的HSSFWorkBook,常见的那些坑的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c# 说说开发通用通信库,尤其是分布式服
- 下一篇: JavaScript this指向相关内
