通过 Open XML 将数据导出到 Excel 启用宏

sun*_*nny 6 c# excel vba openxml

我有一个 Excel 表,我将其用作导出数据的模板文件。

Excel 工作表是 XLSM 文件,几乎没有用 VBA 编写的代码。

每次使用时间戳复制和重命名文件时,都应将数据写入复制的 xlsm 文件,但不写入数据

我为此使用了 Open XML 库。

如果我使用 xlsx 模板文件,同样有效。

是否无法通过 Open XML 在启用了宏的 xlsm Excel 上写入?

如果是,请记住任何说明。

Tat*_*ead 2

此答案中的代码将复制任何 Excel 文件并将其切换到启用宏的工作簿。我已经针对一个简单的 Excel 2016 工作簿和启用宏的工作簿对其进行了测试,它SaveMEW.xlsm在源文件所在的同一目录中创建了一个新文件。确保源文件的完整路径放入`_sourceFile变量中。

    var _sourceFile = " PATH TO YOUR TEMPLATE FILE ";

    using (var templateFile = File.Open(_sourceFile, FileMode.Open, FileAccess.Read))
        {
            using (var stream = new MemoryStream())
            {
                templateFile.CopyTo(stream);
                using (var spreadsheetDocument = SpreadsheetDocument.Open(stream, true))
                {                
                    spreadsheetDocument.ChangeDocumentType(SpreadsheetDocumentType.MacroEnabledWorkbook);
                }
                byte[] buffer = stream.ToArray();
                MemoryStream ms = new MemoryStream(buffer);
                FileStream file = new FileStream(System.IO.Path.GetDirectoryName(_sourceFile) + "/SaveMEW.xlsm",
                    FileMode.Create, FileAccess.Write);
                ms.WriteTo(file);
                file.Close();
            }
        }
Run Code Online (Sandbox Code Playgroud)