2014-10-06 141 views
2

我正在使用Excel数据读取器,并且我注意到它与旧的Excel 5.0/95工作簿文件不兼容。有没有一种方法可以在将它发送到Excel数据读取器之前获取.xls文件的版本,以防止在早期版本的Excel文件中发送?C#如何确定Excel文件版本

这里是我现在使用的。

if (extension == ".XLS") 
        { 
         IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
         excelReader.IsFirstRowAsColumnNames = true; 
         result = excelReader.AsDataSet(); 
        } 
        else 
        { 
         IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
         excelReader.IsFirstRowAsColumnNames = true; 
         result = excelReader.AsDataSet(); 
        } 

回答

1

你有什么是正确的。但是你可以让它更清洁一些。例如:

IExcelDataReader excelReader; 

if (String.Compare(extension, ".xls", true) == 0){ 
    excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
} else if (String.Compare(extension , ".xlsx", true) == 0){ 
    excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
} 

excelReader.IsFirstRowAsColumnNames = true; 
result = excelReader.AsDataSet(); 
+0

是的谢谢。无需重复该代码。有关如何确定.xls文件是否早于97的任何建议? – Mitch 2014-10-06 19:19:23

+0

@Mitch有一种方法可以读取结构化存储 - 但不知道是否要沿着这条路线走下去。看到这里:http://stackoverflow.com/questions/2070985/programmatically-finding-an-excel-files-excel-version – Donal 2014-10-06 19:47:58

0

在旧的Excel文件的最后一行中应该有一个字符串,用于指定哪个版本的Excel创建它。我忘记了那些真正旧的那些的确切措辞,但对于Excel 2003,它是“Microsoft Excel 2003工作表”