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

时间:2015-03-04 15:18:27

标签: c# visual-studio-2013 excel-2010 npoi

感谢网站上的人们的帮助,我能够使用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();
}

2 个答案:

答案 0 :(得分:1)

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

使用此版本,您的代码和示例xlsm文件记录了一个宏 - 在您的代码修改后我获得了有效文件。

Excel可以打开它,并且可以运行宏。

答案 1 :(得分:0)

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