2017-09-09 17 views
1

Microsoft Officeファイルが以前のOffice 97以前のバイナリ形式ではなく、Open XML形式であることをプログラムで通知する方法はありますか?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

は、違いの1つは、ファイルの拡張子です:XLSX対XLS。もう1つの非XML形式はxlsb(バイナリ)です。拡張子の「x」と「m」はOpen XMLを示します。 [Microsoft]からの詳細(https://support.office.com/en-us/article/Open-XML-Formats-and-file-name-extensions-5200D93C-3449-4380-8E11-31EF14555B18) –

答えて

1

FileFormatはタイプMicrosoft.Office.Interop.Excel.XlFileFormatであるExcelの(各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)

+0

ああはい。ありがとうございました。 PowershellはVisual StudioやLINQPadの起動を避けようとしていました。私はPowershellでそれをする必要はありません。おそらくJavaの可能性がありますが、それは(言語)は関係ありません。私は実際にinteropアセンブリによって提供されるAPIに興味があり、あなたの答えは頭の爪に当たります。だから、ありがとう。 –

関連する問題