使用Perl重写现有的xls文件

时间:2013-08-20 08:17:11

标签: perl excel file-handling xlsx

我正在尝试在已经存在的excel文件中写入数据,但我尝试的代码是创建一个新工作表并用数据擦除旧工作表。这是我使用的代码

#!/usr/bin/perl –w
use strict;
use Spreadsheet::WriteExcel;

# Create a new Excel file
my $FileName = 'Report.xls';
my $workbook = Spreadsheet::WriteExcel->new($FileName);

# Add a worksheet
my $worksheet1 = $workbook->add_worksheet();  #<- My Doubt



# Change width for only first column

$worksheet1->set_column(0,0,20);

# Write a formatted and unformatted string, row and column
# notation.
$worksheet1->write(0,0, "Hello");
$worksheet1->write(1,0,"HI");
$worksheet1->write(2,0,"1");
$worksheet1->write(3,0,"2");    `   

如何将当前工作表分配给$worksheet1。还有一件事是我需要阅读已经存在的特定细胞。 请给我一些指导。谢谢你

1 个答案:

答案 0 :(得分:4)

您无法使用Spreadsheet::WriteExcel打开现有的电子表格并进行更新。您首先要使用Spreadsheet::ReadExcel以及使用WriteExcel打开的输出表打开它。然后,您阅读输入文件,写出现有单元格,工作表等,并进行您要进行的任何编辑/更新/插入。然后,您可以关闭这两个文件,删除以前的文件,然后重命名新文件(可选择备份以前的版本)。

你只能通过使用Win32::OLE打开它来真正编辑/更改给定的Excel文件而不通过这个过程,但为此你肯定需要在Windows系统上(我不确定)关于Wine的状态),这不是你想在服务器上做的事情。

您可以考虑使用Spreadsheet::WriteExcel创建一个与使用open my $fh, '>', 'output.file'打开文件类似的文件... output.file 将被破坏。

注意这一行:

my $fh = FileHandle->new('>'. $self->{_filename});
Spreadsheet::WriteExcel::Workbook->new中的