2016-02-29 29 views
1

我有一個高度自定義的excel文件(即.xlsx)。我正在使用ACE提供者讀取文件。從帶有C#的Excel文件中清除格式化#

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myfilefullpath.xlsx; 
Extended Properties="Excel 12.0 Xml;HDR=NO;IMEX=1"; 

我在一些字段中混合了數據格式(即E列有幾行含字符串值,然後是數百行帶雙值)。

某些字段具有自定義格式。將這個文件讀入數據表時,我看到自定義的格式輸出,而不是「真實」單元格值。

即將日期(「yyyy/mm/dd」)自定義格式化爲「day mm/dd」,並且數據表中顯示爲「day mm/dd」。在數據被插入到數據表之前,我想讀取「yyyy/mm/dd或至少是本例中日期的整數值)。如果可能,我該怎麼做?

更新:我使用的Microsoft.Office.Interop.Excel

回答

1

我已經有兩個庫解析最近的工作和生成Excel文件,我可以推薦他們讀您的Excel文件:

1)Open XML SDK 2.5 for Office簡單的例子:

FileInfo newFile = new FileInfo(filePath); 
ExcelPackage pck = new ExcelPackage(newFile);    

var dataSheet = pck.Workbook.Worksheets.FirstOrDefault(ws => ws.Name.Equals("Data")); 
var someUnformattedValue = dataSheet .Cells[1, 2].Value; 

2)ClosedXML。簡單的例子:

var workbook = new XLWorkbook(); 
var worksheet = workbook.Worksheets[0]; 
var someUnformattedValue = worksheet.Cell("A1").Value; 
workbook.SaveAs("data.xlsx"); 

兩者都允許在內存中處理(不需要保存在磁盤上的文件),但ClosedXML沒有對圖表的支持(至少目前還沒有)。此外,他們提供了一個直觀的object model

除了有關ClosedXML條件格式的一些問題,我能夠解析和生成相當複雜的Excel文件(包含樞軸和/或數以萬計的數據)。

+0

alexei,謝謝你的建議。我正在爲我的流程使用Office Interop(對不起,已更新操作)。有沒有可能爲此使用它?代碼的實現方式,我試圖避免使用其他pkgs,如果可能的話。不過謝謝,我會記住這一點。 – 007

+0

Office interop不是一個快樂的選擇(特別是在服務器端,強烈建議不要使用它的時候),因爲它太慢了,有時候辦公室流程如果不小心的話就會流連忘返。所有建議的庫都是免費的,並且對於讀取和寫入單元格值等簡單操作非常容易學習。此外,它允許編寫更易維護的代碼。 – Alexei