Excel :: Writer :: XLSX在单元格上附加文本

时间:2016-02-23 19:49:22

标签: perl

我查看了文档无法找到目前为止。我正在使用“Excel :: Writer :: XLSX”将文本写入excel。

问题是:如何在单元格上附加任何文本。假设单元格A1已经写了“abc”,我怎么能用任何分隔符说“def”来附加它。最后A1细胞应该有“abc-def”。

目前它已覆盖旧数据并仅显示“def”。

File has say :  
Hostname name abc
Random Lines 
Hostname name def
Random Data 



open my $FH, '<', $filenames or die $!;
while(<$FH>)
{
            if($_ =~ /^Hostname+\s+name+\s(.*)/){
            my $hostname = $1;
            print "\nHostname : $1\n";      
                $worksheet->write(0, 0, $hostname);
            }
}

现在,如果你查看代码..当第一个正则表达式将它在单元格上的写入作为abc时...现在当正则表达式下次匹配时...它删除abc并写入def ..我想要一定要追加它...

提前谢谢。

1 个答案:

答案 0 :(得分:2)

Excel :: Writer ::在创建临时文件时,XLSX不会公开读取临时文件的功能。您需要将值保存在循环外:

use strict;
use warnings;

my $hostname = '';
my $delimiter = '-';
open my $FH, '<', $filenames or die $!;
while(<$FH>)
{
    if($_ =~ /^Hostname+\s+name+\s(.*)/){
        $hostname .= $delimiter if ($hostname);
        $hostname .= $1;
        print "\nHostname : $hostname\n";      
    }
}
$worksheet->write(0, 0, $hostname);

要破解内部数据结构以获取临时值this就是这样说的:

# Write a shared string or an in-line string based on optimisation level.
if ( $self->{_optimization} == 0 ) {
    $index = $self->_get_shared_string_index( $str );
}
else {
    $index = $str;
}
$self->{_table}->{$row}->{$col} = [ $type, $index, $xf ];

所以要回读字符串,没有优化:

my $value = $self->{_table}->{$row}->{$col}->[1];