0

我正在尝试使用 EPPlus 更改客户提供的.xlsm文件(C# 应用程序将填充来自网络表单的数据并提交到 CMS)

但是在 package.Save(name) 或 packagae.SaveAs(name) 上,DataValidations 集合会引发异常:

2011-11-28 14:17:51,380 [9] ERROR app.ExcelConverter - System.ArgumentException: Requested value 'date' was not found.
   at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
   at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
   at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
   at OfficeOpenXml.DataValidation.ExcelDataValidationCollection..ctor(ExcelWorksheet worksheet)
   at OfficeOpenXml.ExcelWorksheet.get_DataValidations()
   at FItoExcelCore.ExcelConverter.RunSample(String filePath) in \path\to\class.cs:line 32

即使尝试 worksheet.DataValidations.Clear() 也会引发相同的异常,并且文件没有任何更改:

        try
        {
            using (ExcelPackage package = new ExcelPackage(output))
            {
                package.SaveAs(output);
            }
        }
        catch (Exception ex)
        {
            _log.Error(ex.ToString());
        }

我从头开始创建的 excel 文件中没有这种行为,但我需要使用提供的文件。

不知道它是否重要,但我正在使用 .Net 4 Framework,它是一个 1.01 MB 的 .xlsm 文件。该文件从 Excel 中保存/保存为正常(即使使用新数据)。

注意:显然.xlsx文件可以正常工作,但 .xlsm 格式包含无法以 .xlsx 格式保存的 VBA 宏,因此无法转换文件类型。

4

3 回答 3

1

像往常一样,在发布后的 60 秒内,我在网上找到了新信息。

在 EPPlus codeplex 站点上有一个讨论表明“组件中没有对 [xlsm files] 的真正支持。

可能是问题的根源。

于 2011-11-28T21:51:24.637 回答
0

您有最新版本的 EPPlus 吗?

他们在 2011 年 3 月修复了这个问题。它与 ValidationTypes 不区分大小写有关。

见: http ://epplus.codeplex.com/workitem/13246

编辑:如果不支持 xlsm,您也可以尝试将其保存为 .xlsx。

于 2011-11-28T22:02:18.500 回答
0

正如 Ed 写的那样,我已经下载了 2012 年 1 月 31 日起的最新版本的 EPPlus,它的验证效果很好。正在阅读和写作的 excel 是 .xlsx 格式。

于 2012-02-29T19:13:32.107 回答