2012-04-01 4 views
7

Я хочу, чтобы в книге, созданной phpExcel, не было отключено никакое значение. Для этого я звонюПроблемы с размером столбца phpExcel

$oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true); 

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

Кто-нибудь знает, как убедиться, что каждый столбец в выведенной рабочей книге excel имеет размер в соответствии с его содержимым?

ответ

12

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

Будьте осторожны, это все еще дорого стоит, поскольку PHPExcel затем просматривает каждую ячейку в этом столбце, обрабатывая ширину, необходимую на основе содержимого этой ячейки, принимая во внимание вычисление и форматирование формулы и используя максимальный размер любая ячейка в этом столбце. Даже тогда это не идеальное решение: поведение по умолчанию заключается в оценке, подсчете количества отображаемых символов и использовании универсального множителя на основе шрифта (Arial, Verdana of Calibri) и небольшого количества дополнений. Для более точного вычисления вы можете изменить метод, используемый для вычисления, а затем код использует GD для построения ограничивающего прямоугольника ttf и основывает размер ячейки на размерах этого поля. Это более точный расчет, но намного медленнее.

Вы можете изменить метод расчета с помощью:

PHPExcel_Shared_Font::setAutoSizeMethod($method); 

перед сохранением, где $ метод является одним из следующих:

PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX 
PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT 

Это еще не является идеальным решением, но это лучший расчет, который может сделать PHPExcel.

Альтернативой является вызов метода calcColumnWidths() рабочего листа непосредственно перед сохранением ..., а затем пройти измерение каждого столбца, увеличив значение на 5%, чтобы убедиться, что весь столбец подходит, прежде чем сохранять.

Смежные вопросы