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

我正试图parsing一个Excel文件在Perl中。 在我从中提取所需信息后,closuresExcel文件。 最后,我试图用不同的名字保存一个新的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 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;