如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

技术员乔

我是Perl的新手。我有一个Excel文件说“ sample.xls”,如下所示。Sample.xls

大约有1000行这样的数据。我想解析此文件,并将其写入具有以下输出格式的另一个文件“ output.xls”中。

output.xls我已经用perl编写了一个脚本,但是,它没有按照我想要的方式提供确切的输出。另外,脚本似乎不是很有效。谁能指导我如何改善脚本以及使输出如“ output.xls”所示?

这是脚本:

#!/usr/bin/perl –w

use strict;
use warnings;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;
use Spreadsheet::WriteExcel::Chart;


# Read the input and output filenames.
my $inputfile  = "path/sample.xls";
my $outputfile = "path/output.xls";

if ( !$inputfile || !$outputfile ) {
    die( "Couldn't find file\n" );
}

my $parser      = Spreadsheet::ParseExcel->new();
my $inwb = $parser->parse( $inputfile );

if ( !defined $inwb ) {
    die "Parsing error: ", $parser->error(), ".\n";
}

my $outwb = Spreadsheet::WriteExcel->new( $outputfile );


my $inws  = $inwb->worksheet( "Sheet1" );
my $outws = $outwb->add_worksheet("Sheet1");
my $out_row       = 0;

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

my $format = $outwb->add_format(
center_across => 1,
bold => 1,
size => 10,
border => 4,
color => 'black',
border_color => 'black',
align => 'vcenter',
);


$outws->write(0,0, "Item Name", $format);
$outws->write(0,1, "Spec", $format);
$outws->write(0,2, "First name", $format);
$outws->write(0,3, "Middle Name", $format);
$outws->write(0,4, "Last Name", $format);
$outws->write(0,5, "Customer Number", $format);
$outws->write(0,6, "Age", $format);
$outws->write(0,7, "Units", $format);

my $col_count = 1;
#$row_min = 1;
for my $inws ( $inwb->worksheets() ) {
    my ( $row_min, $row_max ) = $inws->row_range();
    my ( $col_min, $col_max ) = $inws->col_range();

    for my $in_row ( 2 .. $row_max ) {

        for my $col (  0 .. 0 ) {


            my $cell = $inws->get_cell( $in_row, $col);

            my @fields = split /_/, $cell->value();
                next unless $cell;


            $outws->write($in_row,$col, $cell->value());
            $outws->write($in_row,$col+1, $fields[1]);
        }
    }   

    for my $in_row ( 2 .. $row_max ) {

        for my $col (  1 .. 1 ) {

            my $cell = $inws->get_cell( $in_row, $col);

            my @fields = split /_/, $cell->value();
                next unless $cell;


            #$outws->write($in_row,$col+1, $cell->value());
            $outws->write($in_row,$col+1, $fields[0]);
            $outws->write($in_row,$col+2, $fields[1]);
            $outws->write($in_row,$col+3, $fields[2]);
            $outws->write($in_row,$col+4, $fields[3]);
        }
    }   

    for my $in_row ( 2 .. $row_max ) {

        for my $col (  2 .. 2 ) {

            my $cell = $inws->get_cell( $in_row, $col);

            my @fields = split /_/, $cell->value();
                next unless $cell;


            $outws->write($in_row,6, $cell->value());
        }
    }   

    for my $in_row ( 2 .. $row_max ) {

        for my $col (  3 .. 9 ) {

            my $cell = $inws->get_cell( $in_row, $col);

            next unless $cell;


        }
    }   

    for my $in_row ( 2 .. $row_max ) {
        for my $col ( 10 .. 10 ) {

            my $cell = $inws->get_cell( $in_row, $col );

            next unless $cell;


            $outws->write($in_row,7, $cell->value());

        }
    }

}
津巴布韦

为了对输出进行排序,您需要先收集所有信息,然后再将其写出。现在,您正在行和列之间进行一些来回跳转。

我将对它们进行一些更改以使其排序并使其更有效(以供阅读)。

  • $data在循环外创建一个数据结构以存储所有信息。
  • 如果只有一个工作表,则无需循环工作表。只需一张纸即可。
  • 循环播放。
  • 在该循环内,使用您必须解析各个字段的代码即可对其进行解析。没有2..2循环。只是一堆陈述。

    my @item_fields = split /_/, $inws->get_cell( $in_row, 0 ) || q{};
    my @name_fields = split /_/, $inws->get_cell( $in_row, $col ) || q{};
    
  • 将它们存储在$data每个项目中。

    push @{ $data } = [ $item_fields[0], ... ];
    
  • 完成循环。打开输出文件。

  • $data用a循环sort并写入输出文件。

    foreach my $row (sort { $a->[0] cmp $b->[0] } @{ $data } ) { ... }
    
  • 完毕。

我建议您继续阅读sort并检查perlrefperlreftut,以了解有关引用(数据结构)的更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

来自分类Dev

