Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74038
  • 博文数量: 8
  • 博客积分: 474
  • 博客等级: 下士
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-24 12:00
文章分类

全部博文(8)

文章存档

2014年(2)

2012年(2)

2011年(3)

2010年(1)

分类: PERL

2014-10-22 00:08:26

花了两天时间写的,感觉一般般,如果有时间,要参考awk思路再写写。

点击(此处)折叠或打开

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use Spreadsheet::XLSX;
  5. use Excel::Writer::XLSX;
  6. use Encode;
  7. use File::Spec;

  8. print "请输入匹配条件:\n";
  9. chomp (my $a=<STDIN>);
  10. my @matchstr=split /\s+/,$a;
  11. #print "matchstr is @matchstr\n";

  12. print "请同时输入排除的条件,如果有的话:\n";
  13. chomp (my $b=<STDIN>);
  14. my @exceptstr=split /\s+/,$b;

  15. sub writexcel;

  16. my $dirname='C:';
  17. my $filename=File::Spec->catfile($dirname,'my2.xlsx');
  18. print "filename is $filename\n";

  19. my $workbook=Spreadsheet::XLSX->new($filename) or die "open xlsx error";
  20. my @worksheets=@{$workbook->{Worksheet}} or die "open sheets error";

  21. my $workbook2 = Excel::Writer::XLSX->new('b.xlsx') or die "open xlsx2 error.";

  22. foreach my $worksheet(@worksheets){
  23. print "sheet is $worksheet->{Name}\n" or die "cannot print name";
  24. my $row_min=$worksheet->{MinRow};
  25. my $row_max=$worksheet->{MaxRow};
  26. my $col_min=$worksheet->{MinCol};
  27. my $col_max=$worksheet->{MaxCol};;

  28. my @row_tmp;
  29. my $s=0;
  30.  foreach my $row($row_min .. $row_max){
  31.   my @col_tmp;
  32.   my @b;
  33.   my $flag=0;

  34.   foreach my $col($col_min .. $col_max){
  35.   my $cell=$worksheet->{Cells}[$row][$col];
  36.   next unless $cell;
  37.   
  38.   if ($cell){

  39.   my $a=$cell->{Val};
  40.   $a=encode("gbk",decode("utf8",$a));
  41.   #printf("( %s , %s ) => %s\n", $row, $col, $a);
  42.   push @b,$a;
  43.   }
  44.   } #col
  45.   
  46.   if(scalar @matchstr != 0){
  47.   foreach my $matchstr(@matchstr){
  48.   if (grep(/$matchstr/,@b)){
  49.   $flag=1;
  50.   last;
  51.   }}
  52.   
  53.   }


  54.   if(scalar @exceptstr != 0){
  55.   foreach my $exceptstr(@exceptstr){
  56.   if (grep(/$exceptstr/,@b)){
  57.   $flag=0;
  58.   last;
  59.   }}}
  60.   
  61.   if ($flag == 1){
  62.   @col_tmp=@b;
  63.   push @row_tmp,[@col_tmp];}

  64.   my $r_t=scalar @row_tmp;
  65.   #print "row size is $r_t\n";
  66.  } #row

  67. my $worksheet2=$workbook2->add_worksheet($s) or die "open sheets2 error";
  68. writexcel($worksheet2,$workbook2,@row_tmp);
  69. $s++;
  70. } #sheet


  71. sub writexcel {
  72. my $worksheet=shift;
  73. my $workbook=shift;
  74. my @value=@_;

  75. my $format=$workbook->add_format();
  76. $format->set_bold();
  77. $format->set_color('blue');
  78. $format->set_align('center');

  79. my @row2=@value;

  80. for my $i(0 .. $#row2){
  81.  for my $k(0 .. $#{$row2[$i]}){
  82.  print "i is $i, k is $k\n";
  83.   my $t=$row2[$i][$k];

  84.   $t=decode("gbk",$t);
  85.   $worksheet->write($i,$k,$t,$format);
  86.   
  87.   }
  88.  
  89.  }
  90. }

阅读(1756) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~