当前位置: 首页 > 知识库问答 >
问题:

NPOI:将Xlsm转换为Xlsx

郎增
2023-03-14

我正在编写一个程序来处理一些excel文档,该程序是在Visual Studio 2010中用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中打开文件时,它会说“该文件是一个无宏文件,但包含启用宏的内容。”

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

共有1个答案

谭兴学
2023-03-14

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

 类似资料:
  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转

  • 我正在努力将图像标记转换为链接并复制标记内的参数,即。 进入 我的问题不仅仅是复制src和alt数据,还包括丢失和额外的标记。 进入 和 进入 这需要对整个字符串中img标记的所有实例执行。 不是说听起来像是一个挑战,但是有人能提出一个可能的解决方案吗,我相信这可以用preg_replace但是我就是做不到? 非常感谢。

  • 最近,我浏览了一些网站,将中缀转换成前缀符号,最后我被卷了起来。 我已经给出了我所做的步骤。。 例:-(1(2*3))(5*6)(7/8) 方法1:-(无需任何算法的手动转换):- 方法2:- 根据现场情况http://scanftree.com/Data_Structure/infix-to-prefix 所以,在这里我完全被绞死了。 请任何人提供以下方面的信息:- 关于我在以上2种方法中哪里出

  • 问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!

  • 我们正在获取具有以下字段的订单数据(仅显示相关字段) 具有NULLoriginal_orderid的订单可以被认为是父订单 其中一些父母订单可能有子订单,子订单的original_orderid映射到父母的订单。 子顺序可以产生另一个子顺序,如图像所示,带有颜色编码。 与原始文本相同的数据: 作为转换,我们需要将所有子节点映射到它们的原始父节点(original_orderid为NULL),并获得

  • 我一直在我的开发服务器中使用模块来轻松地从转换为: 但是,我在生产服务器中部署了我的应用程序,但我没有安装Excel应用程序,因此引发了以下错误: 在Python中,从转换为有什么好的替代方法吗? 我已经用PDFWriter测试了xtopdf,但是使用这个解决方案,您需要逐个读取和迭代范围并写入行。我想知道是否有一个更直接的解决方案类似于win32com。客户 谢谢