perl - 如何使用 Perl 和 Excel OLE 将工作表复制到新的或现有的工作簿?

标签 perl excel

我尝试使用以下 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/

相关文章:

vba - 等待大文件在 Excel 中打开

c# - 如何通过对话框选择文件夹并处理其中包含的所有文件

c# - 为什么在 Excel 中比较 1<' 或将任何数字与带有 < 的任何文本进行比较结果为真?

python - ### 在使用 Python 创建的 Excel 中打开 CSV 文件时的字符

excel - 使用 VBA 检查日期是否在两个日期之间

linux - 检查程序是否存在

perl - 使用 Perl 访问 50 万页

perl - 在 perl 程序中从谷歌获取结果数量

mysql - mysql是按需返回数据,还是全部返回?为什么遍历数据比访问数据慢?

perl - 使用 perl 在多个文件中进行搜索和替换时保留时间戳