2011-11-28 59 views
0

当我尝试使用,使(C#应用程序将填补从网络形式的数据,并提交到CMS)更改为客户提供.XLSM文件EPPlus.EPPlus抛出DataValidations异常“找不到请求的值'date'”。试图挽救XLSM

但在package.Save(名称) - - 或packagae.SaveAs(名称)的异常由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宏,因此文件类型无法转换。

+0

未答复的SO问题也表明EPPlus不适用于xlsm文件:http://stackoverflow.com/questions/6336803/library-for-c-sharp-to-read-excel-2007-xlsm-file –

回答

1

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

有那表明EPPlus的CodePlex网站discussion没有在组件的[XLSM文件]没有真正的支持。

的可能是问题的根源。

+0

我无法在EPPlus论坛中获得此正式确认,因此我将此打开时间稍长。 –

+0

我收到EPPlus某人的回应,说有一个错误,但是提供的修复程序仍然无效(事实上,根本不会打开,更不用说保存)。 https://epplus.codeplex.com/discussions/281085 –

+0

因此,我将与事实上的答案“EPPlus不[完全]支持.xslm文件。” –

0

你有最新版本的EPPlus吗?

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

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

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

+0

我使用EPPlus 2.9.0.1(我相信)2011年5月31日星期二凌晨3:00 - 我刚刚在11月23日星期三下载了它。 –

+0

嗯..这绝对是一个枚举错误..与你一样在尝试为不在枚举中的项目找到匹配项时,在C#中使用常规枚举。你是否在代码中的任何地方使用“日期”?我相信EPPlus对Excel单元格使用“日期时间”。 –

+0

没有在任何地方使用它。甚至无法在现有文件中找到它(应该输入日期的字段的标签除外)。 –

0

正如Ed写的,我已经下载了2012年1月31日发布的EPPlus的最新版本,它的验证效果非常好。 Excel的读取和写入是.xlsx格式。

+1

您无法以.xlsx格式保存VB项目(.xlsm格式附加的宏代码) –