2017-09-09 147 views
1

有沒有辦法以編程方式告訴Microsoft Office文件是以Open XML格式而不是舊的Office-97之前的二進制格式?有沒有辦法告訴Microsoft Office文件是否爲Open XML格式?

作爲最終用戶,我通常會將文件擴展名更改爲.zip並嘗試解壓縮存檔。如果它提取了,那麼我知道它是一種Open XML格式。但我甚至不確定這是否是一種防呆方法,並且它不適用的文件不是Open Xml文件。

我在Powershell和輸出中做了這個,由於CustomXmlParts屬性的存在,我可以在某種程度上猜測這是我正在查看的Open XML格式工作簿。

PS C:\Users\Sathyaish> $excel = New-Object -ComObject Excel.Application 
PS C:\Users\Sathyaish> $workbook = $excel.Workbooks.Open("C:\Sathyaish\temp\Foo.xlsx") 
PS C:\Users\Sathyaish> $workbook | select C*, F* 


Creator     : 1480803660 
ChangeHistoryDuration : 0 
Charts     : System.__ComObject 
CodeName     : 
CommandBars    : 
Comments     : 
ConflictResolution  : 1 
Container    : 
CreateBackup    : False 
CustomDocumentProperties : System.__ComObject 
CustomViews    : System.__ComObject 
CalculationVersion  : 171027 
ContentTypeProperties : 
Connections    : System.__ComObject 
CheckCompatibility  : False 
CustomXMLParts   : System.__ComObject 
ConnectionsDisabled  : False 
CaseSensitive   : False 
ChartDataPointTrack  : True 
FileFormat    : 51 
FullName     : C:\Sathyaish\temp\Foo.xlsx 
FullNameURLEncoded  : C:\Sathyaish\temp\Foo.xlsx 
Final     : False 
ForceFullCalculation  : False 

是否有VSTO/VBA的方式來告訴同樣的事情?也許通過查看以上列出的FileFormat屬性的值?什麼是有效的整數值及其含義?

或者必須選擇嘗試使用Open XML SDK加載文檔,如果它失敗,那麼您知道它不是正確的Open XML文件格式。但是這並不排除其他可能性,例如文件根本不是Microsoft Office文件。

+1

