0

我正在编写一个程序来处理一些 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 文件,但是文件打不开,好像已经损坏了……

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

- 编辑 - -

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

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

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

4

1 回答 1

0

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

于 2014-05-24T15:09:03.537 回答