【问题标题】:write_rich_string with dynamic values (Perl)具有动态值的 write_rich_string (Perl)
【发布时间】:2018-08-06 23:09:16
【问题描述】:

我对 perl 非常陌生,我被投入到一个新的 perl 项目中。作为一名 C 开发人员,我最初遇到了一些小问题,但不知何故设法修复了以下逻辑所期望的代码。

我使用 write_rich_string 是为了在同一个单元格中进行不同的格式化。这是我收到错误的代码的 sn-p。

$worksheet->write_rich_string(0,0,$format1,$text1,$format2,$text2,$wrap);

代码运行良好,直到 text1 或 text2 之一为空。有什么办法可以处理 write_rich_string() 中的 null 吗?

请注意,我有 7 个文本及其相应格式要插入。我刚刚展示了 2 个文本。

请求您的帮助。请帮忙。

更新 2:我还尝试了以下方法,这样我可以将工作表格式(红色字体单元格)与变量中的字符串连接起来,并将其放入 write_rich_string() 函数中。但这给出了以下消息,而 excel 行有以下消息。

if ($mdr_count == 1) { $var.="$lav_cell,$mrd"; }
if ($lwd_count == 1) { $var.="$red_cell,$lwd"; }
print "The value is ${var}";

$worksheet->write_rich_string($row,$pos,$var);

输出:

**Excel::Writer::XLSX::Format=HASH(0x1427aac)**,Provide Missing Required **DataExcel::Writer::XLSX::Format=HASH(0x1426e7c)**,Loan is late by more than 30 days

它只是将格式转换为字符串并将其粘贴到 excel 行中。

【问题讨论】:

  • 在 perl 中引用为 undef 的空值。检查空值:if (defined($text1)) { ... }
  • @wolfrevokcat 我已经编辑了问题,我尝试了相同的方法,但我无法做到。
  • 你不能把null的值改成空字符串吗? $text1 = $text1 eq '' || $text1 eq 'null' ? '' : $text1
  • 如果您放置空值,即 ..'',则不会在 write_rich_string() 上工作。该格式不能应用于空值。

标签: bash shell perl unix perl-module


【解决方案1】:

在我看来,您可以拥有一个包含要在电子表格中输入的字符串(文本)的数组。在数组中搜索undef 元素并将它们更改为NULL 字符串。

基于您提供给我们的代码的工作代码示例。

#!/usr/bin/perl
use strict;
use warnings;
use Excel::Writer::XLSX;

# Create a new Excel workbook
my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' );

# Add a worksheet
my $worksheet = $workbook->add_worksheet();

#  Add and define a format
my $format1 = $workbook->add_format();
$format1->set_bold();
$format1->set_color( 'red' );
$format1->set_align( 'center' );

#  Add and define a format
my $format2 = $workbook->add_format();
$format2->set_bold();
$format2->set_color( 'blue' );
$format2->set_align( 'center' );

#  Add and define a format
my $format3 = $workbook->add_format();
$format3->set_bold();
$format3->set_color( 'orange' );
$format3->set_align( 'center' );

# Search array and replace undef element(s)
my @text = ('string1', undef, 'string3');
defined or $_ = "NULL" for @text;
# Or simply empty string
# defined or $_ = "" for @text;
# Or simply white space
# defined or $_ = " " for @text;

# Write some strings with multiple formats.
my ($row, $col) = 0;
$worksheet->write_rich_string( $row, $col,
                   $format1, $text[0],
                   $format2, $text[1],
                   $format3, $text[2] );

这对你有用吗?

期待您的回复,BR。

【讨论】:

  • 因为你是 undef 值与“NULL”字符串“NULL”将被打印在 excel 上。我不希望将 null 打印在 excel 上。谢谢。
  • 你好@VimalBhaskar,我在这个命令下又添加了一行:# Or simply empty string # defined or $_ = "" for @text; 这完全一样,但是它打印一个没有空格的空字符串而不是NULL。您可以将其替换为defined or $_ = " " for @text;。这只是一个代码示例,如果您确实有 NULL 值,但您没有向我们提供这部分信息,我不知道您想做什么。如果您确实有NULL,请向我们提供输出,例如输出:Text1 Text2 等...期待您的更新。
  • 投反对票,为什么?有人尝试过但没有为他们工作代码示例吗?在这个网站上是否有任何投票逻辑或随机有人投反对票?
  • 我没有对@Thanos 投反对票。并且看起来像 $_ = "" for text 不会放置格式。无论如何,我赞成你所做的努力。谢谢你。我反正解决了这个问题。
  • 你好@VimalBhaskar,我没想到你会投反对票,但我想知道为什么有人会?建议的解决方案有效并解决了问题,可能不是您想要的方式,但它解决了问题。您能否也为我们提供解决方案以供将来参考,以防有人可能遇到与您相同的问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2015-07-16
  • 2015-08-15
相关资源
最近更新 更多