[英]How to save Excel file in working directory in Win32::OLE
我正在嘗試在perl中解析Excel文件。 從中提取所需的信息后,我關閉Excel文件。 最后,我嘗試將一個具有不同名稱的新Excel文件保存在同一目錄中。 但是此Excel已存儲在“我的文檔”文件夾中。
use Storable ;
use Cwd;
use Win32::OLE ;
use Win32::OLE qw(in with) ;
use Win32::OLE in ;
use Win32::OLE::Const 'Microsoft Excel';
use Excel::Writer::XLSX;
my $Excel = Win32::OLE->new("Excel.Application");
my $excel = $Excel->Workbooks->Add();
my $sheet = $excel->Worksheets(1);
$sheet->Activate();
my $new_file = "Temp_file.xlsm";
my $new_excel = cwd.'\\'.$new_file;
$new_excel =~ s/\//\\/g;
$excel->SaveAs($new_excel);
$Excel->{DisplayAlerts} = 0;
$excel->{Saved} = 1;
$excel->Close;
這是根據您的代碼進行的更新。 首先,您要讓Win32::OLE
錯誤被靜默忽略。 而是設置: $Win32::OLE::Warn = 3
以便每當出現問題時它就會嘎吱作響。 其次,您嘗試獲取Excel.Application
實例的方式不正確。 一方面,如果出現問題,您將擁有Excel實例,這些實例將保持浮動。
您還將混淆一個Excel實例,一個工作簿及其包含的圖紙。 如果確實有$Win32::OLE::Warn = 3
,那么您將收到有關發生問題的位置的通知。
您還應該在腳本中始終use strict
並use warnings
。 如果其他人知道您的問題不是由一些瑣碎的錯字引起的,他們將更傾向於嘗試提供幫助。
您也不需要三個單獨的use Win32::OLE
語句。
“作品”下面的代碼。 與您的比較。
最后,如果要通過Win32::OLE
處理工作表,則沒有理由在代碼中包含Excel::Writer::XLSX
。
use feature 'say';
use strict;
use warnings;
use File::Spec::Functions qw( rel2abs );
use Win32::OLE qw(in with) ;
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;
my $excel = eval {
Win32::OLE->GetActiveObject('Excel.Application');
} || Win32::OLE->new('Excel.Application', sub { $_[0]->Quit });
my $wb = $excel->Workbooks->Add;
my $sheet = $wb->Worksheets->Add;
$wb->SaveAs( rel2abs('temp_file.xlsm') );
$excel->{DisplayAlerts} = 0;
$wb->{Saved} = 1;
$wb->Close;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.