我想使用 perl 脚本在 excel文件中创建并附加一些数据。正如许多论坛链接所述,我参考了Spreadsheet::WriteExcel模块链接上提供的示例代码。电子表格已成功创建,没有任何问题。
但是,我使用第二个脚本追加一些数据到现有文件。我使用Spreadsheet::ParseExcel::SaveParser模块并使用this link上提供的示例代码。以下是我的代码与网站上提供的代码完全相同:
#!/usr/bin/perl
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::WriteExcel;
# Open an existing file with SaveParser
my $parser = Spreadsheet::ParseExcel::SaveParser->new();
my $template = $parser->Parse('perl.xls');
# Get the first worksheet.
my $worksheet = $template->worksheet(0);
my $row = 0;
my $col = 0;
# Overwrite the string in cell A1
$worksheet->AddCell( $row, $col, 'New string' );
# Add a new string in cell B1
$worksheet->AddCell( $row, $col + 1, 'Newer' );
# Add a new string in cell C1 with the format from cell A3.
my $cell = $worksheet->get_cell( $row + 2, $col );
my $format_number = $cell->{FormatNo};
$worksheet->AddCell( $row, $col + 2, 'Newest', $format_number );
# Write over the existing file or write a new file.
$template->SaveAs('newfile.xls');
但是,我收到以下错误:
Unknown method: Spreadsheet::WriteExcel::Format::set_hidden at <path_to_SaveParser.pm> line 72.
因为它从内置模块中抛出错误,所以我一言不发。找不到某些内置函数。我可能要在我的文件中导入该模块(但不知道哪一个!)。我认为SaveAs
子例程存在问题。以下是该模块的摘要以供参考:
sub SaveAs($$){
my ($oBook, $sName)=@_;
# Create a new Excel workbook
my $oWrEx = Spreadsheet::WriteExcel->new($sName);
my %hFmt;
my $iNo = 0;
my @aAlH = ('left', 'left', 'center', 'right', 'fill', 'justify', 'merge', 'equal_space');
my @aAlV = ('top' , 'vcenter', 'bottom', 'vjustify', 'vequal_space');
foreach my $pFmt (@{$oBook->{Format}}) {
my $oFmt = $oWrEx->addformat(); # Add Formats
unless($pFmt->{Style}) {
$hFmt{$iNo} = $oFmt;
my $rFont = $pFmt->{Font};
$oFmt->set_font($rFont->{Name});
$oFmt->set_size($rFont->{Height});
$oFmt->set_color($rFont->{Color});
$oFmt->set_bold($rFont->{Bold});
$oFmt->set_italic($rFont->{Italic});
$oFmt->set_underline($rFont->{Underline});
$oFmt->set_font_strikeout($rFont->{Strikeout});
$oFmt->set_font_script($rFont->{Super});
$oFmt->set_hidden($rFont->{Hidden}); #LINE 72 !!!
$oFmt->set_align($aAlH[$pFmt->{AlignH}]);
$oFmt->set_align($aAlV[$pFmt->{AlignV}]);
if($pFmt->{Rotate}==0) {
$oFmt->set_rotation(0);
}
#....
Shebang运算符(#!
)路径似乎没有任何问题,因为它与创建excel文件时使用的路径相同。有人可以提供一些关于可能出错的指示吗?