免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2800 | 回复: 4
打印 上一主题 下一主题

perl读取excel表格,读每一行的每一个小格到一个数组 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-08-25 14:40 |只看该作者 |倒序浏览
如图,楼主有这样一个表格,想把每一行的每一小格的数据赋给一个数组,然后把这个数组里的某些值拿出来用,该怎么做?

Capture.PNG (208.63 KB, 下载次数: 8)

Capture.PNG

论坛徽章:
0
2 [报告]
发表于 2016-08-25 16:11 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2016-08-25 22:09 |只看该作者
楼主能再说的清楚点吗,或者用这个表格举个例子呢?

论坛徽章:
0
4 [报告]
发表于 2016-08-26 18:25 |只看该作者
正好我也想用perl处理excel,在网上找的两段代码:

  1. #!/usr/bin/perl -w

  2. use Spreadsheet::WriteExcel;

  3. # 创建一个新的EXCEL文件
  4. my $workbook = Spreadsheet::WriteExcel->new('test.xls');

  5. # 添加一个工作表
  6. $worksheet = $workbook->add_worksheet();

  7. # 新建一个样式
  8. $format = $workbook->add_format(); # Add a format
  9. $format->set_bold();#设置字体为粗体
  10. $format->set_color('red');#设置单元格前景色为红色
  11. $format->set_align('center');#设置单元格居中

  12. #使用行号及列号,向单元格写入一个格式化和末格式化的字符串
  13. $col = $row = 0;
  14. $worksheet->write($row, $col, 'Hi Excel!', $format);
  15. $worksheet->write(1, $col, 'Hi Excel!');

  16. # 使用单元格名称(例:A1),向单元格中写一个数字。
  17. $worksheet->write('A3', 1.2345);
  18. $worksheet->write('A4', '=SIN(PI()/4)');
  19. exit;


  20. use Spreadsheet::ParseExcel;
  21. use Spreadsheet::ParseExcel::FmtUnicode;

  22. my $parser   = Spreadsheet::ParseExcel->new();
  23. my $formatter = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map=>"CP936");
  24. $workbook = $parser->parse('CorpusWordlist2.xls', $formatter);

  25. if ( !defined $workbook ) {
  26.     die $parser->error(), ".\n";
  27. }

  28. for my $worksheet ( $workbook->worksheets() ) {

  29.     my ( $row_min, $row_max ) = $worksheet->row_range();
  30.     my ( $col_min, $col_max ) = $worksheet->col_range();

  31.     for my $row ( $row_min .. $row_max ) {
  32.         for my $col ( $col_min .. $col_max ) {
  33.            my $cell = $worksheet->get_cell( $row, $col );
  34.            next unless $cell;
  35.            print "Row, Col    = ($row, $col)\n";
  36.            print "Value       = ", $cell->value(),       "\n";
  37.            print "\n";
  38.         }
  39.     }
  40. }
  41. <STDIN>;
复制代码

论坛徽章:
0
5 [报告]
发表于 2016-08-27 13:24 |只看该作者
  1. #!/usr/bin/perl
  2. use Spreadsheet::Read;
  3. use Data::Dumper;
  4. use Smart::Comments;

  5. my $file = 'example.xls';
  6. my $spreadsheet = ReadData( $file) or die "Cannot read file ";#指定读的文件名
  7. my $sheet_count = $spreadsheet->[0]{sheets} or die "No sheets in $file\n"; #这个是查有几个sheet
  8. for my $sheet_index (1 .. $sheet_count){
  9.    my $sheet = $spreadsheet->[$sheet_index] or next;
  10.    printf("%s = %2d: [%-s] %3d Cols, %5d Rows\n",
  11.                     $file,$sheet_index,$sheet->{label},$sheet->{maxcol},$sheet->{maxrow});#label是sheet名
  12.   for my $row (1 .. $sheet->{maxrow})
  13.   {
  14.       #读一行到数组
  15.        @testrow = map {
  16.                                my $data = $sheet->{cell}[$_][$row] ;
  17.                                defined $data ? $data : "-";
  18.                }1 .. $sheet->{maxcol};
  19.        $rowstr = join(",",@testrow);            
  20.        print  $rowstr."\n";
  21.    };
  22. }


  23. exit;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP