2014-10-06 118 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工作表」