実現したい事
powershellでexcelを操作し、セルに値を入力します。その際、既に値が入力されているセルに対して、入力されている値を上書きせずに、追記するようなセルへの入力方法を知りたいです。
バージョンと扱えるツール
具体的な挙動の検証ではなく、ソースコードの記述をするにあたっての方向性(考え方?)が分かれば問題ないのでバージョンは問いません。
また、仕事上の制限がある為、利用出来るのはpowershellとexcelであり、他のソフトウェアや開発言語は利用出来ません。
具体例
説明が長くなってしまうので恐縮ですが、スクリプトを書く事自体初心者ですので、どなたか詳しい方がいらっしゃれば是非アドバイス頂きたいです。
実現したい事の詳細としては下記のように
1、「管理台帳.xlsx」のA列からユーザ名を取得し、
2、「実機のID.txt」から「抜き出したユーザが所属しているグループ」を抜き出し
3、「管理台帳.xlsx」のB列に「ユーザが所属しているグループ」を入力したいと考えています。
「実機のID.txt」の見方ですが「<」で始まる「fruit」と「OS」がグループ名で
それ以外はユーザ名とします。つまり、
orange,plum,strawberry,appleはfruitグループに属しているユーザで
apple,linux,andoroidはOSグループに属しているユーザとします。
尚、処理の概要としては3つ目の画像のように、例えば「linux」の属しているグループを
探す場合は、「実機のID.txt」をGet-Contentで取得し一行ずつ上の行から見ていき、
「linux」ユーザが見つかったら今度はそこから上方向に「<」を探していき
該当すれば「ユーザが所属しているグループ」として取得する、ような感じです。
詳細はスクリプトをご覧ください。
一応、これでほぼ上手くいったのですが問題が発生しました。
ユーザ名「apple」のように「fruit」グループにも「OS」グループにも属しているユーザの場合、
「管理台帳.xlsx」のように一つのセルに「fruit OS」と入力出来ず、「fruit」のみに
なってしまいます。(恐らく最初に合致した「OS」グループを「fruit」で上書いている為)
そこで、「管理台帳.xlsx」のappleユーザのように、複数のグループに属しているユーザに対しては、
一つのセルに二つのグループ名を記入する方法を教えて欲しいです。
長くなり恐縮ですが、宜しくお願い致します。
$EXCELPATH = "C:\work\ユーザ別グループ管理台帳.xlsx" $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Open("$EXCELPATH") $sheet = $excel.Worksheets.Item(1) $TEXT = "C:\work\実機のID.txt" $DATA = Get-Content $TEXT for($col = 2; $col -le 9; $col++){ #2行目~9行目まで繰り返す $ID = $sheet.Cells.Item($col,1).Text #A列のセルに記載されているユーザ名の取得 for($i = 0; $i -lt 9; $i++){ #1行目から9行目まで繰り返す if($ID -eq $DATA[$i]){ #「$ID」と「$i」行目が等しいかチェック for($j = $i; $j -gt 0; $j--){ #「$j」に「$i」を入れて、「0」まで遡る if($DATA[$j] -match "< "){ #「$i」行目に「<」が含まれているかチェック $GROUP1 = $DATA[$j] -replace '< ','' $GROUP2 = $GROUP1 -replace ' >','' echo "$ID が所属しているグループは $GROUP2 です。" $sheet.Cells.Item($col,10) = $GROUP2 #特定のセルに、取得したセルの値を入力 break }else{ ; } } }else{ ; } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/20 07:32