[NPOI] Excel插入列

使用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("");
    }
}

參考