проблемы с размером столбца phpExcel


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

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

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

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

1 7

1 ответ:

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

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

Вы можете изменить метод расчета, используя:

PHPExcel_Shared_Font::setAutoSizeMethod($method);

Перед сохранением, где $method-единица следующим образом:

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

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