使用Perl以特定格式写入Excel文件

时间:2019-06-13 23:05:18

标签: excel perl csv

我如何打印如下的csv文件行:

string1,string2,string3,string4

string5,string6,string7,string8

到如下所示的Excel文件:

string1 string2 string3 string4

string5 string6 string7 string8

字符串1和字符串5在A列中,字符串2和6在B列中,依此类推?

我刚刚开始使用Perl,但不确定如何处理。谢谢!

1 个答案:

答案 0 :(得分:1)

编程就是解决问题。但是有时问题确实很大,似乎太复杂了。然后您需要做的就是将其分解为更容易解决的较小问题。

您说要将CSV文件转换为Excel文件。您必须先决定是否要XLS or XLSX。在Excel中打开它们时,这两种格式看起来都一样,但实际上它们实际上是完全不同的。

在Perl中解决问题时,搜索的第一位始终是metacpan。让我们尝试一下:

我将选择Excel :: Writer :: XLSX。 Quick Start part of the docs建议这样做以创建文件并写入一列。

use Excel::Writer::XLSX;                                   # Step 0

my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' );    # Step 1
$worksheet = $workbook->add_worksheet();                   # Step 2
$worksheet->write( 'A1', 'Hi Excel!' );                    # Step 3

$workbook->close();                                        # Step 4

现在,我们知道在哪里可以写入Excel文件。但是仍然存在一些问题。让我们把整个事情分解。

谷歌搜索“如何在Perl中读取CSV文件?”给我们this article作为第一匹配。它有几个解决方案(在Perl中通常是这样)。最好的方法是使用Text :: CSV,因为它可以为您完成所有工作。同样,请参阅the documentation on metacpan了解更多详细信息。

# Object interface
use Text::CSV;

my @rows;
# Read/parse CSV
my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 });
open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while (my $row = $csv->getline ($fh)) {
    $row->[2] =~ m/pattern/ or next; # 3rd field should match
    push @rows, $row;
    }
close $fh;

当然,这不完全是您想要的,但这是一个好的开始。

现在,您需要遍历每一行并占用每一列,并将其写入Excel文件。我假设您知道如何遍历列表。上面的示例已经做到了。我们需要做的确切是这样:

  • 对于CSV文件中的每一行
    • 获取CSV文件的每个列值...
    • ...并将其放入Excel文件中的相应列
  • 保存Excel文件

如果您现在对这些步骤有疑问,可以搜索更具体的问题。


许多Perl模块都带有示例。如果您查看metacpan上的发行版,将会发现Excel::Writer::XLSX的版本很多。单击模块名称以转到分发页面,然后向下滚动。

click this link

Text :: CSV也带有类似的示例。