一個區別是文件擴展名:XLS VS XLSX。另一種非XML格式是xlsb(二進制)。擴展中的「x」和「m」表示Open XML。來自[Microsoft]的更多詳細信息(https://support.office.com/zh-cn/article/Open-XML-Formats-and-file-name-extensions-5200D93C-3449-4380-8E11-31EF14555B18) –

回答

1

Excel的FileFormatMicrosoft.Office.Interop.Excel.XlFileFormat型(每個Office應用程序都有自己的格式列表)

// 
    // Summary: 
    //  Specifies a type of text format 
    xlCurrentPlatformText = -4158, 
    // 
    // Summary: 
    //  Excel workbook format. 
    xlWorkbookNormal = -4143, 
    // 
    // Summary: 
    //  Symbolic link format. 
    xlSYLK = 2, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWKS = 4, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWK1 = 5, 
    // 
    // Summary: 
    //  Comma separated value. 
    xlCSV = 6, 
    // 
    // Summary: 
    //  Dbase 2 format. 
    xlDBF2 = 7, 
    // 
    // Summary: 
    //  Dbase 3 format. 
    xlDBF3 = 8, 
    // 
    // Summary: 
    //  Data Interchange format. 
    xlDIF = 9, 
    // 
    // Summary: 
    //  Dbase 4 format. 
    xlDBF4 = 11, 
    // 
    // Summary: 
    //  Deprecated format. 
    xlWJ2WD1 = 14, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWK3 = 15, 
    // 
    // Summary: 
    //  Excel version 2.0. 
    xlExcel2 = 16, 
    // 
    // Summary: 
    //  Excel template format. 
    xlTemplate = 17, 
    // 
    // Summary: 
    //  Template 8 
    xlTemplate8 = 17, 
    // 
    // Summary: 
    //  Microsoft Office Excel Add-In. 
    xlAddIn = 18, 
    // 
    // Summary: 
    //  Microsoft Excel 97-2003 Add-In 
    xlAddIn8 = 18, 
    // 
    // Summary: 
    //  Specifies a type of text format. 
    xlTextMac = 19, 
    // 
    // Summary: 
    //  Specifies a type of text format. 
    xlTextWindows = 20, 
    // 
    // Summary: 
    //  Specifies a type of text format. 
    xlTextMSDOS = 21, 
    // 
    // Summary: 
    //  Comma separated value. 
    xlCSVMac = 22, 
    // 
    // Summary: 
    //  Comma separated value. 
    xlCSVWindows = 23, 
    // 
    // Summary: 
    //  Comma separated value. 
    xlCSVMSDOS = 24, 
    // 
    // Summary: 
    //  Deprecated format. 
    xlIntlMacro = 25, 
    // 
    // Summary: 
    //  Microsoft Office Excel Add-In international format. 
    xlIntlAddIn = 26, 
    // 
    // Summary: 
    //  Excel version 2.0 far east. 
    xlExcel2FarEast = 27, 
    // 
    // Summary: 
    //  Microsoft Works 2.0 format 
    xlWorks2FarEast = 28, 
    // 
    // Summary: 
    //  Excel version 3.0. 
    xlExcel3 = 29, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWK1FMT = 30, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWK1ALL = 31, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWK3FM3 = 32, 
    // 
    // Summary: 
    //  Excel version 4.0. 
    xlExcel4 = 33, 
    // 
    // Summary: 
    //  Quattro Pro format. 
    xlWQ1 = 34, 
    // 
    // Summary: 
    //  Excel version 4.0. Workbook format. 
    xlExcel4Workbook = 35, 
    // 
    // Summary: 
    //  Specifies a type of text format. 
    xlTextPrinter = 36, 
    // 
    // Summary: 
    //  Lotus 1-2-3 format. 
    xlWK4 = 38, 
    // 
    // Summary: 
    //  Excel version 5.0. 
    xlExcel5 = 39, 
    // 
    // Summary: 
    //  Excel 95. 
    xlExcel7 = 39, 
    // 
    // Summary: 
    //  Deprecated format. 
    xlWJ3 = 40, 
    // 
    // Summary: 
    //  Deprecated format. 
    xlWJ3FJ3 = 41, 
    // 
    // Summary: 
    //  Specifies a type of text format. 
    xlUnicodeText = 42, 
    // 
    // Summary: 
    //  Excel version 95 and 97. 
    xlExcel9795 = 43, 
    // 
    // Summary: 
    //  Web page format. 
    xlHtml = 44, 
    // 
    // Summary: 
    //  MHT format. 
    xlWebArchive = 45, 
    // 
    // Summary: 
    //  Excel Spreadsheet format. 
    xlXMLSpreadsheet = 46, 
    // 
    // Summary: 
    //  Excel12 
    xlExcel12 = 50, 
    // 
    // Summary: 
    //  Open XML Workbook 
    xlOpenXMLWorkbook = 51, 
    // 
    // Summary: 
    //  Workbook default 
    xlWorkbookDefault = 51, 
    // 
    // Summary: 
    //  Open XML Workbook Macro Enabled 
    xlOpenXMLWorkbookMacroEnabled = 52, 
    // 
    // Summary: 
    //  Open XML Template Macro Enabled 
    xlOpenXMLTemplateMacroEnabled = 53, 
    // 
    // Summary: 
    //  Open XML Template 
    xlOpenXMLTemplate = 54, 
    // 
    // Summary: 
    //  Open XML Add-In 
    xlOpenXMLAddIn = 55, 
    // 
    // Summary: 
    //  Excel8 
    xlExcel8 = 56, 
    // 
    // Summary: 
    //  OpenDocument Spreadsheet 
    xlOpenDocumentSpreadsheet = 60 

你應該能夠在該整數鑄成XlFileFormat對象在PowerShell中,但我的頭頂部我不知道如何。它應該是這方面的一些變化(例如是C#):

Enum.Parse(typeof(Microsoft.Office.Interop.Excel.XlFileFormat), fileFormat)

+0

哦是的。謝謝。而Powershell的事情只是我試圖避免啓動Visual Studio甚至LINQPad。我不必在PowerShell中執行此操作。很可能Java除了那個(語言)並不重要。我真的只是對互操作程序集提供的API感興趣,而你的回答就是一針見血。所以謝謝。 –

相關問題