XML(Extensible Markup Language)は超文書マークアップ言語であり、ファイル形式でもあります。XMLは、カスタムタグを設定でき、拡張性があり、読み書きしやすく、転送が容易などの特長があり、アプリケーション間のデータ交換の最も一般的なツールになっています。XML形式は、転送が容易で、開発者が表を操作しやすく、一般ユーザーに届ける際には、xlsやxlsxなどの形式で表示する必要があるため、ユーザーが読み書きしやすいです。本稿では、XMLファイルとExcelスプレッドシートの相互変換の方法について説明します。
本稿で紹介する方法では、Spire.XLS for Pythonが必要であり、公式ウェブサイトからダウンロードするか、pipでインストール(Dispatch 1.7.4も同時にインストール)することができます:
pip install Spire.XLS-for-Python
pip install plum-dispatch==1.7.4
ExcelスプレッドシートをXMLに変換する
SaveAsXML(fileName: str) メソッドまたは SaveToFile(fileName: str, FileFormat.XML) メソッドを使用して、ExcelワークブックをXMLファイルに変換することができます。XMLファイルに変換すると、フォント、フォントサイズなどのスタイルだけが保持されます。次に詳細な操作手順を示します:
- Workbook クラスのオブジェクトを作成します。
- Workbook.LoadFromFile() メソッドでExcel表を読み込みます。
- Workbook.SaveAsXml() メソッドまたは Workbook.SaveToFile() メソッドで表をXMLファイルに変換して保存します。
Python
from spire.xls import *
from spire.common import *
# Workbookクラスのオブジェクトを作成
workbook = Workbook()
# Excelワークブックをロード
workbook.LoadFromFile("G:/文書/例.xlsx")
# XMLファイルに変換して保存
workbook.SaveAsXml("output/ワークブック.xml")
# workbook.SaveToFile("output/ワークブック.xml", FileFormat.XML)
標準的なXMLファイルをExcelワークシートに変換する
Excelの標準に準拠したXMLファイルであれば、ワークブックに直接変換することができます。操作手順は以下の通りです:
- Workbook クラスのオブジェクトを作成します。
- Workbook.LoadFromXml() メソッドでXMLファイルを読み込みます
- Workbook.SaveToFile() メソッドでXMLファイルをExcelワークブックに変換して保存します。
Python
from spire.xls import *
from spire.common import *
# Workbookクラスのオブジェクトを作成
workbook = Workbook()
# XMLファイルをロード
workbook.LoadFromXml("output/ワークブック.xml")
# XMLファイルをExcelワークブックに変換して保存
workbook.SaveToFile("output/XMLからExcelへの変換.xlsx", FileFormat.Version2016)
XMLデータを読み取り、Excelワークブックに保存する
Excelの標準に準じていないXMLファイルの場合、その中のデータを読み取り、Excelワークブックに保存することで変換を実現することができます。
以下のXMLファイルを読み取るためのものです:
<students>
<student>
<姓名>ジョン</姓名>
<年齢>25</年齢>
<性別>男</性別>
<住所>アメリカのどこかの町123番地</住所>
<電話番号>(123) 456-7890</電話番号>
</student>
<student>
<姓名>ジェーン</姓名>
<年齢>30</年齢>
<性別>女</性別>
<住所>アメリカのどこかの町456番地</住所>
<電話番号>(123) 456-7891</電話番号>
</student>
<student>
<姓名>ジャック</姓名>
<年齢>35</年齢>
<性別>男</性別>
<住所>アメリカのどこかの町789番地</住所>
<電話番号>(123) 456-7892</電話番号>
</student>
<student>
<姓名>サラ</姓名>
<年齢>28</年齢>
<性別>女</性別>
<住所>アメリカのどこかの町321番地</住所>
<電話番号>(123) 456-7893</電話番号>
</student>
<student>
<姓名>デイビッド</姓名>
<年齢>40</年齢>
<性別>男</性別>
<住所>アメリカのどこかの町654番地</住所>
<電話番号>(123) 456-7894</電話番号>
</student>
<student>
<姓名>エミリー</姓名>
<年齢>22</年齢>
<性別>女</性別>
<住所>アメリカのどこかの町987番地</住所>
<電話番号>(123) 456-7895</電話番号>
</student>
<student>
<姓名>マイケル</姓名>
<年齢>33</年齢>
<性別>男</性別>
<住所>アメリカのどこかの町246番地</住所>
<電話番号>(123) 456-7896</電話番号>
</student>
<student>
<姓名>レイチェル</姓名>
<年齢>27</年齢>
<性別>女</性別>
<住所>アメリカのどこかの町135番地</住所>
<電話番号>(123) 456-7897</電話番号>
</student>
</students>
詳細な操作手順は以下の通りです:
- Workbook クラスのオブジェクトを作成します。
- XMLデータをロードします。
- 最初のstudentノードを取得して列数とヘッダーを決定します。
- Worksheet.Name プロパティを通してワークシートの名前を設定します。
- Worksheet.SetValue() メソッドでデータを書き込みます。
- Workbook.SaveToFile() メソッドでワークブックを新しい Excel ファイルとして保存します。
Python
from spire.xls import *
from spire.common import *
import xml.etree.ElementTree as ET
# Workbookクラスのオブジェクトを作成
workbook = Workbook()
# XMLデータをロード
xml_tree = ET.parse("G:/文書/例.xml")
xml_root = xml_tree.getroot()
# 列数とヘッダーを決定するために最初のstudentノードを取得
first_student = xml_root.find("student")
header = list(first_student.iter())[1:] # 最初のノードをスキップ
# ワークシートを追加し、ワークシート名を設定
worksheet_name = xml_root.tag
worksheet = workbook.Worksheets[0]
worksheet.Name = worksheet_name
# ヘッダーを書き込む
for col_index, header_node in enumerate(header, start=1):
header_text = header_node.tag
worksheet.SetValue(1, col_index, header_text)
# 学生データを書き込む
row_index = 2
for student in xml_root.iter("student"):
for col_index, data_node in enumerate(list(student.iter())[1:], start=1): # 最初のノードをスキップ
value = data_node.text
worksheet.SetValue(row_index, col_index, value)
row_index += 1
# ワークブックを新しいExcelファイルとして保存
workbook.SaveToFile("output/new_workbook.xlsx")
以上がXMLとExcelシートの相互変換についての紹介です。Spire.XLS for Pythonには他にも多くの機能がありますので、Spire.XLS for Pythonのチュートリアルで詳細をご覧いただけます。何か問題があれば、Spire.XLSのフォーラムで議論に参加してください。