write_rich_string с динамическими значениями (Perl)

Я довольно новичок в Perl, и я вовлечен в новый проект Perl. Я, будучи разработчиком C, изначально имел некоторые ошибки, но каким-то образом сумел исправить код, ожидаемый для приведенной ниже логики.

Я использую write_rich_string для того, чтобы сделать различное форматирование в одной и той же ячейке. Вот фрагмент кода, где я получаю сообщение об ошибке.

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

код работает отлично, пока один из text1 или text2 не станет нулевым. Есть ли способ, которым я могу обработать нуль внутри write_rich_string()?

Обратите внимание, у меня есть 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.

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

Это работает для вас?

Ждем вашего ответа, БР.

Другие вопросы по тегам