EPPlus抛出DataValidations异常“未找到请求值'日期'。”当试图保存xlsm时

时间:2011-11-28 21:45:40

标签: c# excel exception openxml epplus

我正在尝试使用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

即使尝试workheet.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宏,因此无法转换文件类型。

3 个答案:

答案 0 :(得分:1)

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

EPPlus codeplex网站上有discussion表示“组件中的[xlsm文件]没有真正的支持。

可能是问题的根源。

答案 1 :(得分:0)

您是否拥有最新版本的EPPlus?

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

请参阅: http://epplus.codeplex.com/workitem/13246

修改: 如果不支持xlsm,您也可以尝试将其另存为.xlsx。

答案 2 :(得分:0)

作为Ed Wrote,我已经从2012年1月31日下载了最新版本的EPPlus,并且它的验证效果非常好。 excel im读写是.xlsx格式。