是否可以使用 NPOI 和 C# 编辑 .xlsm 文件

is it possible to edit .xlsm files using NPOI with C#

感谢本站人员的帮助,我能够使用 NPOI 修改 .xlsx 文件。代码如下,但我的最终目标是能够修改 .xlsm 文件单元格值。有没有办法做到这一点?我尝试使用以下代码 运行 但是一旦我 运行 程序就无法打开文件。

XSSFWorkbook templateWorkbook;
using (FileStream fs = new FileStream(@"C:\Users\jzhu\Desktop\FlexTimeSheetTest.xlsm", FileMode.Open, FileAccess.ReadWrite))
{
    templateWorkbook = new XSSFWorkbook(fs);
    fs.Close();
}

XSSFSheet sheet = (XSSFSheet)templateWorkbook.GetSheet("Sheet1");
sheet.GetRow(0).GetCell(0).SetCellValue("Drago");
sheet.ForceFormulaRecalculation = true;

File.Delete(@"C:\Users\jzhu\Desktop\FlexTimeSheetTest.xlsm");

using (FileStream file = new FileStream(@"C:\Users\jzhu\Desktop\FlexTimeSheetTest.xlsm", FileMode.CreateNew, FileAccess.Write))
{
    templateWorkbook.Write(file);
    file.Close();
}

将您的 NPOI 库更新到 latest 版本(目前为 2.1.3.1)。

使用这个版本,你的代码和样本 xlsm 文件记录了一个宏 - 我在用你的代码修改后得到了有效的文件。

Excel可以打开,宏可以运行.

            XSSFWorkbook xlWorkbook;

            using (FileStream file = new FileStream(toEditFile,FileMode.Open, FileAccess.Read))
            {
                xlWorkbook = new XSSFWorkbook(file);
            }

            var xlWorksheet = xlWorkbook.GetSheet(@"sheet");
            // do stuff
            
            using (FileStream file = new FileStream(toEditFile, FileMode.Create, FileAccess.Write))
            {
                xlWorkbook.Write(file);
                file.Close();
            }