ファイル形式を検出し、形式の互換性をチェックする
ファイル拡張子によってはファイルの内容が適切であることが保証されないため、ドキュメントを開く前に形式を決定する必要がある場合があります。たとえば、Crystal Reports はドキュメントを RTF 形式で出力することが多いですが、ドキュメントには .doc 拡張子が付いていることが知られています。
Aspose.Words は、ファイルの実際の内容が不明な場合に例外を回避するために、ファイル タイプに関する情報を取得する機能を提供します。
例外なくファイル形式を検出
さまざまなファイル形式の複数のドキュメントを扱う場合、Aspose.Words で処理できるファイルと処理できないファイルを分離する必要がある場合があります。一部のドキュメントが処理できない理由を知りたい場合もあります。
ファイルを Document オブジェクトにロードしようとしたときに、Aspose.Words がファイル形式を認識できないか、形式がサポートされていない場合、Aspose.Words は例外をスローします。これらの例外をキャッチして分析することもできますが、Aspose.Words は、例外の可能性があるドキュメントをロードせずにファイル形式を迅速に判断できる detect_file_format メソッドも提供します。このメソッドは、ファイルの種類について検出された情報を含む FileFormatInfo オブジェクトを返します。
ファイル形式の互換性を確認する
選択したフォルダー内のすべてのファイルの形式の互換性を確認し、形式ごとに対応するサブフォルダーに分類できます。
フォルダー内のコンテンツを処理しているため、最初に行う必要があるのは、OS モジュールの リストディレクトリ メソッドを使用して、このフォルダー内のすべてのファイルのコレクションを取得することです。
次のコード例は、フォルダー内のすべてのファイルのリストを取得する方法を示しています。
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
fileList = (file for file in os.listdir(docs_base.my_dir) | |
if (os.path.isfile(os.path.join(docs_base.my_dir, file)) and not file.endswith("Corrupted document.docx"))) | |
すべてのファイルが収集されると、残りの作業はファイル形式をチェックする detect_file_format メソッドによって実行されます。
次のコード例は、収集されたファイルのリストを反復処理し、各ファイルの形式を確認し、各ファイルを適切なフォルダーに移動する方法を示しています。
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
supported_dir = docs_base.artifacts_dir + "Supported" | |
unknown_dir = docs_base.artifacts_dir + "Unknown" | |
encrypted_dir = docs_base.artifacts_dir + "Encrypted" | |
pre97_dir = docs_base.artifacts_dir + "Pre97" | |
# Create the directories if they do not already exist. | |
if not os.path.exists(supported_dir): | |
os.makedirs(supported_dir) | |
if not os.path.exists(unknown_dir): | |
os.makedirs(unknown_dir) | |
if not os.path.exists(encrypted_dir): | |
os.makedirs(encrypted_dir) | |
if not os.path.exists(pre97_dir): | |
os.makedirs(pre97_dir) | |
fileList = (file for file in os.listdir(docs_base.my_dir) | |
if (os.path.isfile(os.path.join(docs_base.my_dir, file)) and not file.endswith("Corrupted document.docx"))) | |
for fileName in fileList: | |
name_only = fileName | |
fileName = os.path.join(docs_base.my_dir, name_only) | |
print(name_only) | |
info = aw.FileFormatUtil.detect_file_format(fileName) | |
lf = info.load_format | |
# Display the document type | |
if lf == aw.LoadFormat.DOC: | |
print("\tMicrosoft Word 97-2003 document.") | |
elif lf == aw.LoadFormat.DOT: | |
print("\tMicrosoft Word 97-2003 template.") | |
elif lf == aw.LoadFormat.DOCX: | |
print("\tOffice Open XML WordprocessingML Macro-Free Document.") | |
elif lf == aw.LoadFormat.DOCM: | |
print("\tOffice Open XML WordprocessingML Macro-Enabled Document.") | |
elif lf == aw.LoadFormat.DOTX: | |
print("\tOffice Open XML WordprocessingML Macro-Free Template.") | |
elif lf == aw.LoadFormat.DOTM: | |
print("\tOffice Open XML WordprocessingML Macro-Enabled Template.") | |
elif lf == aw.LoadFormat.FLAT_OPC: | |
print("\tFlat OPC document.") | |
elif lf == aw.LoadFormat.RTF: | |
print("\tRTF format.") | |
elif lf == aw.LoadFormat.WORD_ML: | |
print("\tMicrosoft Word 2003 WordprocessingML format.") | |
elif lf == aw.LoadFormat.HTML: | |
print("\tHTML format.") | |
elif lf == aw.LoadFormat.MHTML: | |
print("\tMHTML (Web archive) format.") | |
elif lf == aw.LoadFormat.ODT: | |
print("\tOpenDocument Text.") | |
elif lf == aw.LoadFormat.OTT: | |
print("\tOpenDocument Text Template.") | |
elif lf == aw.LoadFormat.DOC_PRE_WORD60: | |
print("\tMS Word 6 or Word 95 format.") | |
elif lf == aw.LoadFormat.UNKNOWN: | |
print("\tUnknown format.") | |
if info.is_encrypted: | |
print("\tAn encrypted document.") | |
shutil.copyfile(fileName, os.path.join(encrypted_dir, name_only)) | |
else: | |
if lf == aw.LoadFormat.DOC_PRE_WORD60: | |
shutil.copyfile(fileName, os.path.join(pre97_dir, name_only)) | |
elif lf == aw.LoadFormat.UNKNOWN: | |
shutil.copyfile(fileName, os.path.join(unknown_dir, name_only)) | |
else: | |
shutil.copyfile(fileName, os.path.join(supported_dir, name_only)) | |
ファイルは、シャティル モジュールの コピーファイル メソッドを使用して適切なサブフォルダーに移動されます。
上記の例では次のファイルが使用されています。ファイル名が左側にあり、その説明が右側にあります。
ファイルのGroup | 入力ドキュメント | タイプ |
---|---|---|
サポートされているファイル形式 | テスト ファイル (ドキュメント).doc | Microsoft Word 95/6.0 または Microsoft Word 97 – 2003 ドキュメント。 |
テストファイル(Dot ).dot |
Microsoft Word 95/6.0 または Microsoft Word 97 – 2003 テンプレート。 | |
テスト ファイル (Docx).docx | Office Open XML WordprocessingML ドキュメント (マクロなし)。 | |
テスト ファイル (Docm).docm | Office Open XML WordprocessingML ドキュメントとマクロ。 | |
テスト ファイル (Dotx).dotx | Office Open XML WordprocessingML テンプレート。 | |
テストファイル (Dotm).dotm | マクロを備えた Office Open XML WordprocessingML テンプレート。 | |
テストファイル(XML).xml | FlatOPC OOXML ドキュメント。 | |
テストファイル(RTF).rtf | リッチテキスト形式のドキュメント。 | |
テストファイル(WordML).xml | Microsoft Word 2003 WordprocessingML ドキュメント。 | |
テストファイル(HTML).html | HTMLドキュメント。 | |
テストファイル(MHTML).mhtml | MHTML (Web アーカイブ) ドキュメント。 | |
テストファイル(Odt).odt | OpenDocument テキスト (OpenOffice Writer)。 | |
テストファイル(オット).ott | OpenDocument ドキュメント テンプレート。 | |
テスト ファイル (DocPreWord60).doc | Microsoft Word 2.0 ドキュメント。 | |
暗号化された文書 | テスト ファイル (Enc).doc | 暗号化された Microsoft Word 95/6.0 または Microsoft Word 97 – 2003 ドキュメント。 |
テストファイル(Enc).docx | 暗号化された Office Open XML WordprocessingML ドキュメント。 | |
サポートされていないファイル形式 | テストファイル(JPG).jpg | JPEG画像ファイル。 |