Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NPOI:将Xlsm转换为Xlsx_C#_Excel_Xlsx_Npoi_Xlsm - Fatal编程技术网

C# NPOI:将Xlsm转换为Xlsx

C# NPOI:将Xlsm转换为Xlsx,c#,excel,xlsx,npoi,xlsm,C#,Excel,Xlsx,Npoi,Xlsm,我正在编写一个程序来处理一些excel文档,这个程序是在VisualStudio2010中用C编写的,我正在使用NPOI库 我注意到,我不能为xlsm文件使用CloneSheet,但我可以使用xlsx CloneSheet是这个过程中我真正需要的一个函数,所以我真的希望它能正常工作,而不是一个单元格一个单元格地复制所有内容 我想把这个文件转换成xlsx。我可以手动操作,但不能编程 这是我试图这样做的代码: XSSFWorkbook workbook; //read original xlsm

我正在编写一个程序来处理一些excel文档,这个程序是在VisualStudio2010中用C编写的,我正在使用NPOI库

我注意到,我不能为xlsm文件使用CloneSheet,但我可以使用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文件,但该文件无法打开,并且似乎已损坏

我已经在谷歌上搜索了一段时间,但似乎找不到解决方案,有人能帮我或给我指出正确的方向吗

-编辑--

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

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


看起来我离目标越来越近了,但我需要能够打开输出文件,否则就没有用了……

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

您看到了吗?@mehow该方法对我不起作用,我猜它只在VS2013中受支持?我尝试了页面中的示例,但我的代码甚至无法编译。此外,xlsm的问题是我甚至无法打开输出文件。嗯,完全奇怪。@mehow请查看我的编辑。