質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

758閲覧

PowerShell:「ファイルを開く⇒Excel内の1列を配列にコピー⇒ファイルを閉じる」を指定ファイルの数だけループさせたい。次にグラフ化させたい。

ponpon10

総合スコア1

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2022/12/11 06:03

前提

(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • PowerShellでエクセルファイルを開きExcel内の特定の1列を範囲指定して配列にコピーしてファイルを閉じる。また新しいファイルを開き、同じ特定の1列を範囲指定して同じ配列に続けてコピーしてファイルを閉じる。ということを指定したファイルの数だけ行いたい。
  • [ ]PowerShellで新しくエクセルファイルを開き、上記の配列で格納されたデータ値を基に折れ線グラフを作成できるようにしたい。

発生している問題・エラーメッセージ

  • 定義した配列にAのファイルの4列1~5行目、Bのファイルの4列目の1~5行目、といったように順番に配列に格納したいが、上書き更新されてしまう。

理想
A  B
A1 B1
A2 B2
A3 B3
A4 B4
A5 B5

実際

B1
B2
B3
B4
B5

エラーメッセージ

該当のソースコード

#ファイル指定(開く順) cd C:\Users\User\Documents\PowerShell_Study\エクセルフォルダ開く # 対象の Excel ファイル名 $openfile = @("aaa.xlsx","bbb.xlsx") #エクセルファイルを開く $excel = New-Object -ComObject Excel.Application $excel.Visible = $false # 画面上に表示させない $excel.DisplayAlerts = $true # 警告メッセージは表示する # 現在のディレクトリの絶対パスを取得 $currentPath = (Convert-Path .) $readData=@() foreach($file in $openfile) { #Excelファイルを開く $book = $excel.Workbooks.Open($currentPath + "/" + $file) #処理対象のシートを取得 $sheet = $book.Sheets(1) #ファイルのセルを指定コピー $readData += $sheet.Range("A1:A10") # ブックを閉じる $excel.Workbooks.Close() } $readData.text $excel.Quit()

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/12/11 10:32

閉じてるからじゃないんですか?
guest

回答1

0

ベストアンサー

■ブックを閉じる場合は、以下をお試しください。

PowerShell

1#ファイル指定(開く順) 2cd C:\Users\User\Documents\PowerShell_Study\エクセルフォルダ開く 3 4# 対象の Excel ファイル名 5$openfile = @("aaa.xlsx","bbb.xlsx") 6 7#エクセルファイルを開く 8$excel = New-Object -ComObject Excel.Application 9$excel.Visible = $false # 画面上に表示させない 10$excel.DisplayAlerts = $true # 警告メッセージは表示する 11# 現在のディレクトリの絶対パスを取得 12$currentPath = (Convert-Path .) 13 14$readData=@() 15 16foreach($file in $openfile) 17{ 18#Excelファイルを開く 19$book = $excel.Workbooks.Open($currentPath + "/" + $file) 20#処理対象のシートを取得 21$sheet = $excel.Worksheets.Item(1) # 修正 $sheet = $book.Sheets(1) → $sheet = $excel.Worksheets.Item(1) 22 23#ファイルのセルを指定コピー 24$readData += @($sheet.Range("D1:D5")).Text # 修正 $readData += $sheet.Range("A1:A10") → $readData += @($sheet.Range("D1:D5")).Text 25 26# ブックを閉じる 27$book.Close() # 修正 $excel.Workbooks.Close() → $book.Close() 28} 29 30$readData # 修正 $readData.text → $readData 31$excel.Quit() 32

投稿2022/12/12 03:47

ccc-

総合スコア342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponpon10

2022/12/12 12:57

ありがとうございます。 うまく動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問