有没有办法以编程方式告诉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文件。
答案 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)