2011-11-28 57 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格式附加的宏代碼) –