首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EPPlus:尝试使用SaveAs方法时出现异常:无法加载类型System.Security.Crytopgraphy.Pkcs.SignedCms

EPPlus:尝试使用SaveAs方法时出现异常:无法加载类型System.Security.Crytopgraphy.Pkcs.SignedCms
EN

Stack Overflow用户
提问于 2018-01-19 04:44:31
回答 1查看 1K关注 0票数 0

我正在尝试将已成功加载的excel文件另存为.xlsm文件,但收到以下错误:

代码语言:javascript
运行
复制
{System.InvalidOperationException: Error saving file C:\VS\ExcelManager\ExcelManager\File.xlsm ---> System.TypeLoadException: Could not load type 'System.Security.Cryptography.Pkcs.SignedCms' from assembly 'System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
   at OfficeOpenXml.VBA.ExcelVbaSignature.GetSignature()
   at OfficeOpenXml.VBA.ExcelVbaSignature..ctor(ZipPackagePart vbaPart)
   at OfficeOpenXml.VBA.ExcelVbaProject.get_Signature()
   at OfficeOpenXml.VBA.ExcelVbaProject.Save()
   at OfficeOpenXml.ExcelWorkbook.Save()
   at OfficeOpenXml.ExcelPackage.Save()
   --- End of inner exception stack trace ---
   at OfficeOpenXml.ExcelPackage.Save()
   at OfficeOpenXml.ExcelPackage.SaveAs(FileInfo file)
   at ExcelManager.Controllers.ExcelController.PrepareExcelFile() in C:\VS\ExcelManager\ExcelManager\Controllers\ExcelController.cs:line 71
   at ExcelManager.Controllers.ExcelController.Get() in C:\VS\ExcelManager\ExcelManager\Controllers\ExcelController.cs:line 80
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()}

}

下面是在.NET Core2.0中使用EPPlus的代码:

代码语言:javascript
运行
复制
{namespace ExcelManager.Controllers
{
[Route("api/excel")]
public class ExcelController : Controller
{

    //private const string XlsxContentType = "application/vnd.ms-excel.sheet.macroEnabled.12";
    private const string XlsxContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

    private void PrepareExcelFile()
    {
        //https://github.com/JanKallman/EPPlus/issues/31
        //Otherwise, I get an EPP error
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 

        ExcelPackage pck = new ExcelPackage(new System.IO.FileInfo("File.xlsx"));
        pck.Workbook.CreateVBAProject();
        var sb = new StringBuilder();
 //Add VBA Code here
        pck.Workbook.CodeModule.Code = sb.ToString();
        //Save as XLSM

        pck.SaveAs(new System.IO.FileInfo("File.xlsm"));}

我还尝试了EPPlus.CORE nuget包,并收到了一个“不受支持的异常”。除了添加VBA代码之外,我不会尝试加密该文件或对该文件执行任何特殊操作,而且手动打开和保存该文件也没有任何问题。

任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-19 06:37:58

你的问题缺少一些信息,比如你使用的是什么版本的EPPlus?

不管怎样,我做了以下事情:

创建了一个.Net核心2.0 ASP.net核心MVC项目。安装了EPPLus prerelease v4.5.0.1-beta (支持.net核心2.0),并尝试了以下代码:

代码语言:javascript
运行
复制
 ExcelPackage pck = new ExcelPackage(new System.IO.FileInfo("d:\\a.xlsx"));
        var sb = new StringBuilder();
        //Add VBA Code here
        sb =new StringBuilder( "valid VB code");
        pck.Workbook.CreateVBAProject();
        pck.Workbook.CodeModule.Code = sb.ToString();
        //Save as XLSM

        pck.SaveAs(new System.IO.FileInfo("D:\\a.xlsm"));

而且它工作得很完美。

请确保您使用的是正确的EPPlus版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48329990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档