PowerShell

PowerShell

PowerShellによりExcelファイルをシート毎にファイル分割するサンプルコード

PowerShellによりExcelファイルを、シート毎にファイル分割するサンプルコードを紹介します。仕様シートが複数あるExcelファイルを、シートごとにブック分割します。以下のようなサンプルファイルを用意します。実行前PowerShellのScriptファイル(*.ps1)を実行すると各シートがファイルに運活されます。実行完了後に、以下3ファイルができるイメージです。「AAA.xlsx」「BBB.xlsx」「CCC.xlsx」ソースコードソースコードはPowerShellで記載しています。excelファイルはデータとして扱い、マクロ等は一切入れません。$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $false$excel.DisplayAlerts = $false$fileName = "book.xlsx"$filePath = (Convert-Path .) + "\" + $fileName$book = $excel.Workbooks.Open($filePa...
PowerShell

PowerShellによるバブルソートのサンプルコード

PowerShellでバブルソートするサンプルコードを作成してみました。(PowerShellでバブルソートする需要はないと思いますが・・・)仕様PowerShellで配列データをバブルソートして、配列データを表示します。PowerShellは標準でソートの関数が用意されていますが、あえて自力でソート関数を作成します。ソースコードバブルソートする部分をbubbleSort関数として別に切り出しました。テストデータとしてランダムな数字を配列で用意して、ソート前後で表示します。バブルソート.ps1# sort functionfunction bubbleSort($data){ for($i = 0; $i -lt $data.Count - 1; $i++){ # 0 to array.count - 1 for($j = $i + 1; $j -lt $data.Count; $j++){ # $i to array.count if($data -gt $data){ # swap $tmp = $data $data = $data $data = $tmp } } } retu...
PowerShell

PowerShellによりフォルダ内の各ファイルの名前に更新日時を追記するサンプルコード

PowerShellによりフォルダ内の各ファイルの名前に更新日時を追記するサンプルコードを紹介します。仕様以下の通り、フォルダ内にいくつかのファイルがあります。変なファイルネームネーミングルールの単体結果エビデンスや、一定時間間隔でキャプチャした画像というのがよくありそうです。実行前これらのファイルの後ろに更新日時を追記してみます。実行後ファイルソースコード$files = Get-Item *.xlsxforeach($file in $files){ $newfileName = $file.BaseName + "_" + $(Get-ItemProperty $file).LastWriteTime.ToString("yyyyMMdd-hhmmss") + $file.Extension Rename-Item $file $newfileName}PauseGet-Itemで「*.xlsx」を指定することによってExcelのみを取得するようにしていますが、他の拡張子に変更すればテキストやワードファイルも可能です。また、$newFileへの格納内容は下記のとおりです。命令説明...
PowerShell

PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコード

PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコードを紹介します。ファイルを自動生成したときとか更新日時が同じになるのですが、大人の事情で更新日時を変えざるを得ないときがあるのです。。仕様何かの成果物(設計書、仕様書)をプログラムで一括で作ってしまうと、すべての更新日時が同じになってしまうことがあります。これを諸事情により人が作ったように、PowerShellでランダムな日付にしてみます。実行前実行後このように更新日時をめちゃくちゃにしてみます。ファイルソースコードChangeFileUpdatedDateTime.ps1$files = Get-Item *.xlsxforeach($file in $files){ # 現在の日時 $randomDay = (Get-Date) # 減算する日時の値を取得 # 年(0~5年) $minusYear = Get-Random -Maximum 5 -Minimum 0 # 月(0~3か月) $minusMonth = Get-Random -Maximum 3 -Minimum 0 # 日(0~3...
PowerShell

PowerShellによってフォルダ内のExcelファイルの印刷枚数を一括で取得するサンプルコード

PowerShellによってフォルダ内のExcelファイルの印刷枚数を一括で取得するサンプルコードを作成しました。Excelファイルの印刷枚数カウントのよくある悩み納品前になって突然ですね、お客さん作った成果物(Excel)の枚数を一覧化してくださいなんていうことがたまにあります。これが2、3ファイルならたいした作業じゃないからいいんです。が、この作業はふたを開けるとファイル数が多かったり、開いてみてシート数が何十とかあったりします。実際にやると何時間も時間がかかりませんか?私地球環境を大事にする時代にプリンタの印刷枚数なんか数えてもなあが、偉い人が物量を知る指標としてはいいんでしょうね、きっと。ただこの作業、ちょっとスクリプトを組めばすぐ作業が終わるかもしれません。仕様例として下記のようなPowerShellと、印刷枚数をカウントするExcelファイルを用意します。Excelファイルはシートを複数用意して、印刷枚数を分かりやすくするため、改ページプレビューをしています。ファイル数と、シート数はいくらあっても良いものとして考えますが今回は2ファイル、各々数シートで考えます。ソースコード...
PowerShell

PowerShellからのExcel操作時のApplication.Calculationの設定による速度の違いを測定をしてみた

Excelマクロでは、無駄な再計算でマクロの実行速度を落とさないために、実行中はApplication.Calculationの自動計算をOFFにするコードを記述することがあります。PowerShellでこのプロパティを操作したときも、実行速度に影響があるか検証してみました。検証手順PowerShellのScript(*.ps1)でExcelに、数値と計算式を10000行3列、設定します。下記の2パターンをそれぞれ10回テストして、実行時間の平均値を求めます。パターンNo.検証パターンApplication.Calculation補足数値セル計算式セル1自動計算ONの状態(PowerShellのScript内で未設定)Excelファイルの設定の初期値のままとする。10000行(A1~A10000 セル、B1~B10000)10000行(C1~C10000セル)2自動計算OFFの状態xlCalculationManual意図的にPowerShellのScript内で意図的にOFFにする。処理の最後でONにする。10000行(A1~A10000 セル、B1~B10000)10000行(C1...
PowerShell

PowerShellによってExcelのテキストボックスの位置、色、その他書式を変更するサンプルコード

PowerShellによって図形のテキストボックスの位置、色(背景色、文字色)、書式(太字、斜体、下線、取消線)を設定するコードが、あまりWeb上に見つからないのでサンプルコードを作ってみました。仕様下記のようなPowerShellのScript(*.ps1)と、編集先のExcelファイルを用意します。Excelファイルの中にいくつかテキストボックスを配置して、PowerShellからこれらのテキストボックスの位置や色、書式を変更してみたいと思います。ソースコードExcelファイルを1ファイル読み取って、中にある図形については個別に編集します。changeSettingsExcelTextBox.ps1$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $false$excel.DisplayAlerts = $false$fileName = "Book1.xlsx"$filePath = (Convert-Path .) + "/" + $fileName$book = $exc...
PowerShell

PowerShellによってExcelのテキストボックスの値を設定するサンプルコード

PowerShellによって図形のテキストボックスの値を設定するコードを中々見つけられません。自力でサンプルコードを作ってみました。仕様下記のようなPowerShellのScriptファイル(*.ps1)と、編集先のExcelファイルを用意します。Excelファイルの中にいくつかテキストボックスを配置して、初期値として適当な値が記載されている状態にします。PowerShellのScriptによってこれらのテキストボックスのテキスト値を変更してみます。ソースコードExcelファイルを1ファイル読み取って、図形を1つずつループで取得し、テキストを1つ1つ書き換えていきます。ここでは"図形の値"という文字列と、1からの連番をテキストボックスへ格納します。changeExcelTextBox.ps1$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $false$excel.DisplayAlerts = $false$fileName = "Book1.xlsx"$filePath = (...
PowerShell

PowerShellによってExcelのテキストボックスの値を取得するサンプルコード

PowerShellによってExcelの図形のテキストの値を取得するコードが、Web上になかなか見つからなかったので、サンプルコードを作ってみました。仕様下記のようなPowerShellのScriptファイル(*.ps1)と、読み込む先のExcelファイルを用意します。Excelファイルの中には、いくつかテキストボックスを配置して、その中にテキストを記述しています。これらのテキスト値を抽出し、PowerShellのコンソールに出力しようと思います。(ちなみにA1セルの値は意味はないです)ソースコードExcelファイルを1ファイル読み取って、図形を1つずつループで取得し、テキストをコンソール出力します。基本的にはPowerShellで記述する場合もVBAで記述する場合も一緒なのですが、細部がPowerShell仕様なので注意が必要です。readExcelTextBox.ps1$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $false$excel.DisplayAlerts = $...
PowerShell

PowerShellのScriptファイル(*.ps1)をダブルクリックで実行できるようにする*.batの作成手順

PowerShellのスクリプトファイル(*ps1)を実行するには右クリックメニューから「PowerShellで実行」を選択して、クリックすることになります。しかしそれだとPowerShellのScriptファイルに慣れていない人々に配布するときには、実行方法について追加の説明をする必要があり不便です。なので備忘録として、ダブルクリック用のバッチの作り方を残すことにしました。解決したいこと問題点PowerShellのScriptファイル(*.ps1)を実行するには右クリックメニューから「PowerShellで実行」メニューを選択して実行することになります。これだとチームに配布する際に、使い方を説明するのが少々面倒です。(チーム全員スキルが高ければ各々で勝手に調べるんでしょうけど、サラリーマン社会は技術者だけでなく、部課長だったりお客様など技術者層以外も使ったりするので、そうはいかないことが多いです。)変更内容これを「exec.bat」のようなバッチファイルをダブルクリックするだけで、「ScriptFile.ps1」のようなPowerShellのScriptファイルを実行してくれるように...