PowerShellでExcel操作

| 2008年10月5日日曜日
foo.xlsがスプリクトと同じフォルダにあるとして・・・

--- foo.ps1 ---

  1. $filePath = Get-ChildItem foo.xls*  
  2. $excel = New-Object -comobject Excel.Application  
  3. $excel.Visible = $True  
  4. $workBooks = $excel.Workbooks.Open($filePath)  
  5.   
  6. #Sheet1を取得する  
  7. $workbooks.Worksheets | % { if ($_.Index -eq 1) { $sheet = $_; }}  
  8.   
  9. #A1の値が表示される  
  10. $sheet.Cells.Item(1,1).Text  
  11.   
  12. #文字のColorIndexが表示される  
  13. $sheet.Cells.Item(1,1).Font.ColorIndex  
  14.   
  15. #セルのColorIndexが表示される  
  16. $sheet.Cells.Item(1,1).Interior.ColorIndex  
  17.   
  18. $workBooks.Close()  
  19. $excel.Quit()  

Microsoft.VisualBasic.FileIOでCSVの読み込み

| 2008年9月28日日曜日
使ったCSVファイル
--- foo.csv ---
"aaa,aaa","aaa","aaa"
"bbb","bbb,bbb","bbb"
"ccc","ccccccc","c,c"
--- ---

Booで読んでみた
--- foo.boo ---

  1. import System  
  2. import Microsoft.VisualBasic.FileIO  
  3.   
  4. p = TextFieldParser("foo.csv")  
  5. p.TextFieldType = FieldType.Delimited  
  6. p.SetDelimiters(",")  
  7.   
  8. while (not p.EndOfData):  
  9.   r = p.ReadFields()  
  10.   
  11.   for i in r:  
  12.     print i  

--- 結果 ---
aaa,aaa
aaa
aaa
bbb
bbb,bbb
bbb
ccc
ccccccc
c,c
--- ---

楽チン過ぎてちょっとカルチャーショック!!

VBA 2次元配列

| 2008年9月23日火曜日
VBAで2次元配列の作り方

1.セルの値を丸ごと配列に入れる。

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))

自PCのIPアドレスを取得する

|
複数ある場合は、foreachでまわして探す。

$localHostName = [System.Net.Dns]::GetHostName()
$localIP = [System.Net.Dns]::GetHostByName( $localHostName )
$localIP.AddressList[0].ToString()

ディスクの空き容量

|
PowerShell

空き容量の%
$d = New-Object System.IO.DriveInfo("C")
$d.TotalFreeSpace / ( $d.TotalSize / 100)

ディスクサイズ(GB)
$d.TotalSize / 1GB

リムーバブルディスクの取り出し

|
よく忘れるのでメモ。

PowerShell
$Shell.Application.NameSpace(17).ParseName('D:\').InvokeVerb("取り出し(&J)")

VBScript
CreateObject("Shell.Application").NameSpace("D:\").Items.Item.InvokeVerb "取り出し(&J)"

Excel/VBAでスペース区切り出力する

| 2008年6月16日月曜日
 Excelで固定長でTextファイルで保存する際に、.prn(スペース区切り)で保存すると、Excelの仕様で240文字までしか一行で出力できなかったので、簡単なスペース区切りができるマクロを作成してみました。
 かなり適当に作ってあります。
 範囲指定は「A1:H10」のような感じで入力してください。
 ファイル名は、元ファイルと同じ場所で、シート名.txtで保存されます。

--- 以下 コード ---

Sub SpaseSeparatedValues()
Dim i, j As Integer

Dim fileName As String
fileName = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".txt"

Dim scope As String
scope = InputBox("スペース区切りで出力したい範囲をしていしてください。", "SpaseSeparatedValues")

Dim data As Variant
data = Range(scope)

Dim fileNo As Integer

fileNo = FreeFile()
Open fileName For Output As #fileNo

Dim printLine As String

For i = 1 To UBound(data)
printLine = ""
For j = 1 To UBound(data, 2)
printLine = printLine & data(i, j) & Space(Int(Cells(i, j).ColumnWidth) - Len(data(i, j)))
Next
Print #fileNo, printLine
Next
Close #fileNo
End Sub