如何将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;