首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要更多关于如何使用Spreadsheet::ParseExcel的示例

需要更多关于如何使用Spreadsheet::ParseExcel的示例
EN

Stack Overflow用户
提问于 2010-07-10 07:54:14
回答 2查看 17.7K关注 0票数 5

我一直使用Spreadsheet::ParseExcel来列出电子表格的内容。我已经看过几个关于如何转储整个电子表格的示例。我真的很想看看如何更有选择性地使用这个脚本。

下面来自IBM的示例基本上转储了所有包含数据的单元格的内容。

代码语言:javascript
复制
#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;

my $oExcel = new Spreadsheet::ParseExcel;

die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;

my $oBook = $oExcel->Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
print "FILE  :", $oBook->{File} , "\n";
print "COUNT :", $oBook->{SheetCount} , "\n";

print "AUTHOR:", $oBook->{Author} , "\n"
 if defined $oBook->{Author};

for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
 $oWkS = $oBook->{Worksheet}[$iSheet];
 print "--------- SHEET:", $oWkS->{Name}, "\n";
 for(my $iR = $oWkS->{MinRow} ;
     defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;
     $iR++)
 {
  for(my $iC = $oWkS->{MinCol} ;
      defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;
      $iC++)
  {
   $oWkC = $oWkS->{Cells}[$iR][$iC];
   print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
  }
 }
}

有没有人能给我举个例子,告诉我如何为每一行的某一列指定要采取的操作?

例如,我有一个7列n行的电子表格。我想以某种方式重新格式化每一列中的数据。也许我想将第6列作为每一行,并将一些文本附加到存储在单元格中的字符串的末尾。这是如何设置的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-10 09:34:13

要修改Excel文件,Spreadsheet::ParseExcel::SaveParser模块非常有用。它允许您读取文件,进行修改,然后将更改后的内容写入新文件。下面是一个简单的例子:

代码语言:javascript
复制
use strict;
use warnings;

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;

my $excel_file_name = $ARGV[0];
my $parser          = Spreadsheet::ParseExcel::SaveParser->new();
my $workbook_orig   = $parser->Parse($excel_file_name);

# We will edit column 7 of the first worksheet.
my $worksheet = $workbook_orig->worksheet(0);
my $EDIT_COL = 6;

my ($row_min, $row_max) = $worksheet->row_range();
for my $r ($row_min .. $row_max){
    my $cell = $worksheet->get_cell($r, $EDIT_COL);
    unless (defined $cell){
        next; # Modify as needed to handle blank cells.
    }
    my $val = $cell->value . '_append_text';
    $worksheet->AddCell( $r, $EDIT_COL, $val, $cell->{FormatNo} );
}

# You can save the modifications to the same file, but when
# you are learning, it's safer to write to a different file.
$excel_file_name =~ s/\.xls$/_new.xls/;
$workbook_orig->SaveAs($excel_file_name);

有关更多其他示例,请参阅优秀的文档:

  • Spreadsheet::ParseExcel::SaveParser
  • Spreadsheet::WriteExcel
  • Spreadsheet::WriteExcel::Examples
  • Spreadsheet::ParseExcel
票数 9
EN

Stack Overflow用户

发布于 2010-07-10 17:36:56

要以某种方式重新格式化每个列中的数据,可以使用Spreadsheet::ParseExcelSpreadsheet::WriteExcel模块的组合,如下所示

通过Spreadsheet::WriteExcel模块创建新的excel,在it.Then中添加工作表,解析已有的Excel,并将内容格式化写入新的excel中。

下面是一个示例:

代码语言:javascript
复制
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;

die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;

my $oBook = $oExcel->Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
my $workbook  = Spreadsheet::WriteExcel->new('/root/Desktop/test_simple.xls');
my $worksheet = $workbook->add_worksheet();
$worksheet->set_column('A:A', 50);
my $format = $workbook->add_format();
            $format->set_size(10);
            $format->set_bold();
            $format->set_color('black');
            $format->set_font('Verdana');
            $format->set_text_wrap();
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
        {
                    $oWkS = $oBook->{Worksheet}[$iSheet];
            for(my $iR = $oWkS->{MinRow} ;defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;$iR++)
            {
                for(my $iC = $oWkS->{MinCol} ;defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;$iC++)
                {
                   $oWkC = $oWkS->{Cells}[$iR][$iC];
                   $worksheet->write($iR , $iC,  $oWkC->Value, $format) if($oWkC); #writing a new excel from existing excel
                }
            }
        }

从已有的excel中写入新的excel后,可以使用Spreadsheet::WriteExcel的接口将数据追加到it.It中,这样可以解决以下问题

  1. 首先,它将保留您现有的Excel文件。
  2. 您可以格式化成新的excel文件,而无需修改原始的Excel文件。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3217204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档