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

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

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

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

Q&A

解決済

1回答

4875閲覧

PowerShell から Excelファイルのリンクの更新をしたい

ssmxgo

総合スコア178

PowerShell

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

0グッド

0クリップ

投稿2020/01/22 08:59

編集2020/01/22 09:02

PowerShell のスクリプトから、EXCELの外部参照リンクの更新をかけたいと思っていますが基礎知識が不足しているかやり方がわかりません

サンプルになるようなものが見つけられず、

UpdateLink メソッド (Excel)
ここらへんを参考にして書きましたがどの様に記述するべきでしょうか?

環境 Windows10 PowerShell5

powershell

1 2$excel = New-Object -ComObject Excel.Application 3$excel.Visible = $false # 画面上に表示させない 4$excel.DisplayAlerts = $true # 警告メッセージは表示する 5 6# 現在のディレクトリの絶対パスを取得 7$currentPath = (Convert-Path .) 8 9# 対象の Excel ファイル名 10$filename = "sample.xlsx" 11$book = $excel.Workbooks.Open($currentPath +"/"+ $filename) 12 13# リンク更新(★ここがわかりません) 14$book.UpdateLink Name:=$book.LinkSources 15 16# 上書き保存 17$book.Save() 18# ブックを閉じる 19$excel.Workbooks.Close() 20$excel.Quit() 21

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

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

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

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

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

Zuishin

2020/01/22 13:08

> 引数を指定せずに UpdateLink メソッドを実行すると、ワークシートのすべてのリンクが更新されます。
ssmxgo

2020/01/23 05:15

ありがとうございます
guest

回答1

0

ベストアンサー

とりあえず作ってみました。エラーで止まることはないんですがリンクがちゃんと更新できてるかが確認できていません。

powershell

1$excel = New-Object -ComObject Excel.Application 2$excel.Visible = $false # 画面上に表示させない 3$excel.DisplayAlerts = $true # 警告メッセージは表示する 4 5# 現在のディレクトリの絶対パスを取得 6$currentPath = (Convert-Path .) 7 8# 対象の Excel ファイル名 9$filename = "sample.xlsx" 10$book = $excel.Workbooks.Open($currentPath +"/"+ $filename) 11 12# リンク更新 13$book.UpdateLink($book.LinkSources('1-d'), 1) 14 15# 上書き保存 16$book.Save() 17# ブックを閉じる 18$excel.Workbooks.Close() 19$excel.Quit()

投稿2020/01/22 13:12

yureighost

総合スコア2183

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

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

ssmxgo

2020/01/22 15:19

ありがとうございました! ちなみに個人的に探してもこれにまつわるソースを見つけられませんでした。何を参照してこのような記述になったのか、後学のためにも教えて抱けましたら幸いです
Zuishin

2020/01/22 15:22

ほぼ質問のソースと同じですが、この程度の応用に「何を参照したのか」は結構失礼な物言いです。
ssmxgo

2020/01/22 15:29 編集

大変申し訳ありません、全く知見が無い物でしたのと、お聞き仕し方に問題がございました 多分、コードが難しいわけではないのでしょうが、私のようなものがこの書き方?を理解するためには何を参照すればよいか?ということをお聞きしたかったことにつきます せっかく快くお答えいただけたのに申し訳ございませんでした
yureighost

2020/01/22 23:12

平たく言うと、本来UpdateLinkメソッドは引数を2つ取る、LinkSourcesメソッドは引数を1つ取るので省略せずに埋めて実装しただけです。 ちなみに質問欄のZuishinさんのコメントであるようにVBAで使用する場合でしたらUpdateLinkメソッドは引数が省略できるんですが、Powershellで使う場合ダメなようです。 もう少し調べてみたところ、UpdateLinkメソッドの2つ目の引数は省略できますが1つ目と、LinkSourcesメソッドの引数は省略できないようです。 このように公式でもVBAのリファレンスと微妙に仕様が違ったりするのである程度自分で試行錯誤は必要ですね。 ちなみに質問欄の(★ここがわかりません)の「Name:=」の部分は メソッドに引数名を指定して引数を渡すというVBAの記法です。 「VBA メソッド 引数 名称指定」とかで検索すると解説してるサイトが出ます。 これを理解できているとpowershellでのVBA操作の読み替えがより楽になると思いますので、是非調べてみてください。
ssmxgo

2020/01/23 05:14

Yureighostさま ありがとうございます!VBAの記法を理解していなかった、というところに集約されます。ただそれがわかったとしても前者の問題にぶつかったという結果になりましたので、大変助かりました。 貴重なお時間、感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問