乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 用<em>perl操作excel</em>表格

用<em>perl操作excel</em>表格

作者:乔山办公网日期:

返回目录:excel表格制作


hell是无法对EXCEl文件进行处理的,PERL和JAVA则可以利用对应的对象或函数对EXCEL文件进行各类操作,当然了,期待SHeLL能发展这项功能。 用 perl 的 module 才可读写 MS excel 的 xls 格式, Spreadsheet::WriteExcel Spreadsheet::ParseExcel Wi...

# 创建一个新的EXCEL文件
my $workbook = Spreadsheet::WriteExcel->new('test.xls');
# 添加一个工作表
$worksheet = $workbook->add_worksheet();
# 新建一个样式
$format = $workbook->add_format(); # Add a format
$format->set_bold();#设置字体为粗体
$format->set_color('red');#设置单元格前景色为红色
$format->set_align('center');#设置单元格居中
#使用行号及列号,向单元格写入一个格式化和末格式化的字符串
$col = 1;
$row = 2;
$worksheet->write($row, $col, 'Hi Excel!', $format);
$worksheet->write( $col-1, $row-1 , 'Hi Excel!');
$worksheet->write(1, $col, 'Hi Excel!');
#使用单元格名称(例:A1),向单元格中写一个数字。
$worksheet->write('A3', 1.2345);
$worksheet->write('A4', '=SIN(PI()/4)');
exit;
在网上找到了demo代码,需要安装相关的包,在winddows下,
cmd模式,ppm,安装Spreadsheet-WriteExcel包。
PS:如果碰到中文写入时乱码问题,要e799bee5baa6e997aee7ad94e78988e69d83339ppm 安装Unicode_Map包,按照如下方法使用
use Unicode::Map();
my $Map = new Unicode::Map("GB2312");
my $abc='你好!';
$worksheet->write_unicode($LineCount, 1, $Map->to_unicode( $abc));
这样就可以了。
一.关于 Spreadsheet::Read 模块的用法 ,可以读取xls,csv和sxc等格式的文件,方法如下
#!/usr/bin/perl
use Spreadsheet::Read;
my $file = 'd:/Book1.xls'; #需要处理的文件
my $spreadsheet = ReadData ($file) or die "$!";
my $sheet_count = $spreadsheet->[0]{sheets} or die "No sheets in $file\n"; #记录有几个sheet

for my $sheet_index (1 .. $sheet_count)
{
$sheet = $spreadsheet->[$sheet_index] or next;
printf("%s - %2d: [%-s] %3d Cols, %5d Rows\n",
$file,$sheet_index,$sheet->{label},$sheet->{maxcol},$sheet->{maxrow});
for my $row (1 .. $sheet->{maxrow}) {
print join "\t" => map {$sheet->{cell}[$_][$row] // "-" } 1 .. $sheet->{maxcol};
print "\n"
};
}

1.这个程序是将数据以行的形式进行的读取,这样也使得文件可以轻松转换成txt文件
2.其中 有行的程序为:
print join "\t" => map {$sheet->{cell}[$_][$row] // "-" } 1 .. $sheet->{maxcol};
// 表示为 defined-or,是使用了perl 6的方法,即如果在取值的e79fa5e98193e78988e69d83366地方取到空值,几没有取到值,则用 - 标识这个地方.
这个代码块也能换成
print join "\t" => map {
my $data = $sheet->{cell}[$_][$row] defined $data ? $data : "-";
}1 .. $sheet->{maxcol};

二.关于 Spreadsheet::ParseExcel的用法

#!/usr/bin/perl
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::Workbook;

my $excel = Spreadsheet::ParseExcel::Workbook->Parse("d:/Book1.xls" );
foreach my $sheet (@{$excel->{Worksheet}}) {
printf ("Sheet: %s\n", $sheet->{Name});
$sheet->{MaxRow} ||= $sheet->{MinRow};
foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) {
$sheet->{MaxCol} ||= $sheet->{MinCol};
foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) {
my $cell = $sheet->{Cells}[$row][$col];
if ($cell) {
printf("( %s , %s ) => %s\n", $row, $col, $cell->{Val});

}
}
}
}
1.以hash结构的方式读出数据

use strict;
use Spreadsheet::Read;
use Spreadsheet::Write; # 这两个 module 你可能要自己用 ppm / cpan 下载

my $data = {};
my @files = ( "1.xls" , "2.xls" ) ;

# 读取
my $index = 1;
foreach my $f ( @files ) {

my $xls = ReadData ( $f ) ;
my $sheet = $xls -> [1]; # 第一张e69da5e887aae799bee5baa6e79fa5e98193361工张表
$data->{$index} = [];
push @{$data->{$index}}, $sheet->{"A$_"} foreach ( 1.. $sheet->{maxrow} ) ;
$index++;
}

#写入
my $xls = Spreadsheet::WriteExcel->new( "3.xls" );
my $sheet = $xls -> add_worksheet ( 'HelloWorld!' ) ;

foreach my $row ( 0.. $#{$data->{1}} ) {
my $sum = $data->{1}[$row] - $data->{2}[$row] ;
$sheet -> write_row ( 0, $row, [ $sum ] ) ;
}

相关阅读

  • 用<em>perl操作excel</em>表格

  • 乔山办公网excel表格制作
  • hell是无法对EXCEl文件进行处理知的,PERL和JAVA则可以利用对应的对象道或函数对EXCEL文件进行各类内操作,当然了,期待SHeLL能发展这项功能。 用 perl 的容 module 才可读写 MS excel 的 xls 格
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网