EPPlus:尝试使用 SaveAs 方法时出现异常:无法加载类型 System.Security.Crytopgraphy.Pkcs.SignedCms
EPPlus: Exception when attempting to use SaveAs method: Can't load type System.Security.Crytopgraphy.Pkcs.SignedCms
我正在尝试将成功加载的 excel 文件保存为 .xlsm 文件,但出现以下错误:
{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 Core 2.0 中使用 EPPlus 的代码:
{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 包并收到了一个 "Not Supported Exception"。除了添加 VBA 代码外,我没有尝试对文件进行加密或做任何特殊的事情,而且我手动打开和保存文件没有问题。
如有任何想法,我们将不胜感激。
您的问题缺少一些信息,例如您使用的是什么版本的 EPPlus?
无论如何,我做了以下事情:
创建了一个 .Net Core 2.0 ASP.net 核心 MVC 项目。
安装了 EPPLus prerelease v4.5.0.1-beta(支持.net core 2.0)并尝试了以下代码:
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 版本。
我正在尝试将成功加载的 excel 文件保存为 .xlsm 文件,但出现以下错误:
{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 Core 2.0 中使用 EPPlus 的代码:
{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 包并收到了一个 "Not Supported Exception"。除了添加 VBA 代码外,我没有尝试对文件进行加密或做任何特殊的事情,而且我手动打开和保存文件没有问题。
如有任何想法,我们将不胜感激。
您的问题缺少一些信息,例如您使用的是什么版本的 EPPlus?
无论如何,我做了以下事情:
创建了一个 .Net Core 2.0 ASP.net 核心 MVC 项目。 安装了 EPPLus prerelease v4.5.0.1-beta(支持.net core 2.0)并尝试了以下代码:
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 版本。