永发信息网

关于用perl提取文件导入到excel中

答案:2  悬赏:30  手机版
解决时间 2021-12-30 05:19
  • 提问者网友:战皆罪
  • 2021-12-29 13:00
例如 我有一些字符

Signals {
"MAA0_0" InOut;
"MAA0_1" InOut;
"MAA0_2" InOut;
"MAA0_3" InOut;
"MAA0_4" InOut;
"MAA0_5" InOut;
"MAA0_6" InOut;
"MAA0_7" InOut;
"MAA0_8" InOut;
"MAA0_9" InOut;
"CASA0B" InOut;
"CKEA0" InOut;
像这样的 我想把 "MAA0_0" InOut; 类似这样的导入到excel表中 并且分行 这样用perl应该怎么写?求高手 或者发到我邮箱370808175@qq.com 谢谢了!
最佳答案
  • 五星知识达人网友:大漠
  • 2021-12-29 13:37
一.关于 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结构的方式读出数据
全部回答
  • 1楼网友:街头电车
  • 2021-12-29 14:22
创建一个新的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:如果碰到中文写入时乱码问题,要ppm 安装unicode_map包,按照如下方法使用 use unicode::map(); my $map = new unicode::map("gb2312"); my $abc='你好!'; $worksheet->write_unicode($linecount, 1, $map->to_unicode( $abc)); 这样就可以了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