Excel スプレッドシートで多数のハイパーリンクのパスを変更したいと考えています。Google で検索したところ、スプレッドシートにハイパーリンクを追加しても変更しないという問題の解決策を見つけました。Microsoft は、VBA に近いものを作成する方法を示しました。
ドキュメント内のすべてのハイパーリンクを編集したいので、解決方法がわからない主な手順は次のとおりです。
Perl でハイパーリンク オブジェクトのリストを取得する
アドレスを 1 つずつ抽出し、
正規表現を実行してパスを変更します
更新されたパスを Hyperlink->object に保存して繰り返します
私はOLEを使用するのが初めてで、(1)でつまずいています。これが私がこれまでに試したことです:
#!perl
use strict;
use warnings;
use 5.014;
use OLE;
use Win32::OLE::Const "Microsoft Excel";
my $file_name = 'C:\path\to\spreadsheet.xlsx';
my $excel = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;});
$excel->{Visible} = 1;
my $workbook = $excel->Workbooks->Open($file_name);
my $sheet = $workbook->Worksheets('Sheet 1');
foreach my $link (in $sheet->Hyperlinks ) {
say $link->Address;
}
しかし、これはコードにエラーを与えます:
Win32::OLE(0.1709): GetOleEnumObject() C:/Dwimperl/perl/vendor/lib/Win32/OLE/Lite.pm 167 行目の Win32::OLE::Enum オブジェクトではありません。メソッド "Hyperlinks" を呼び出せません" script.pl の 14 行目にパッケージまたはオブジェクトの参照がありません。
正しいワークシートを選択しているので、オブジェクト参照について不平を言う理由がわかりません。いくつかのバリエーションを試しました(ハイパーリンクの周りに{}を追加し、「in」を削除し、リスト、ハッシュ、およびハッシュへの参照として保存しようとしました)誰かが私にいくつかのポインタを与えることができますか? ありがとう!