2016-02-29 27 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