Perl Excel :: Writer :: XLSX правильный синтаксис для функции Excel Move Area.function - PullRequest
0 голосов
/ 17 мая 2019

Я использую модуль Perl Excel :: Writer :: XLSX. Если я ввожу функцию непосредственно в Excel под проверкой данных, она работает. Измененная форма для сценария Perl не работает.

У меня есть несколько листов в файле Excel. Под «проверка данных» -> «список», я использую это как «источник»:

=BEREICH.VERSCHIEBEN(Boden_Subtyp!$E:$G;1;VERGLEICH(Profil!$G$2;Boden_Subtyp!$E$1:$G$1;0)-1;ANZAHL2(INDEX(Boden_Subtyp!$E:$G;;VERGLEICH(Profil!$G$2;Boden_Subtyp!$E$1:$G$1;0)));1)

Это работает.

Если я использую это в измененной форме в моем скрипте Perl, чтобы создать файл Excel с этой функцией, чтобы я не мог открыть файл Excel. Модифицированная форма:

=BEREICH.VERSCHIEBEN('Boden_Subtyp'!$E:$G;1;VERGLEICH('Profil'!$G$2;'Boden_Subtyp'!$E$1:$G$1;0)-1;ANZAHL2(INDEX('Boden_Subtyp'!$E:$G;;VERGLEICH('Profil'!$G$2;'Boden_Subtyp'!$E$1:$G$1;0)));1)

Код взломан:

$validate_source = "=BEREICH.VERSCHIEBEN('Boden_Subtyp'!$E:$G;1;VERGLEICH('Profil'!$G$2;'Boden_Subtyp'!$E$1:$G$1;0)-1;ANZAHL2(INDEX('Boden_Subtyp'!$E:$G;;VERGLEICH('Profil'!$G$2;'Boden_Subtyp'!$E$1:$G$1;0)));1)";
$profil_zugriffshash -> data_validation(
    $iii,$spaltenzaehler,
    {
        validate => 'list',
        source   => "$validate_source",
    }
);

Если файл Excel создан, я открою его в Excel и получу ошибку: нечитаемый контент Excel был найден ...

1 Ответ

0 голосов
/ 20 мая 2019

Это не решение проблемы. Я упрощаю проблему. Сценарий создает файл, который Excel может прочитать без ошибок. Если используется закомментированная исходная запись, Excel сообщает об ошибке. Однако закомментированную исходную запись можно напрямую заменить на незакомментированную исходную запись в Excel.

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

my $workbook  = Excel::Writer::XLSX->new( '/home/nutzer/test_bereich_verschieben.xlsx' );
my $home_hash = $workbook->add_worksheet('Home');
$home_hash -> write(0, 0, 'range_val');
$home_hash -> data_validation(
    1,0,
    {
        validate => 'list',
        source   => 'Horizont!$C$5:$C$6',       # list: 2 and 3
#       source   => '=BEREICH.VERSCHIEBEN(Horizont!$C:$E;3;0;3;1)', # list: 1 and 2 and 3
    }
);

my $horizont_hash = $workbook->add_worksheet('Horizont');
$horizont_hash -> write(3, 2, '1');
$horizont_hash -> write(4, 2, '2');
$horizont_hash -> write(5, 2, '3');

$workbook->close;
exit;   
__END__
...