まず、StringTemplateのサイトからDLLを落としてくる。
その中から、
・ antlr.runtime.dll
・ StringTemplate.dll
の二つを、適当なフォルダにコピーしておく。
テンプレートファイルはfoo.stというファイル名で
foo : $foo$
みないなのを作る。
先ほど、コピーした二つのファイルとfoo.stのあるフォルダで下記を実行する。
> [void][System.Reflection.Assembly]::LoadFrom(( Join-Path $pwd StringTemplate.dll))
> $sr = New-Object System.IO.StreamReader(
>> ( Join-Path $pwd foo.st ) ,
>> [System.Text.Encoding]::GetEncoding("shift-jis"))
>>
> $t = New-Object antlr.StringTemplate.StringTemplate($sr.ReadToEnd())
> $sr.Close()
> $t.SetAttribute("foo","テスト")
> $t.ToString()
結果:
foo : テスト
みたいに返ってくる。
PowerShellでリモートのイベントログを取得する
PowerShellでサーバーのイベントログを取得する必要があったので試してみた。
> $e = New-Object System.Diagnostics.EventLog
> $e.Log = "application"
> $e.MachineName = "RemoteServerName" #リモートのサーバー名を指定する
> $e.Entries
Index Time Type Source EventID Message
----- ---- ---- ------ ------- -------
886 9 04 11:30 Info Windows Search Se... 1013 Windows Search サービスが正常に停止しまし...
887 9 04 11:30 Info Service1 0 サービスが正常に終了しました。
ついでに、CSVに出力
> $e.Entries | Export-Csv -Encoding default application.csv
文字コードを変えてあげないと、開いた時に文字化けする・・・
PowerShellでExcel操作した時に残るプロセスについて
PowerShellでExcelを操作するとプロセスが残ってしまっていました。
ComObjectなので最後までちゃんと面倒見てあげてなかったのが原因です。
Excel Cook Book in Windows PowerShellにちゃんと廃棄してあげるようにRelease-Refが紹介されていました。
$excel.Quit() した後に、この関数に今まで参照していた$excel、$workBooks、$workSheet、$rengeなどを渡してあげると、無事逝ってくれます。
これを知るまで、Stop-Prosess -Name "EXCEL"で皆殺しにしていたので・・・
これで、すっきりしました。
PowerShellでExcelの値を取得してXMLにしてみる
foo.xlsが右の見たいなのとして
foo.ps1 > foo.xml
で
<?xml version="1.0" encoding="utf-8"?>
<excel>
<data>
<date>2008/1/1</date>
<foo>1</foo>
<bar>12</bar>
<baz>100</baz>
</data>
・
・
・
</excel>
見たいにしてみる。
--- foo.ps1 ---
- $filePath = Get-ChildItem foo.xls*
- $excel = New-Object -comobject Excel.Application
- $workBooks = $excel.Workbooks.Open($filePath)
- #Sheet1を取得する
- $workbooks.Worksheets | % { if ($_.Index -eq 1) { $sheet = $_; }}
- @"
- <?xml version="1.0" encoding="utf-8"?>
- <excel>
- "@
- foreach($i in 2..13) {
- $d = $sheet.Cells.Item($i,1).Text;
- $foo = $sheet.Cells.Item($i,2).Text;
- $bar = $sheet.Cells.Item($i,3).Text;
- $baz = $sheet.Cells.Item($i,4).Text;
- @"
- <data>
- <date>$d</date>
- <foo>$foo</foo>
- <bar>$bar</bar>
- <baz>$baz</baz>
- </data>
- "@
- }
- @"
- </excel>
- "@
- $workBooks.Close()
- $excel.Quit()
PowerShellでExcel操作
投稿者
D.yamahata
時刻:
21:52
|
foo.xlsがスプリクトと同じフォルダにあるとして・・・
--- foo.ps1 ---
- $filePath = Get-ChildItem foo.xls*
- $excel = New-Object -comobject Excel.Application
- $excel.Visible = $True
- $workBooks = $excel.Workbooks.Open($filePath)
- #Sheet1を取得する
- $workbooks.Worksheets | % { if ($_.Index -eq 1) { $sheet = $_; }}
- #A1の値が表示される
- $sheet.Cells.Item(1,1).Text
- #文字のColorIndexが表示される
- $sheet.Cells.Item(1,1).Font.ColorIndex
- #セルのColorIndexが表示される
- $sheet.Cells.Item(1,1).Interior.ColorIndex
- $workBooks.Close()
- $excel.Quit()
Microsoft.VisualBasic.FileIOでCSVの読み込み
使ったCSVファイル
--- foo.csv ---
"aaa,aaa","aaa","aaa"
"bbb","bbb,bbb","bbb"
"ccc","ccccccc","c,c"
--- ---
Booで読んでみた
--- foo.boo ---
- import System
- import Microsoft.VisualBasic.FileIO
- p = TextFieldParser("foo.csv")
- p.TextFieldType = FieldType.Delimited
- p.SetDelimiters(",")
- while (not p.EndOfData):
- r = p.ReadFields()
- for i in r:
- print i
--- 結果 ---
aaa,aaa
aaa
aaa
bbb
bbb,bbb
bbb
ccc
ccccccc
c,c
--- ---
楽チン過ぎてちょっとカルチャーショック!!
VBA 2次元配列
VBAで2次元配列の作り方
Dim values As Variant
values = Range("A1:B10")
アクセス方法(A4の値)
values(1, 4)
行の長さを求めるには
Ubound(values)
列の長さは、(ここでは2列目)
Ubound(values, 2)
2.セルを使わずに初期化して作る。
Dim values As Variant
values = Array(Array(11, 12, 13) , Array(21, 22, 23))
アクセス方法(2行目の1列目の値 21)
values(1)(0)
行の長さ
Ubound(values)
列の長さ(2列目)
Ubound(values(1))
登録:
投稿 (Atom)