现在的位置: 首页 > 综合 > 正文

excel

2013年08月15日 ⁄ 综合 ⁄ 共 3913字 ⁄ 字号 评论关闭

 cmd, then input the command: ppm> install OLE::Storage_Lite

 

天天写excel,自己写了一个小工具,减少一点简单重复劳动。(本人不是excel高手,欢迎excel指正)

比如::把Book1.xls中的单元格的对应的内容写到Book.xls相应的单元格之后。

例如,原文档如下

Book.xls                    Book.xls

2                           1      a
1                           2      b
运行之后
Book.xls变成

2       b

1       a

这小工具是用perl写的,所以要先装一个perl环境。

用股沟搜perl。第一个。

我用的是ActivePerl Community Edition-- ActivePerl 5.10.1.1007(对,free!)

直接运行就装上了

然后要装两个包:Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel

用Perl Package Manager(开始->程序->.......)来装以上的两个包。(可能会有几个依赖的包,点上安装就好)

运行perl也很简单,把代码放到文本里,保存之后,把文本后缀改成.pl就好了。

可以在命令行里运行perl -w XXXX.pl(-w 是为了打印告警信息,便于调试)

也可以直接双击啦。

以下是程序代码。

 

#!/usr/bin/perl -w

use strict;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';

$Win32::OLE::Warn = 3;                     
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
    || Win32::OLE->new('Excel.Application', 'Quit'); 
my $Book = $Excel->Workbooks->Open("d:/Book.xls");
my $Book1 = $Excel->Workbooks->Open("d:/Book1.xls");
my $Sheet = $Book->Worksheets(1);
my $Sheet1 = $Book1->Worksheets(1);
foreach my $row (1..200)
{
  # skip empty cells
next unless defined $Sheet->Cells($row,1)->{'Value'};
$a=$Sheet->Cells($row,2)->{'Value'};#轮流取第一列的前200个单元格中的非空单元格=$a
foreach my $row1 (1..99)
{
next unless defined $Sheet1->Cells($row1,1)->{'Value'};
$b=$Sheet1->Cells($col,1)->{'Value'};#轮流取第一列的前99个单元格中的非空单元格=$b
if ( $a ep $b )#对于字符的匹配,不是if($a=$b)哦!

{
$b=$Sheet1->Cells($row1,2)->{'Value'};#注意!是($row1,2)。对就是匹配到的那个单元格右边的那个单元格。
$Sheet->Cells($row,2)->{'Formula'}=$b;#对Book.xls的第二列赋值。

}
}
}

# clean up after ourselves
$Book->Close;

 

 

在Linux或者Unix上操作(生成)Excel,怎么说都是比较困难的困难的事情。但是有cpan,困难迎刃而解了!CPAN上提供了Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel这两个模块。下面我们就来看看 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel的使用方法:

1、首先,我们要在服务器上安装相应的模块

安装 Excel 模块的 PPM 命令

Java代码 复制代码
  1. ppm> install OLE::Storage_Lite   
  2. ppm> install Spreadsheet::ParseExcel   
  3. ppm> install Spreadsheet::WriteExcel  
ppm> install OLE::Storage_Lite
ppm> install Spreadsheet::ParseExcel
ppm> install Spreadsheet::WriteExcel

 2、使用读取EXCEL文件:

Ruby代码 复制代码
  1. #!/usr/bin/perl -w   
  2.   
  3.    use strict;   
  4.    use Spreadsheet::ParseExcel;   
  5.   
  6.    my $parser   = Spreadsheet::ParseExcel->new();   
  7.    my $workbook = $parser->Parse('Book1.xls');   
  8.   
  9.    for my $worksheet ( $workbook->worksheets() ) {   
  10.   
  11.        my ( $row_min$row_max ) = $worksheet->row_range();   
  12.        my ( $col_min$col_max ) = $worksheet->col_range();   
  13.   
  14.        for my $row ( $row_min .. $row_max ) {   
  15.            for my $col ( $col_min .. $col_max ) {   
  16.   
  17.                my $cell = $worksheet->get_cell( $row$col );   
  18.                next unless $cell;   
  19.   
  20.                print "Row, Col    = ($row, $col)/n";   
  21.                print "Value       = "$cell->value(),       "/n";   
  22.                print "Unformatted = "$cell->unformatted(), "/n";   
  23.                print "/n";   
  24.            }   
  25.        }   
  26.    }  
 #!/usr/bin/perl -w

    use strict;
    use Spreadsheet::ParseExcel;

    my $parser   = Spreadsheet::ParseExcel->new();
    my $workbook = $parser->Parse('Book1.xls');

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

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

        for my $row ( $row_min .. $row_max ) {
            for my $col ( $col_min .. $col_max ) {

                my $cell = $worksheet->get_cell( $row, $col );
                next unless $cell;

                print "Row, Col    = ($row, $col)/n";
                print "Value       = ", $cell->value(),       "/n";
                print "Unformatted = ", $cell->unformatted(), "/n";
                print "/n";
            }
        }
    }

 3、生成EXCEL文件:

 

Ruby代码 复制代码
  1. #!/usr/bin/perl -w   
  2.   
  3. use Spreadsheet::WriteExcel;   
  4.   
  5.  # 创建一个新的EXCEL文件   
  6.  my $workbook = Spreadsheet::WriteExcel->new('test.xls');   
  7.   
  8.  # 添加一个工作表   
  9.  $worksheet = $workbook->add_worksheet();   
  10.   
  11.  #  新建一个样式   
  12.  $format = $workbook->add_format(); # Add a format   
  13.  $format->set_bold();#设置字体为粗体   
  14.  $format->set_color('red');#设置单元格前景色为红色   
  15.  $format->set_align('center');#设置单元格居中   
  16.   
  17. #使用行号及列号,向单元格写入一个格式化和末格式化的字符串   
  18.  $col = $row = 0;   
  19.  $worksheet->write($row$col'Hi Excel!'$format);   
  20.  $worksheet->write(1,    $col'Hi Excel!');   
  21.   
  22.  # 使用单元格名称(例:A1),向单元格中写一个数字。   
  23.  $worksheet->write('A3', 1.2345);   
  24.  $worksheet->write('A4''=SIN(PI()/4)');   
  25.  exit;   

抱歉!评论已关闭.