Электронная таблица :: WriteExcel: динамическое использование для создания диаграмм на одном листе

58
9

Я фактически работаю над автоматикой, чтобы автоматически рисовать кривые в одном и том же рабочем месте.

Я хотел бы знать, есть ли у кого-нибудь советы по созданию динамического кода для рисования диаграммы с помощью библиотеки Spreadsheet :: WriteExcel.

Я хотел бы использовать цикл for для создания нескольких диаграмм на одном листе. Я пробовал несколько методов, но я не знаю, как объявить диаграмму, чтобы добавить с моим циклом, не перезаписывая его каждый раз.

Мой код следующий:

sub ExcelGraphGen {

my ($RowMin,$RowMax,$ColMin,$ColMaxToRead,$NumOfColumnMeasured,$wbToWrite,$TableOfWsToDraw_REF,$TableOfWsToWrite_REF,$Voltage_REF,$Columns) = @_;

#For all VG Values
my @Alphabet = ("A".."ZZ");

foreach my $Voltage [3,2,1,0] {

for (my $i=0 ; $i< 3 ; $i++) {

my $chart = $wbToWrite->add_chart( type => 'scatter', embedded => 1, name => "$i" );
my $WorkSheetNameToParse = $TableOfWsToWrite{$Voltage}->get_name();
my $WorkSheetNameToDraw = $TableOfWsToDraw{$Voltage}->get_name();

for (my $ColToRead = $i ; $ColToRead < 9; $ColToRead = $ColToRead + 3 ) {

$chart->add_series(
name => "\'${WorkSheetNameToParse}\'\!\$${Alphabet[$ColToRead]}\$3",
categories => "=${WorkSheetNameToParse}\!\$A\$5:\$A${RowMax}",
values => "=${WorkSheetNameToParse}\!${Alphabet[$ColToRead]}\$5:${Alphabet[$ColToRead]}${RowMax}",
);
}
$TableOfWsToDraw{$Voltage}->insert_chart( 'E2', $chart );

}
}
return 1;

}

спросил(а) 2018-10-19T19:49:00+03:00 1 год, 11 месяцев назад
1
Решение
89

$TableOfWsToDraw{$Voltage}->insert_chart( 'E2', $chart ); всегда вставляет диаграмму в ту же ячейку E2 и перезаписывает ее. Вам нужно использовать разные ячейки на основе $ i. Например: 'E'.(2 + $i). Возможно, вам потребуется настроить ширину и высоту ячеек, чтобы избежать перекрытия диаграмм.

ответил(а) 2018-10-22T11:33:00+03:00 1 год, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема