##セル内の文字列の置換~その1
前回ではセル内の文字列の読み出しができたので、今度は置換を試してみたいと思います。前回使ったものに手を加えて、図のようなxlsxファイルを用意しました。
どのセルの文字列か判定できるようにこんな風にしましたが、ひとまず、全部同じ文字列に置換させてみます。
xlsx操作2.rdr
文字列xmlは、「[プログラムの位置]カレンダー\xl\sharedStrings.xml」をXMLとして開いたもの
文字セル一覧は、文字列xmlから「sst\si」を取得したもの
文字セル一覧を箱へそれぞれ繰り返す
臨時一覧は、箱の要素一覧
臨時一覧を器へそれぞれ繰り返す
もし器の名前が「t」ならば
器の内容は、「テスト」
もし終わり
繰り返し終わり
繰り返し終わり
「[プログラムの位置]カレンダー\xl\sharedStrings.xml」に文字列xmlを保存する
プロデルでXMLをファイルに保存すると、インデントや改行で整形して出力してくれます。コードの実行結果です。
sharedString.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="56" uniqueCount="56">
<si>
<t>テスト</t>
<phoneticPr fontId="3" />
</si>
<si>
<t>テスト</t>
<phoneticPr fontId="3" />
</si>
<si>
<t>テスト</t>
<phoneticPr fontId="3" />
</si>
<si>
<t>テスト</t>
<phoneticPr fontId="3" />
</si>
<si>
<t>テスト</t>
<phoneticPr fontId="3" />
</si>
<以下略>
置換できています。
##xlsxファイルを復元する
このxmlファイルからxlsxファイルを復元します。元のxlsxファイルを展開した時にできたファイル群をzip圧縮して拡張子を変更すればいいのですが、いろいろなサイトで書かれているように、ファイル群が入っているフォルダごと圧縮するのではなく、その直下の
_rels
docProps
xl
[Content_Types].xml
の4つをzip圧縮しないとExcelで開いたときにエラーになります(そうと分からずちょっと悩みました)。できたファイルは正常に開けました。
xlsxの自力編集は高率で読み込みに失敗するらしいのですが、sharedStrings.xmlを整形した程度なら大丈夫なようです。
~続く~