Rails,如何使用“ roo” gem替换或写入excel工作表文件中的数据

来自分类Dev

如何使用 Excel VBA 仅更新特定工作表而不是整个工作簿中的链接?

来自分类Dev

使用ByteScout Spreadsheet在Excel文件中写入多个工作表

来自分类Dev

使用Excel 2013 Online中的新列从Excel工作表导入数据

来自分类Dev

使用Excel 2013 Online中的新列从Excel工作表导入数据

来自分类Dev

如何从熊猫数据框中的特定列写入多个Excel工作表?

来自分类Dev

如何从EPPLUS中的Excel工作表中删除列

来自分类Dev

如何将旧 Excel 文件中多张工作表中的数据导出到新 Excel 文件中的一张工作表中

来自分类Dev

如何使用刷新将Excel Web Data添加到新列或工作表中而不覆盖旧数据

来自分类Dev

如何在R中的一个csv excel文件的多个工作表中写入多个数据框?

来自分类Dev

如何从 UFT 中删除 Excel 工作表

来自分类Dev

Excel工作表数据中的XML文件

来自分类Dev

使用应用系列将两个列表中的数据框写入 Excel 文件的两个单独工作表

来自分类Dev

使用Python删除现有Excel工作表中的整个空白行

来自分类Dev

合并工作表并在Excel中添加列

来自分类Dev

合并工作表并在Excel中添加列

来自分类Dev

在Excel中删除工作表

来自分类Dev

如何根据另一个参考列中的数据值填充或更新Excel工作表中的列值

来自分类Dev

如何添加工作表\将工作表删除到共享的Excel文件中?

来自分类Dev

Python熊猫对数据框列进行分组,并使用它们来计算Excel工作表中的新列

来自分类Dev

无法使用for循环(Apache_poi)在Excel工作表中写入数据

来自分类Dev

无法使用for循环(Apache_poi)在Excel工作表中写入数据

来自分类Dev

如何使for循环忽略几列并在excel文件中绑定所有工作表(无论工作表总数)

来自分类Dev

无法使用熊猫将完整的数据透视表写入现有excel工作簿中的新工作表

来自分类Dev

如何从java中的Excel工作表(XSSF)中删除图像

来自分类Dev

R - 抓取多个 url 并在不同的 excel 数据表中写入每个数据 url

来自分类Dev

如何使用ajax更新数据库中的记录并在单击按钮时删除表行?

来自分类Dev

如何将arrayList中的数据写入多个excel表

Related 相关文章

  1. 1

    如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

  2. 2

    Rails,如何使用“ roo” gem替换或写入excel工作表文件中的数据

  3. 3

    如何使用 Excel VBA 仅更新特定工作表而不是整个工作簿中的链接?

  4. 4

    使用ByteScout Spreadsheet在Excel文件中写入多个工作表

  5. 5

    使用Excel 2013 Online中的新列从Excel工作表导入数据

  6. 6

    使用Excel 2013 Online中的新列从Excel工作表导入数据

  7. 7

    如何从熊猫数据框中的特定列写入多个Excel工作表?

  8. 8

    如何从EPPLUS中的Excel工作表中删除列

  9. 9

    如何将旧 Excel 文件中多张工作表中的数据导出到新 Excel 文件中的一张工作表中

  10. 10

    如何使用刷新将Excel Web Data添加到新列或工作表中而不覆盖旧数据

  11. 11

    如何在R中的一个csv excel文件的多个工作表中写入多个数据框?

  12. 12

    如何从 UFT 中删除 Excel 工作表

  13. 13

    Excel工作表数据中的XML文件

  14. 14

    使用应用系列将两个列表中的数据框写入 Excel 文件的两个单独工作表

  15. 15

    使用Python删除现有Excel工作表中的整个空白行

  16. 16

    合并工作表并在Excel中添加列

  17. 17

    合并工作表并在Excel中添加列

  18. 18

    在Excel中删除工作表

  19. 19

    如何根据另一个参考列中的数据值填充或更新Excel工作表中的列值

  20. 20

    如何添加工作表\将工作表删除到共享的Excel文件中?

  21. 21

    Python熊猫对数据框列进行分组,并使用它们来计算Excel工作表中的新列

  22. 22

    无法使用for循环(Apache_poi)在Excel工作表中写入数据

  23. 23

    无法使用for循环(Apache_poi)在Excel工作表中写入数据

  24. 24

    如何使for循环忽略几列并在excel文件中绑定所有工作表(无论工作表总数)

  25. 25

    无法使用熊猫将完整的数据透视表写入现有excel工作簿中的新工作表

  26. 26

    如何从java中的Excel工作表(XSSF)中删除图像

  27. 27

    R - 抓取多个 url 并在不同的 excel 数据表中写入每个数据 url

  28. 28

    如何使用ajax更新数据库中的记录并在单击按钮时删除表行?

  29. 29

    如何将arrayList中的数据写入多个excel表

热门标签

归档