ZipPackageクラスを使ってOfficeファイルを編集する

UWSC公式掲示板に、ワードファイルの新規自動作成についての質問があった。
方法を考えたものの、簡単には実証コードが書けなくて断念したのだが、、、くやしいので再挑戦した。
全てPowershellを使って書いても良かったけど、UWSCでの質問なので、編集周りだけPowershellにした。



解説

いつもならスクリプト掲載が先ですが、Wordファイルを含んでいて長いので、先に解説。
思想としては、内包したひな形をファイル出力して、Powershell使って編集する、という形です。
速度を求めるなら、Powershell内でやるべき(UWSCPowershell関数コールは重たい)。


既存の「フォルダ1」〜「フォルダ100」に、「ファイル1.docx」〜「ファイル100.docx」をそれぞれ作成し、本文にファイル名と固定文を記載する、というもの。
フォルダ1〜100がスクリプトと同じ場所に存在しないと、エラーとなります。


UWSCスクリプトは、ほとんどが内包したひな形の出力を担当。
編集は、TEXTBLOCKに定義したPowershellスクリプトです。


Wordの本文は、/word/document.xmlにあるようなので、そこを編集します。
該当の部分をXmlDocumentとして読み込み、差分を更新。
差分の更新は「$doc.document.body.p[0].r[1].t = $suffix」の部分ですが、その位置なのは、内包したひな形の都合です。
ひな形を変更したりした場合は、この部分を修正する必要があるかと思います。


はまったポイントは、ZipPackageクラスはCloseの段階でファイル更新が行われること。(CloseじゃなくてFlushか)
ZipPackagePartのGetStreamしたストリームを更新し、またGetStreamしても前のままという。


ひな形のUWSCスクリプト化は、
ファイルをUWSCスクリプトにするスクリプト - じゅんじゅんのきまぐれ
を参照のこと。

スクリプト

OPTION EXPLICIT

// 対象パス
DIM ppath = GET_CUR_DIR + "\", pshCode = REPLACE(_PSH_CODE, "%target%", ppath)

DIM xml = CreateOleObj("Microsoft.XMLDOM"), t=xml.createElement("t"), i
t.dataType="bin.base64"
t.text=_DOCX
FOR i = 1 TO 100
	// 編集前ファイル生成
	WITH CreateOleObj("ADODB.Stream")
		.Open()
		.Type=1
		.Write(t.nodeTypedValue)
		.SaveToFile(ppath + "フォルダ" + i + "\ファイル" + i + ".docx", 2)
		.Close()
	ENDWITH
	// 更新
	Powershell(Replace(pshCode, "%number%", i))
NEXT




TEXTBLOCK _PSH_CODE
Add-Type -AssemblyName WindowsBase
$parentPath = '%target%'
$i = %number%
$suffix = '' + $i + '.docx'
$path = $parentPath + 'フォルダ' + $i + '\ファイル' + $suffix
$package = [System.IO.Packaging.Package]::Open($path)
$enc = [System.Text.Encoding]::UTF8
foreach($p in $package.GetParts()) {
	if($p.Uri.OriginalString -eq '/word/document.xml') {
		$sr = New-Object System.IO.StreamReader $p.GetStream(),$enc
		$doc = [xml]$sr.ReadToEnd()
		$sr.Close()
		$doc.document.body.p[0].r[1].t = $suffix
		$sw = New-Object System.IO.StreamWriter $p.GetStream(),$enc
		$doc.Save($sw)
		$sw.Close()
	}
}
$package.Close()
ENDTEXTBLOCK

TEXTBLOCK _DOCX
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
AAD6IAAAAAA=
ENDTEXTBLOCK