Я хочу убедиться, что в рабочей книге, созданной phpExcel, нет значения. Для этого я звоню
$oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true);
каждый раз, когда я пишу ячейку. Это, похоже, не работает: многие столбцы в конечном итоге очень маленькие.
Кто-нибудь знает, как убедиться, что каждый столбец в выведенной книге Excel стоит в соответствии с его содержанием?
Не делайте этого каждый раз, когда вы пишете ячейку … это лишние накладные расходы. Сделайте это только один раз для каждого столбца.
Будьте осторожны, это все еще дорого при сохранении, потому что 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.
Альтернативой является вызов метода calcColumnWidths () рабочего листа непосредственно перед сохранением … и затем пройдите измерение каждого столбца, увеличив значение на 5%, чтобы убедиться, что весь столбец подходит, прежде чем сохранять.