有没有办法告诉 Microsoft Office 文件是 Open XML 格式?
Is there a way to tell that a Microsoft Office file is in the Open XML format?
有没有办法以编程方式告诉 Microsoft Office 文件是 Open XML 格式而不是旧的 Office-97 之前的二进制格式?
作为最终用户,我通常将文件扩展名更改为 .zip 并尝试提取存档。如果它确实提取了,那么我知道它是一种 Open XML 格式。但我什至不确定这是否是一种万无一失的方法,它不起作用的文件不是打开 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 文件。
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)
有没有办法以编程方式告诉 Microsoft Office 文件是 Open XML 格式而不是旧的 Office-97 之前的二进制格式?
作为最终用户,我通常将文件扩展名更改为 .zip 并尝试提取存档。如果它确实提取了,那么我知道它是一种 Open XML 格式。但我什至不确定这是否是一种万无一失的方法,它不起作用的文件不是打开 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 文件。
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)