PhpSpreadsheet: распределить строку по ячейкам

140
21 апреля 2022, 05:40

Есть excel таблица и некоторая строка, нужно определить поместится ли она в первую ячейку (верхняя желтая) и если нет, то разбить ее по строчкам ниже. Таких строчек и ячеек несколько. Учитывая, что ширина символов разная, вопрос - как это можно реализовать?

Answer 1

Пришлось прибегнуть к костылю, но все же кое-как удалось сделать задуманное. Для определения ширины текста я использовал функцию imagettfbbox со шрифтом и размером ячейки. Для каждой такой ячейки определил в константах ее размер в пикселях (пришлось прогонять рандомный текст, который полностью заполняет ячейку через функцию выше). Далее сравниваю ширину текста с константой и если она больше, то дроблю текст до тех пор, пока ширина не станет меньше. Далее вписываю текст в ячейку и проворачиваю то же самое с оставшимся текстом. Вроде работает.

for ($i = 0; $i <= count($cell); $i++) {
    $stringPixelWidth = imagettfbbox(11, 0, $this->getParameter('kernel.project_dir') . self::FONT_FILE, $neededString)[2];
    if ($i < count($cell) && $stringPixelWidth > $cell[$i]['width']) {
        $words = explode(" ", $neededString);
        $lastWords = [];
        do {
            $lastWord = array_pop($words);
            array_unshift($lastWords, $lastWord);
            $stringPixelWidth = imagettfbbox(11, 0, $this->getParameter('kernel.project_dir') . self::FONT_FILE, implode(" ", $words))[2];
        } while ($stringPixelWidth > $cell[$i]['width']);
        $clonedActSheet->setCellValue($cell[$i]['cell'], implode(" ", $words));
        $neededString = implode(" ", $lastWords);
    } else {
        $clonedActSheet->setCellValue($cell[$i]['cell'], $neededString);
        break;
    }
}
READ ALSO
Проблема с кукой JSESSIONID при повторном запросе

Проблема с кукой JSESSIONID при повторном запросе

Кидаю гет запрос, чтобы установить новый сеанс и записать куки в файл

103
Как работает такое выражение php

Как работает такое выражение php

Подскажите как работает такая строка: $app = require('/lib/base

223
Как сохранять данные, введённые пользователем в input-форму на сайте?

Как сохранять данные, введённые пользователем в input-форму на сайте?

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

91
Цикл While при обработке данных в БД

Цикл While при обработке данных в БД

Я беру из базы данных строки соответствующие определенному Sale_id, в которых есть sum и высчитываю определенные процент из этих sum, по следующему...

177