我知道使用NPOI创建新的宏是不可能的,但根据该文档,已经存在的宏应该保留在副本上:
无法创建宏。目前没有计划支持宏。但是,读取和重写包含宏的文件将安全地保留宏。最新版本的Apache POI支持通过VBAMacroExtractor和VBAMacroReader提取宏数据
但是,当我尝试使用NPOI复制xlsm文件时,遇到了以下问题:
这是Apache POI的错误还是NPOI的错误,如何在复制xlsm文件时保留正确的onclick函数名称?
我正在使用.Net Framework 4.6.2,NPOI 2.3.0并尝试复制Excel 2013文件。
更新1 :我发现只有直接放在工作表上的按钮才会受到此错误的影响。如果我将我的按钮放在一个表单中,那么它的宏名称将在复制后保留,并且它们将按预期工作。
答案 0 :(得分:0)
请根据我的方法尝试。我不确定它是否适合你。根据我的要求,我已经阅读了.xltm(xlsx模板)文件,并在操作后将其写回.xltm文件。
try
{
Response.Clear();
Response.ContentType = "application/vnd.ms-excel.template.macroEnabled.12";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", @"Excel_Template_" + DateTime.Now.ToString("yyyy-dd-M-HH-mm") + ".xltm"));
Response.BinaryWrite(System.IO.File.ReadAllBytes(HostingEnvironment.MapPath("~/Template/manipulated_Excel_Template.xltm")));
Response.End();
}
catch (Exception Ex)
{
...
}
对于不同类型的文件格式/扩展程序,您可以找到MS here支持的各种MIME类型。