使用NPOI在Excel插入列
前言
最近在做操作 Excel 的 Tool ,考慮了幾個 Library,像是 ClosedXML、NPOI
最後還是選擇了老牌的 NPOI 來實作操作 Excel。
p.s. 其實 ClosedXML,使用起來,真的非常愉快,和 Excel VBA用法相似,
但是產生出來的 Excel,發現儲存格的會計格式"有時候"會跑掉@@
所以只好改投 NPOI 的懷抱~~
問題
在實作上有一個需求,在讀取客戶的 Excel 檔案後,要在中間插入一列新的資料列,來填入新的資料,
然後,這新的資料列要和上面的資料列 Style 一樣
解決
查了一下 NPOI 的 API,似乎沒有直接插入列的方法可用,只好拜託一下谷哥大神,
找到 E.K 2.0 所寫的文章,其中有一句話~
搬移資料=插入資料?
這句話,真的寫得太好了!換個角度想,我把要插入列的位置和它以下的列都往下搬一列,
不就等於插入一個空白的資料列了嗎?
然後接下來只要把上方列的 Style 複制到新的空白資料列就可以了
程式碼如下:
void InsertRow(ISheet sheet, int insertRow)
{
sheet.ShiftRows(insertRow, sheet.LastRowNum, 1);
// 如果要插入的列數是0,複制下方列,反之,複制上方列
sheet.CopyRow((insertRow == 0) ? insertRow + 1 : insertRow - 1, insertRow);
// 清空插入列的值
var row = sheet.GetRow(insertRow);
for (int i = 0; i < row.LastCellNum; i++)
{
var cell = row.GetCell(i);
if (cell != null)
cell.SetCellValue("");
}
}