我尝试使用以下 Perl 代码,但工作表不复制(也不移动)并且不返回错误消息。提前感谢您的想法。
#!/usr/bin/perl -w
use strict;
use warnings;
use OLE;
use Win32::OLE::Const 'Microsoft Excel';
my $Excel = CreateObject OLE "Excel.Application";
my $Book2 = $Excel->Workbooks->Add();
my $Book3 = $Excel->Workbooks->Open("C:\\temp\\test.xlsm");
my $Sheet3 = $Book3->Worksheets(1);
$Sheet3->Select;
$Sheet3->Move("Before" => $Book2->Worksheets(1));
$Book3->Close(0);
$Book2->SaveAs({Filename =>"C:\\temp\\new.xlsm",FileFormat => xlOpenXMLWorkbookMacroEnabled});
$Book2->Close();
$Excel -> Quit();
最佳答案
如果您需要死于 Excel 中的错误,则需要将相关标志设置为 3(适用于 Office 2000):
$Win32::OLE::Warn = 3; # Die on errors in Excel
不过,更根本的问题可能与您的 Office 版本有关。自(我相信)Office 2007 以来,底层的 OLE 体系结构已经过大修。不久前,当我与 Office 2007 一起开发的脚本拒绝与 Office 2000 一起运行时,我遇到了这个问题。
我可以建议的最佳操作方式是在 VBA 模式下按 F2 键来使用 Excel 的(相当困惑的)OLE 浏览器。
Perl + OLE + Excel 的“Hello, World”(适用于 Excel 2000):
use strict;
use warnings;
use Win32::OLE qw/in with/;
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3; # Die on errors in Excel
my $excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application', 'Quit');
my $workbook = $excel->Workbooks->Add || warn "Couldn't add a workbook";
my $sheet = $excel->Worksheets->Add || warn "Couldn't add a worksheet";
$sheet->{Name} = "Hello World";
关于perl - 如何使用 Perl 和 Excel OLE 将工作表复制到新的或现有的工作簿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629796/