2014年12月12日金曜日

PowershellでWordのプロパティ値を操作

# ターゲットファイル(docx)
$dest = "C:\fo\test.docx"

# ファイル名の抽出
$filename = Split-Path $dest -Leaf
$work_name = $filename -replace ".docx", ""
# ダミーディレクトリ名の生成
$parent = $(Split-Path $dest -Parent) + "\"
$work_dir = $parent

# ダミーファイル名の生成
$work_dest = $work_dir + $work_name  + ".zip"

$core_dest = $work_dir + "core.xml"

# zip読み込みのためにダミーコピー
Copy-Item $dest $work_dest

# zipファイルの展開
$shell = New-Object -Com Shell.Application
$zipItem = $shell.NameSpace($work_dest)
$items1 = $zipItem.Items()
foreach($item1 in $items1) {
  If( $item1.Name -eq "docProps") {
    $items2 = $item1.GetFolder.items()
    foreach( $item2 in $items2){
      If( $item2.Name -eq "core.xml" ) {
        $item2.Name
        $shell.NameSpace($parent).copyhere($item2)
      }
    }
  }
}

$test = Get-Content .\orgcore.xml
$test2 =[regex]::Replace($test, "<dc\:title>[\s\S]*<\/dc\:title>", "<dc:title></dc:title>")
[System.IO.File]::WriteAllLines("C:\Users\pirshiki-admin\Desktop\ps-test\trush\test.xml", $test2, $Utf8NoBomEncoding)

#$xml = New-Object XML
#$xml.Load($core_dest)
# Write-Host $(Get-Content $($work_dir + "\docProps\core.xml"))
#$xml.coreProperties.revision = "aaa"
#$str_xml = $xml | ConvertTo-Xml -As String
#$str_xml = $xml.OuterXml
#$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
#[System.IO.File]::WriteAllLines($core_dest, $str_xml, $Utf8NoBomEncoding)
# $xml.Save($core_dest)

Remove-Item ($work_dest + "\docProps\core.xml")
$shell.NameSpace($work_dest + "\docProps\").Copyhere($core_dest)

0 件のコメント:

コメントを投稿