Столбцы можно скрыть только в тех группах, в которых они были созданы - PullRequest
0 голосов
/ 11 апреля 2019

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

$worksheet->set_column( 'I:J', undef, undef, 1);

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

Например, если я создал их так:

$worksheet->set_column( 'I:I', 40 );
$worksheet->set_column( 'J:M', 60 );
$worksheet->set_column( 'N:N', 40 );

Затем команда

$worksheet->set_column( 'K:N', undef, undef, 1);

будет скрывать только столбец «N».

Решением было создать их таким образом

$worksheet->set_column( 'J:J', 60 );
$worksheet->set_column( 'K:M', 60 );
$worksheet->set_column( 'N:N', 40 );

Так что это работает, но код выглядит глупо, и вся ситуация просто не имеет смысла для меня. Кто-нибудь знает, почему это происходит, и если да, то есть ли другое решение проблемы?

1 Ответ

1 голос
/ 02 мая 2019

Причина странного поведения в том, что set_column() не обрабатывает диапазоны как наборы.Например, если вы установите диапазон столбцов для A:F, а затем другой для C:D, то вы не будете автоматически устанавливать 3 диапазона (A:B, C:D, E:F).Так что вам нужно сделать это разделение вручную.

В вашем случае было бы лучше использовать числовой диапазон до set_column(), например:

$worksheet->set_column( 8, 8, 40 );

# Instead of:
$worksheet->set_column( 'I:I', 40 );

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

...