GPUで並列処理の続きの記事がまだできていませんので、今回は別の記事を用意しました。 OpenXMLはMicrosoft Office2007で新たに採用された文章フォーマットです。 Microsoft独自のバイナリデータではなく、新たにXMLで記述された規格を採用したことで、外部アプリケーションから データ内容を操作しやすくなりました。 しかしながら、データ操作の際ECMAのOpenXML仕様書(Part 4: Markup Language Reference)を参照するわけですが、5千ページを超えているpdfですので ファイルを開くだけでマシンがカクカクする私にとっては大問題です。 よって今回Microsoft Excelのセル内容、レイアウトを変更するにあたって特に必要な部分についてまとめました。
フォルダ構成
まず、Excelファイルであるxlsxファイルを展開してみます。 すると次のようなフォルダ構成となっています。
root |- _rels | |- docProps | |- xl | |- [Content_Types].xmlこの中で表内のデータを操作する場合に必要なのはxlフォルダです。 そのフォルダ内で書き換えが必要なxmlは次の二つです。
それでは実際にファイル内容を変更してみましょう。ファイルフォーマット、ビューの定義(sheet.xml)
セル内のデータに変更を加えるのでsheet1.xmlを元に説明します。まずは行頭のxmlフォーマット定義部です。ここはほぼテンプレートなので変更する必要はないでしょう。UTF-8フォーマットで書かれているということを定義しています。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> |
次にシートのビューの状態に��いて設定する項目があります。シートのビューとはExcelでそのxlsxファイルをオープンした時に、どのようにファイルが表示されるかという事です。
<dimension ref="A1:D2"/> <sheetViews><sheetView tabSelected="1" workbookViewId="0"> <selection activeCell="D2" sqref="D2"/> </sheetView> </sheetViews> <sheetFormatPr defaultRowHeight="13.5"/> |
ここで使われているタグについて説明します。
- dimention : シートのデータが入っている左上のセル番号:右下のセル番号を登録
- sheetView : シートのビューIDとExcelで表示されるタブの番号を指定します
- selection : 現在Excel画面でカーソルがアクティブになっているセル(どこでもよいと思われます)
- shee tFormatPr : ロウのデフォルトの縦幅は13.5(point?)と定義されています (styles.xmlでスタイルが決定できるのですが・・・、なぜここでも定義する必要があるのかは不明)
セル内データの操作(sheet.xml)
理解しやすくするために、セルにデータを入力してみます。- A1 : 1(数値としての1)
- B1 : 2007/05/07(日付)
- C1 : 3列目(文字列)
- D1 : hogehoge(文字列)
- D2 : 8(数値としての8)
<sheetData> <row r="1" spans="1:4"> <c r="A1"><v>1</v></c> <c r="B1" s="1"><v>39575</v></c> <c r="C1" t="s"><v>0</v></c> <c r="D1" t="s"><v>1</v></c> </row><row r="2" spans="1:4"> <c r="D2"><v>8</v></c> </row> </sheetData> <phoneticPr fontId="1"/><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet> |
それではここのタグは詳細に解説したいと思います。
- sheetDataタグ : シート情報の開始タグです。アトリビュートはありません。
- rowタグ : 行の開始タグです(アトリビュート : r 行番号を指定します,spans 開始�列:終了列で指定します)
- cタグ : セル開始タグです(アトリビュート : 量が多いため後述します)
- vタグ : セル内の値を保持するタグです。
- phoneticPrタグ : フォントを変更しているようですが・・・特に操作したことがありませんorz
- pageMarginsタグ : ページ上下左右のマージンサイズを変更できます
- r : 行列番号を指定します
- s : 1を指定すると時刻を(年/月/日)のフォーマットで表示します
- t : sを指定するとstringテーブルを格納したxmlファイルから参照します、またstrを指定することでvタグ内に直接文字列を書き込むことができます。

以下の行を追加します。
<c r="E1" t="str"><v>new</v></c> |

正常に変更されました。もしファイルオープンに失敗する場合は以下の点に注意してください。
- 文字フォーマットはUTF-8で保存しているかどうか
- Book1.xlsxを解凍したときにでてくるBook1フォルダごと圧縮していないかどうか(圧縮するのはその下の3つのフォルダと1つのxmlファイルだけです)