【问题标题】:Excel::Writer::XLSX append text on a cellExcel::Writer::XLSX 在单元格上附加文本
【发布时间】:2016-06-05 20:06:50
【问题描述】:

我查看了文档,目前找不到。我正在使用“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..我想以某种方式附加它...

提前致谢。

【问题讨论】:

  • 请发布您当前的代码。

标签: perl


【解决方案1】:

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];

【讨论】:

  • 感谢 cmets.... 我正在寻找正在使用的 excel 写入模块中是否有任何附加选项。 ...
  • 想让大家知道的想法.... 此模块中没有附加选项。我确实向编写模块的 John Mcnamara 发送了一封电子邮件,他确认了。我已经知道 Bolav 给出的解决方法......我将接受该解决方案,因为它会帮助其他人。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2011-09-16
  • 2022-11-13
  • 2016-04-07
  • 2021-06-21
相关资源
最近更新 更多