簡體   English   中英

如何在C#中檢查Excel文件的版本?

[英]How can I check the version of Excel files in C#?

我需要區分使用選定的Excel文件的Excel 2010或Excel 2013版本創建的選定文件,並且服務器上的Excel應用程序必須匹配才能繼續。

我可以獲取服務器的Excel應用程序版本:

 xApp = new Microsoft.Office.Interop.Excel.Application();
// getting version of Server's Excel Application
string versionName = xApp.Version;
int length = versionName.IndexOf('.');
versionName = versionName.Substring(0, length);
object missing = Type.Missing;
object trueObject = true;
xApp.Visible = false;
xApp.DisplayAlerts = false;
xWorkBook = 
xApp.Workbooks.Open(ExcelFilePath, missing, trueObject, 
                    missing, missing, missing,
                    missing, missing, missing,
                    missing, missing, missing, missing, missing, missing);

但是,如何獲得打開的Excel文件的Excel版本? 在當前情況下, versionName返回14.0 ,適用於Office 2010。

對於.xls文件,您需要從MSDN中解碼“ BIFF”值:如何確定Microsoft Excel工作簿的版本

Microsoft Excel使用結構化存儲來保存數據。 特別是,它將創建一個名為“ Workbook”(以前只是“ Book”)的數據流,並在其中保存以BOF(文件開頭)記錄開頭的內容。

那篇文章中也有一些代碼,但是我不確定在不侵犯版權的情況下可以從中得到多少。

根據該文章底部的表格,該格式最多可用於Excel 2002。

至於.xlsx文件,您可以使用任何zip文件庫將其打開,然后打開docProps\\app.xml文件,然后在內部找到以下內容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns=...>
    ....
    <AppVersion>15.0300</AppVersion>
</Properties>

這將告訴您保存該特定文件的Excel版本。

還要注意,Excel將根據文件的內容而不是擴展名來確定是使用新存儲加載還是舊存儲加載,因此,您可以存儲帶有.xlsx擴展名和新樣式的舊文件擴展名為.xls的文件,Excel仍會打開它,您也應該打開它。 Excel會發出警告,但是如何處理差異取決於您。

OLE文件屬性讀取器找到了一個簡單的解決方案

var doc = new OleDocumentPropertiesClass();
doc.Open(ExcelFilePath, false, dsoFileOpenOptions.dsoOptionDefault);
string DocFileVersion = doc.SummaryProperties.Version.ToString();

這將返回應用程序版本的excel文件的版本...

代碼沒有錯,您可以使用開關大小寫來檢測文件的版本。

Excel 95 (v7.0)
Excel 97 (v8.0)
Excel 2000 (v9.0)
Excel 2002 (v10.0)
Excel 2003 (v11.0)
Excel 2007 (v12.0)
Excel 2010 (v14.0)
Excel 2013 (v15.0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM