概要
VBA のサンプルはたくさんあるので、PowerShell(Ver5.1) で書いてみました。
前提
LotusScript は 32bit版 PowerShell でしか動作しません。
ソース
Export-Csv.ps1
using namespace System.IO;
# [32bit版 PowerShell](C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe) でしか使えません。
Param (
# Notes DB ファイルパス
[Parameter(Mandatory, ValueFromPipeline, Position=0)]
[FileInfo] $Path
) Begin {
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Stop
# Notes を設定するセッション接続
$Notes = New-Object -ComObject Lotus.NotesSession
$Notes.Initialize('')
} Process {
$db = $Notes.GetDatabase('', $Path, $false)
$Title = $db.Title
$Documents = $db.AllDocuments
$doc = $Documents.GetFirstDocument()
$rows = if ($doc) {
do {
$row = @{}
$doc.Items | % {
if (![string]::IsNullOrEmpty($_.Name)) {
$row.Add($_.Name, $_.Text)
}
}
[PSCustomObject]$row
$doc = $Documents.GetNextDocument($doc)
} while ($doc)
}
if ($rows) {
pushd $Path.DirectoryName
$rows | Export-Csv -NoTypeInformation "$Title.csv" -Encoding UTF8
popd
}
} End {
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue
}
使い方
Notes 文書ファイル(.nsf) をパイプラインで渡せます。
dir C:\NotesDb -File -Recurse -Include *.nsf | .\Export-Csv.ps1