c# - 将 XLSM 转换为 XLSX

标签 c# openxml xlsx epplus xlsm

我正在使用 EPPLUS 库从 Excel 读取数据以创建另一个文件。不幸的是,它不支持 .XLSM 扩展文件。有没有一种很好的方法可以将 .XLSM 文件转换为 .XLSX 文件以便使用 EPPLUS 读取文件?

(使用 EPPLUS 阅读会很好,因为我所有的代码都已经使用它编写了:))

最佳答案

为此,您需要使用 Open XML SDK 2.0 .以下是我尝试时对我有用的代码片段:

byte[] byteArray = File.ReadAllBytes("C:\\temp\\test.xlsm");
using (MemoryStream stream = new MemoryStream())
{
    stream.Write(byteArray, 0, (int)byteArray.Length);
    using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true))
    {
       // Change from template type to workbook type
       spreadsheetDoc.ChangeDocumentType(SpreadsheetDocumentType.Workbook);
    }
    File.WriteAllBytes("C:\\temp\\test.xlsx", stream.ToArray()); 
}

此代码的作用是获取启用宏的工作簿文件并将其打开到 SpreadsheetDocument 中。目的。此对象的类型是 MacroEnabledWorkbook,但由于您希望将其作为 Workbook,因此调用 ChangeDocumentType 方法将其从 MacroEnabledWorkbookWorkbook。这将起作用,因为底层 XML 在 .xlsm 和 .xlsx 文件之间是相同的。

关于c# - 将 XLSM 转换为 XLSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175343/

相关文章:

c# - 正则表达式:忽略字段之间的空格

ms-office - 使用 Office "open"XML - 这有多难?

java - 无法在 apache POI 中实现 xlsx 文件扩展名

c# - 接口(interface)事件的实际使用

C# 4.0 : Dynamic, 继承自 DynamicObject

.net - OpemXML 命名空间

excel - alasql 需要已包含的 xlsx

javascript - 谷歌地图上的自定义形状

c# - 反射(reflection):在运行时区分事件字段和委托(delegate)类型字段

.net - 如何使用开放XML检索Excel的文化信息?