Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 |

2017-01-08(Sun)

PowerShell - Excelの操作

EXCEL用のCOMオブジェクト作成して、あとはVBAと同じ感覚操作できるっぽいです。

一点、配列コレクションの括弧の形状がVBAだと( )ですが、[ ]にしないとメソッドと間違えられてエラーになるので注意。


$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true

$book = $excel.Workbooks.Add()
$sht = $excel.Worksheets[1] # 括弧の形状に注意
$sht.Name = "PowerShell"

$sht.Cells(1,1).Value = "Hello World"
$sht.Range("A2").Value = "PowerShell"

プロセスの解放

$excel = $null
[GC]::Collect()

または

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sht)

2017-01-07(Sat)

PowerShell - GUIプログラム

ボタンクリックすると文字を表示するプログラム

デフォルト使用できないクラスは、Add-Typeで読み込む。Formに設定したフォントはForm上の部品にも適用される。イベント登録はAdd_イベント名(処理)と記述する。




Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Font
#$font = New-Object Drawing.Font("MS Pゴシック",12)
#$font = New-Object Drawing.Font("MS P明朝",12)
#$font = New-Object Drawing.Font("MS 明朝",12)
$font = New-Object Drawing.Font("MS ゴシック",12)

# Form
$form = New-Object Windows.Forms.Form 
$form.Text = "Hello"
$form.Size = "400,500" 
$form.Font = $font

# Text
$txt = New-Object Windows.Forms.TextBox
$txt.Location = "10,10"
$txt.Size = "360,380" 
$txt.Multiline = $true
$txt.ScrollBars = [Windows.Forms.ScrollBars]::Vertical
$txt.Focus()

# イベント動作
$proc1 = { $txt.AppendText("Hello Powershell World!!`r`n") }
$proc2 = { $txt.AppendText("Focus In`r`n") }

# Button
$btn = New-Object Windows.Forms.Button
$btn.Location = "40,400"
$btn.Size = "300,30"
$btn.Text = "Hello"
$btn.Add_Click($proc1)
$btn.Add_GotFocus($proc2)


# Formに部品を追加
$form.Controls.Add($txt)
$form.Controls.Add($btn)

# 表示
$form.ShowDialog()

2017-01-04(Wed)

PowerShell - クロージャ

戻り値となるブロック内の変数$cntをscriptスコープ宣言することでfunction内の変数$cntへアクセスできるようになる?

function generator($step = 1){
    $cnt = 0
    return { $script:cnt += $step
            return $cnt
            }.GetNewClosure()
}

$a = generator
&($a)     # 1
&($a)     # 2
&($a)     # 3

$b = generator(2)
&($b)     # 2
&($b)     # 4
&($b)     # 6

&($a)     # 4
&($b)     # 8

PowerShell - クラス

バージョン5からクラス使用可能になったようです。

class Person {
    [string] $name
    [int] $age

    # コンストラクタ
    Person() {
        $this.name = "No Name"
        $this.age = 0
    }

    Person([string]$name, [int]$age) {
        $this.name = $name
        $this.age = $age
    }

    # メソッド
    [string]getName(){
        return $this.name
    }

    [int]getAge(){
        return $this.age
    }

    [void]talk([string]$str){
        Write-Host "${str}, I'm $($this.name), $($this.age) years old."
    }
}

$someone = New-Object Person
Write-Host $someone.getName()        # No Name
Write-Host $someone.getAge()         # 0

$taro = New-Object Person("Taro",20) 
$taro.talk("Hello")                  # Hello, I'm Taro, 20 years old.


継承

続きを読む