perl:使用Win32 :: OLE保存工作簿是不可能的

时间:2014-03-26 10:27:18

标签: excel perl

我遵循简化的脚本(我无法更改Win32:OLE)

use warnings;
use strict;
use Cwd;
use Win32::OLE;   
use Win32::OLE::Const 'Microsoft Excel';

my $excel = Win32::OLE->new('Excel.Application');
my $workbook = $excel->Workbooks->Add;
my $worksheet   = $workbook->Worksheets(1);
$worksheet->Range("B1")->{Value} ="Hello";
$worksheet->Range("C2")->{Value} ="World";
# Get current directory using Cwd.pm

my $saveTo = cwd();
$saveTo = $saveTo . '/HelloWorld.xls';
print "$saveTo\n";
$workbook->SaveAs($saveTo);
undef $workbook;

它将产生以下输出:

D:/workspace/perl/HW_XLS/HelloWorld.xls

所以我假设保存路径是正确的。但它不会创建一个文件。如果我添加$workbook->Close();,至少要求关闭工作簿。但这就是全部。

$workbook->SaveAs("HelloWorld.xls");将我的工作簿保存到" MyDocuments \ HelloWorld.xls"正确的内容。

如何将这个xls写入我的cwd()目录,就像写入我的文档一样?

(环境:Windows 7 64位,Perl:(v5.16.1)为MSWin32-x64多线程构建)

1 个答案:

答案 0 :(得分:3)

由于这是在Windows上运行,因此您需要在$saveTo中用反斜杠替换斜杠。添加像

这样的行
$saveTo =~ s/\//\\/g;
在致电$workbook->SaveAs()之前