Может ли Spreadsheet :: WriteExcel изменить формат ячейки без изменения ее содержимого? - PullRequest
2 голосов
/ 19 февраля 2012

В моем скрипте Perl я использую модуль Spreadsheet :: WriteExcel для создания файла Excel.Файл содержит таблицу, размер которой является динамическим, т. Е. Я не знаю, сколько строк будет в ней, пока таблица не будет создана.Мне бы хотелось, чтобы последняя строка таблицы имела немного другой формат (например, ее нижняя граница должна быть "===").К сожалению, я не могу применить этот (другой) формат во время создания строки, поскольку в то время я еще не знал, что это будет последняя строка.

Итак, мой вопрос:я могу изменить формат уже существующей ячейки без изменения ее содержимого?Если я передаю undef в качестве значения ячейки методу $worksheet->write(), он просто перезаписывает содержимое ячейки пустой ячейкой.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2012

Прямой ответ на ваш вопрос заключается в том, что вы не можете изменить формат уже записанной ячейки в Spreadsheet :: WriteExcel . Это запланированная функция для Excel :: Writer :: XLSX , но ее пока нет.

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

Или вы можете включить compatibilityblilty_mode () и перезаписать последнюю строку новыми отформатированными данными. Обратите внимание, что этот подход не рекомендуется без compatibility_mode (), так как Excel будет жаловаться на дубликаты или отсутствующие данные в файле.

В качестве альтернативы, установка формата строки, как указано @bvr, может работать для вас.

1 голос
/ 19 февраля 2012

Вы можете установить формат для любой строки с помощью метода set_row без изменения данных.

1 голос
/ 19 февраля 2012

Если ваши данные не слишком велики для памяти, вы можете сначала поместить данные таблицы в массив, а затем перебрать массив для вывода. Для начала у вас будет доступ к любому элементу массива, поэтому вы будете знать, какой будет последняя строка и какие данные будут в ней.

...