NPOI:将Xlsm转换为Xlsx

时间:2014-03-11 14:12:54

标签: c# excel xlsx npoi xlsm

我正在编写一个程序来处理一些excel文档,该程序是用Visual Studio 2010中的C#编写的,我使用的是NPOI库。

我注意到我无法将CloneSheet()用于 xlsm 文件,但我可以使用xlsx进行此操作。

CloneSheet()是我真正需要的一个函数,所以我真的想让它工作而不是逐个单元格复制所有内容。

我想过将文件转换为xlsx。我能够手动完成,但不能以编程方式完成。

这是我写的尝试这样做的代码:

XSSFWorkbook workbook;

//read original xlsm file into workbook
using (FileStream file = new FileStream(@"OriginalFile\" + filename, FileMode.Open, FileAccess.Read))
{ workbook = new XSSFWorkbook(file); }

//change file extension to xlsx and save in a new location
filename = Path.ChangeExtension(filename, "xlsx");
if (!Directory.Exists("NewFile"))
    Directory.CreateDirectory("NewFile");
FileStream stream = new FileStream(("NewFile\\New" + filename), FileMode.Create, System.IO.FileAccess.Write);
workbook.Write(stream);
stream.Close();

//read the newly created file from the new location
using (FileStream file = new FileStream(@"NewFile\\New" + filename, FileMode.Open, FileAccess.Read))
{ workbook = new XSSFWorkbook(file); }

上面的代码将创建新的xlsx文件,但该文件无法打开并且似乎已损坏...

我已经谷歌搜索了一段时间,似乎无法找到解决方案,任何人都可以帮助或指出我正确的方向吗?

- EDIT ---

我尝试使用Open XML找到here的另一种方法,但我遇到了同样的问题,即创建文件但我无法打开文件。

但是,该文件似乎没有损坏。我正在读取文件的程序读取数据没有问题,当我尝试在excel中打开文件时,它说" 该文件是一个无宏文件,但包含宏 - 启用内容。"

似乎我越来越近了,但我需要能够打开输出文件,否则它没用......

1 个答案:

答案 0 :(得分:0)

您可能需要滚动自己的方法:迭代行然后迭代单元格。这篇文章Copy Row Helper让我开始了。您必须将其修改为使用两个工作簿。此方法将复制数据和公式。必须重新创建CellStyles,因为它们特定于原始工作簿。