Установка ширины столбца с PHPExcel не работает

Я пытаюсь отформатировать ширину ячеек документа, который я создаю с помощью PHPExcel, но когда я использую метод getColumnDimension('A')->setWidth(7), он не создается точно в сгенерированном файле xlsx.

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

Например:

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth('7');

в конечном итоге даст мне ширину столбца 6,17 вместо 7. Я уже пробовал использовать как строки, так и значения int, ничего не меняется. Есть идеи?


person Ethan    schedule 04.01.2013    source источник


Ответы (4)


Это связано с тем, что MS Excel сам подстраивает фигуру под свои собственные внутренние единицы: в документации разработчика есть целый раздел (раздел 4.6.28, озаглавленный «Установка ширины столбца»), который объясняет это.

Цитата из боковой панели в этом разделе:

Мера ширины столбца в PHPExcel не совсем соответствует той мере, к которой вы, возможно, привыкли в Microsoft Office Excel. В Excel сложно работать с шириной столбца, и для ширины столбца существует несколько показателей.

  1. Внутренняя ширина в символьных единицах (например, 8,43, это, вероятно, то, с чем вы знакомы в Excel)
  2. Полная ширина в пикселях (например, 64 пикселя)
  3. Полная ширина в символьных единицах (например, 9.140625, значение -1 указывает на неустановленную ширину)

PHPExcel всегда работает с 3) «Полной шириной в символьных единицах», что на самом деле является единственным значением, которое хранится в любом файле Excel, поэтому является наиболее надежной мерой. К сожалению, Microsoft Office Excel не предоставляет вам эту меру. Вместо этого показатели 1) и 2) вычисляются приложением при открытии файла, и эти значения представлены в различных диалоговых окнах и подсказках.

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

Если у вас есть файл Excel и вам нужно знать ширину столбцов в мере 3), вы можете прочитать файл Excel с помощью PHPExcel и вывести полученные значения.

(выделено мной жирным шрифтом)

person Mark Baker    schedule 04.01.2013

Добавьте 0,71 к значению ширины ячейки Excel и присвойте это значение

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);

например: Ширина столбца = 3,71 (значение Excel)

дать ширину столбца = 4,42

даст выходной файл с той же шириной ячейки.

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(4.42);
person King Alawaka    schedule 08.02.2015
comment
Также перед установкой вам необходимо отключить автоматический размер $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(false); - person Ajay Patidar; 29.06.2018

Прежде чем установить ширину любого столбца, сначала вам нужно отключить автоматический размер

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(false);

После этого нужно установить ширину

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(40);

Расчет ширины, который я нашел в MS Excel: MS Excel минус 0,71 от нашего определенного размера. Пример: Когда вы определяете ширину 40 в коде, MS Excel устанавливает ширину 39,29. Таким образом, хороший способ указать точный требуемый размер любого столбца, сначала вы устанавливаете требуемую ширину в MS Excel, затем добавляете 0,71 к ней и устанавливаете в своем коде.

После установки ширины вы снова можете включить автоматический размер.

person Ajay Patidar    schedule 29.06.2018

попробуйте это: - добавьте строку ниже перед установкой ширины: -

$objPHPExcel->setActiveSheetIndex(0);
person Tarika    schedule 04.01.2013