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となります。
Excel2CSVスクリプトのサンプル
簡単なVBスクリプトのサンプルは、以下のとおりです。
メモ帳などのエディターにソースコードをコピーして、「excel2csv.vbs」などのファイル名で保存します。
このScriptファイルにExcelファイルをドラッグ・アンド・ドロップすると、変換処理が行われます。
01 | If wscript.arguments.count > 0 Then |
02 | If CreateObject( "Scripting.FileSystemObject" ).FileExists ( wscript.arguments.item(0) ) = True Then |
03 | Call main ( wscript.arguments.item(0) ) |
09 | Set oExcel = CreateObject( "Excel.Application" ) |
10 | oExcel.Visible = false |
11 | oExcel.Application.DisplayAlerts = FALSE |
12 | sExt = LCase(MID(file, InStrRev(file, "." ) + 1)) |
14 | Set oDoc = oExcel.Workbooks.Open(file) |
15 | oExcel.ActiveWorkbook.SaveAs file & ".csv" , 62 |
17 | ElseIf sExt = "xls" Then |
18 | Set oDoc = oExcel.Workbooks.Open(file) |
19 | oExcel.ActiveWorkbook.SaveAs file & ".csv" , 62 |
上記のスクリプトは次のリンクからダウンロードできます。
!Note |
ご利用結果について、当社は一切の責任を負いません。 |
CSV2XMLスクリプトのサンプル
簡単なVBスクリプトのサンプルは、以下のとおりです。
メモ帳などのエディターにソースコードをコピーして、「csv2xml.vbs」などのファイル名で保存します。
このScriptファイルの6行目には「変換したいCSVファイル」を設定してください。7行目には「変換後のXMLファイル」を指定してください。
このScriptファイルをダブルクリック等で実行すると変換処理が行われます。
01 | Dim FSO, wShell, dPath, rPath, wPath |
03 | Set wShell = CreateObject( "WScript.Shell" ) |
04 | Set FSO = CreateObject( "Scripting.FileSystemObject" ) |
08 | Set ReadFile = FSO.OpenTextFile(rPath, 1, true) |
09 | Set WriteFile = FSO.OpenTextFile(wPath, 2, True ) |
14 | rStr = ReadFile.ReadLine |
15 | arrHead = Split(rStr, "," ) |
18 | WriteFile.WriteLine(wStr) |
20 | Do While ReadFile.AtEndOfStream <> True |
21 | rStr = ReadFile.ReadLine |
22 | arr = Split(rStr, "," ) |
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) & ">" |
32 | wStr = wStr & vbNewLine |
35 | wStr = wStr & vbTab & "" |
36 | WriteFile.WriteLine(wStr) |
42 | WriteFile.WriteLine(wStr) |
上記スクリプトは次のリンクからダウンロードできます。
とても簡単なスクリプトなので、セル内でクォーテーション(”)や改行を含むデータを正しく処理できない場合があります。また、1行目をヘッダー行として扱うため、1行目の各セルの内容がXMLの要素名として使えない場合(数字始まりや、「&」記号が含まれるなど)、XMLとして扱えないデータが出力されることがあります。
!Note |
ご利用結果について、当社は一切の責任を負いません。 |