一日一膳(当社比)

RとJavaと時々数学

Windows PowerShell(とExcel操作)のテンプレ

目次


本記事の概要

PowerShellのコードのテンプレをまとめました.ExcelのマクロをPowerShellで作りたい人用...

実行環境

・Windows10

・PowerShell5.1


2.PowerShellを動かす

標準入出力

PowerShellの標準入(出)力を利用するには,Read-Host(Write-Output)キーワードを用いる.以下は,コマンドライン上から誕生年,月,日を受け取り出力するプログラムである.

helloPS.ps1

#実行コマンド
#powershell -ExecutionPolicy RemoteSigned -File .\section1\helloPS.ps1
$birthyear = Read-Host "あなたは何年生まれですか \('o')"

#型を指定する(文字を入力するとエラーになる)
[int] $birthMonth = Read-Host "ちなみに誕生月は(1~12)?"
[int] $birthDay = Read-Host "ちなみに,誕生日は?(1~31)"

Write-Output $birthyear"年生まれ"$birthMonth"月"$birthDay"生まれってことですかね..."

データ型

typesPS.ps1

#データ型
#文字列
Write-Host "String----------------------------------------------"
[string]$str1 = "I am"
[string]$str2 = " a boy!"

Write-Host $str1$str2

#boolean
Write-Host "Boolean----------------------------------------------"
[bool]$flg1 = $true
[bool]$flg2 = $false

$and = $flg1 -and $flg2
$or = $flg1 -or $flg2
Write-Host "The answe of flg1 AND flg2:"$and " The answer of flg1 OR flg2:"$or

Write-Host "Array----------------------------------------------"
$array = @(1,2,4,8)

Write-Host "The first element of array:"$array[0]
Write-Host "The length of array:"$array.Length

#add element
$array += 16
Write-Host "array :"$array

$array2 = @{key1 = "first";key2 = "second";key3 = "last"}
$array2["key3"]

3.PowerShellの基本文法

PowerShellの基本文法のうち,条件分岐,繰り返し,関数を利用したプログラム.

条件分岐

branchLogicPS.ps1

#条件分岐
$input = Read-Host "Please ,enter some integer"
if ($input -eq 7){
"Lucky seven"
} elseif ($input -eq 2) {
#else if(else) は省略可
"The smallest prime number"
} else {
"Bye!"
}

繰り返し

loopPS.ps1

#loop文
#1~100までの連続した整数の和
#while文
$var = 1
$ans = 0

while ($var -lt 100) {
$ans += $var
$var += 1
}
Write-Host "The sum of integers from 1 to 99:"$ans

#for文
$var = 0
$ans = 0
for ($i = 0; $i -lt 100; $i++) {
$ans += $i
}
Write-Host "The sum of integers from 1 to 99:"$ans

#foreach文
$message = ""
$array = @("Hop", "Step", "Jump")
foreach($element in $array){
$message += $element+"!"
}

Write-Host $message

関数

関数を利用したプログラム.関数の内容を定義するときに,引数の組が配列$argsに格納される.

myFuncPS.ps1

#関数

#消費税率を判定
function getSalesTax {
$selesTax = 0
#引数は,配列$argsに格納される
if ($args[0] -lt 1989) {
} elseif ($args[0] -lt 1997) {
$selesTax = 0.03
} elseif ($args[0] -lt 2014) {
$selesTax = 0.05
} else {
$selesTax = 0.08
}
return $selesTax
}

$year = Read-Host "Enter year (1900~2018)"
$salesTax = getSalesTax $year
Write-Host $year" Sales tax:"$salesTax

4.Excelワークブックを編集する

PowerShellExcelワークブックを編集するプログラム.試しに,A列に日付を連続で入力してみた.

$excel = New-Object -ComObject Excel.Application
#実行時にexcelの画面が現れる
$excel.Visible = $true

#新規シート
#$book = $excel.Workbooks.Add()

#既存シート
$book = $excel.Workbooks.Open("C:\#powerShell\#startPowerShell\section3\test.xlsx")

$book.Sheets(1).Name = "title"

#sheet名
$sheet = $book.Sheets("title")

#(1,1)セルに記入する
$sheet.Cells.Item(1,1) = "DATE"

#2019/1/1~2019/1/31までの日付を記入A列に
$date = Get-Date 2019/1/1
for ($i = 0; $i -lt 31; $i++) {
$sheet.Cells($i+2,1).Value = ($date.AddDays($i)).ToString("yyyyMMdd")
}

#B列に記入する
$sheet.Range("B1").Value = "Temperature"

$sheet.Range("B2").Value =5
$sheet.Range("B3").Value = 7
$sheet.Range("B4").Value = 6

#関数を記入
$sheet.Range("B33").Value="=AVERAGE(B1:B31)"

$book.SaveAs("C:\#powerShell\#startPowerShell\section3\test.xlsx")
$excel.Quit()
$excel = $null