有没有办法告诉Microsoft Office文件是否采用Open XML格式?

时间:2017-09-09 10:43:03

标签: vba ms-office vsto openxml openxml-sdk

有没有办法以编程方式告诉Microsoft Office文件是Open XML格式而不是旧的Office-97之前的二进制格式?

作为最终用户,我通常会将文件扩展名更改为 .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 个答案:

答案 0 :(得分:1)

Excel FileFormat的类型为Microsoft.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

你应该能够将这个整数值转换为PowerShell中的XlFileFormat对象,但是我不知道究竟是怎么回事。它应该有一些变化(例如C#):

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