簡體   English   中英

如何將Excel文件保存在Win32 :: OLE的工作目錄中

[英]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 strictuse 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM