XML活用講座

ExcelからXMLに変換する





概要

今回は、ExcelファイルをXMLに変換する方法を説明します。また、Excelファイルだけでなく、CSV(カンマ区切りテキスト)やTSV(タブ区切りテキスト)からの変換方法もご紹介します。
CSVやTSVの他にも、Microsoft Access、MySQL、PostgreSQLなどのデータベースからも「CSVエクスポート機能」などを使ってデータを書き出せば、XMLに変換できます。
データをXML化してしまえば、Webサイトで「商品一覧」や「商品明細」として表示させるプログラムの自動作成や、「商品カタログ」用のPDFや印刷データの自動組版処理に利用できます。例えば当社では、Excelから変換したXMLデータを翻訳し、多言語の商品カタログを制作するなど、数多くの事例があります。

 

Microsoft Excel (CSV・TSV)からの変換

Wordだけでなく、Excelからもツールを利用してXMLに変換できます。

しかし、Excelから直接XMLに変換できるソフトウエアはあまり多くありません。
当社でもExcelデータ(*.xlsx)をXMLに変換するツールを独自に開発していますが、変換速度や安定性を考慮し、用途に応じてサードパーティー製のソフトウエアを併用することがあります。

その場合は、「Excel2XML」といったキーワードよりも「CSV2XML」などでインターネットサイトを検索した方が、多くのソフトウエアが見つかります。
ExcelファイルをExcelで開いて「CSV形式」や「TSV形式(UNICODEテキスト)」で別名保存した後、そのデータを変換する流れとなります。

特に多言語のExcelファイルを扱いたい場合は「CSV形式」よりも「TSV形式」をお勧めします。日本語版Excelの場合、「CSV形式」で保存すると文字コードが「Shift_JIS」となってしまい、多言語の文字列が正しく書き出せないからです。「TSV形式」で保存すると文字コードが「UTF-16」となるため、多言語のデータであっても元データとして扱えるようになります。

!Note
「CSV」 とは“comma-separated values”の略で、カンマ(,)でデータを区切った形式のテキストファイルです。
「TSV」 とは“tab-separated values”の略で、タブ記号でデータを区切った形式のテキストファイルです。
文字コードについては、「CSVがShift_JIS」 「TSVがUNICODE」という決まりはなく、Microsoft Excelの保存機能の仕様によるものです。

 

変換イメージ

元データ(Excel)のイメージ

1行1列目のデータ 1行2列目のデータ
2行1列目のデータ 2行2列目のデータ

 

XML化したイメージ

Excelシート・CSV1ファイル・TSV1ファイルを1つの元データの単位として、ほとんどの場合は「ルート」「行」「セル」の3階層から成る単純なXMLとなります。

01     
02<root>
03    <row>
04        <cell>
05            1行1列目のデータ
06        </cell>
07        <cell>
08            1行2列目のデータ
09        </cell>
10    </row>
11    <row>
12        <cell>
13            2行1列目のデータ
14        </cell>
15        <cell>
16            2行2列目のデータ
17        </cell>
18    </row>
19</root>

 

Excel2CSVスクリプトのサンプル

簡単なVBスクリプトのサンプルは、以下のとおりです。

メモ帳などのエディターにソースコードをコピーして、「excel2csv.vbs」などのファイル名で保存します。
このScriptファイルにExcelファイルをドラッグ・アンド・ドロップすると、変換処理が行われます。

01If wscript.arguments.count > 0 Then
02    If CreateObject("Scripting.FileSystemObject").FileExists ( wscript.arguments.item(0) ) = True Then
03        Call main ( wscript.arguments.item(0) )
04    End If
05End If
06Sub main(file)
07    Dim oExcel, oDoc
08    Dim sExt
09    Set oExcel = CreateObject("Excel.Application")
10    oExcel.Visible = false
11    oExcel.Application.DisplayAlerts = FALSE
12    sExt  = LCase(MID(file, InStrRev(file, ".") + 1))
13    If sExt = "xlsx" Then
14        Set oDoc = oExcel.Workbooks.Open(file)
15        oExcel.ActiveWorkbook.SaveAs file & ".csv", 62
16        oDoc.Close
17    ElseIf sExt = "xls" Then
18        Set oDoc = oExcel.Workbooks.Open(file)
19        oExcel.ActiveWorkbook.SaveAs file & ".csv", 62
20        oDoc.Close
21    End If
22    Set oDoc = Nothing
23    oExcel.Quit
24    Set oExcel = Nothing
25End Sub

上記のスクリプトは次のリンクからダウンロードできます。

excel2csv.vbs

 

 

!Note
ご利用結果について、当社は一切の責任を負いません。

 

CSV2XMLスクリプトのサンプル

簡単なVBスクリプトのサンプルは、以下のとおりです。

メモ帳などのエディターにソースコードをコピーして、「csv2xml.vbs」などのファイル名で保存します。
このScriptファイルの6行目には「変換したいCSVファイル」を設定してください。7行目には「変換後のXMLファイル」を指定してください。
このScriptファイルをダブルクリック等で実行すると変換処理が行われます。

01Dim FSO, wShell, dPath, rPath, wPath
02 
03Set wShell = CreateObject("WScript.Shell")
04Set FSO = CreateObject("Scripting.FileSystemObject")
05 
06rPath = "C:input.csv"
07wPath = "C:output.xml"
08Set ReadFile = FSO.OpenTextFile(rPath, 1, true)
09Set WriteFile = FSO.OpenTextFile(wPath, 2, True)
10 
11Dim arr, arrHead
12 
13wStr = ""
14rStr = ReadFile.ReadLine
15arrHead = Split(rStr, ",")
16 
17wStr = wStr & ""
18WriteFile.WriteLine(wStr)
19 
20Do While ReadFile.AtEndOfStream <> True
21    rStr = ReadFile.ReadLine
22    arr = Split(rStr, ",")
23    wStr = ""
24    If UBound(arr) > -1 Then
25        wStr = wStr & vbTab & ""
26        wStr = wStr & vbNewLine
27        For i = 0 to UBound(arr)
28            If i < UBOUND(arrHead) +1 Then
29                wStr = wStr & vbTab & vbTab & "<" & arrHead(i) & ">"
30                wStr = wStr & arr(i)
31                wStr = wStr & ""
32                wStr = wStr & vbNewLine
33            End If
34        Next
35        wStr = wStr & vbTab & ""
36        WriteFile.WriteLine(wStr)
37        wStr = ""
38    End If
39Loop
40 
41wStr = wStr & ""
42WriteFile.WriteLine(wStr)
43 
44ReadFile.Close()
45WriteFile.Close()
46 
47Set wShell = Nothing
48Set FSO = Nothing

上記スクリプトは次のリンクからダウンロードできます。

csv2xml.vbs

 

とても簡単なスクリプトなので、セル内でクォーテーション(”)や改行を含むデータを正しく処理できない場合があります。また、1行目をヘッダー行として扱うため、1行目の各セルの内容がXMLの要素名として使えない場合(数字始まりや、「&」記号が含まれるなど)、XMLとして扱えないデータが出力されることがあります。

 

!Note
ご利用結果について、当社は一切の責任を負いません。

 



ページTOPへ