关于用perl提取文件导入到excel中
发布网友
发布时间:2022-04-12 20:09
我来回答
共2个回答
热心网友
时间:2022-04-12 21:38
一.关于 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的方法,即如果在取值的地方取到空值,几没有取到值,则用 - 标识这个地方.
这个代码块也能换成
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结构的方式读出数据
热心网友
时间:2022-04-12 22:56
你的signals是一个hash?先把代码给你。
#!/usr/bin/env perl
use strict;
use warnings;
use IO::File;
use Spreadsheet::WriteExcel;
use Data::Dump;
my $fhi = IO::File->new("<in.txt");
# Create a new workbook called simple.xls and add a worksheet
my $workbook = Spreadsheet::WriteExcel->new('simple.xls');
my $worksheet = $workbook->add_worksheet();
# The general syntax is write($row, $column, $token). Note that row and
# column are zero indexed
#
# Write some text
#$worksheet->write(0, 0, "Hi Excel!");
my $i = 0;
while (<$fhi>) {
my @data;
my $j = 0;
if (/^.+;$/) {
@data = split ' ', $_;
#Data::Dump->mp(@data);
$worksheet->write( $i, $j, $data[0] );
$worksheet->write( $i, $j + 1, $data[1] );
$i++;
}
}
$fhi->close();
我把你给的数据放在in.txt里了。
执行的时候,perl t.pl in.txt 就OK了。不过你可能需要装一些perl模块。