Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Phpexcel перенос строки в ячейке

Чтение excel на PHP — основные методы класса PHPExcel

С помощью PHPExcel можно производить чтение и запись информации в файлы, форматировать их содержимое,
выполнять операции с формулами, стилями и т.д.

PHPExcel – библиотека, предназначенная для обработки данных формата MS Excel. С её помощью можно производить чтение и запись информации в файлы, форматировать их содержимое, выполнять операции с формулами, стилями и т.д.
Для работы PHPExcel требуется версия PHP 5.2 или выше, а так же наличие подключенных расширений ZIP, XML и GD2.
Примечание: расширение php_zip нужно только при использовании классов PHPExcel_Reader_Excel2007, PHPExcel_Writer_Excel2007 и PHPExcel_Reader_OOCalc. То есть если вы хотите использовать PHPExcel для полноценной работы с файлами форматов .xlsx или .ods, то вам потребуется zip-расширение.

Возможности библиотеки PHPExcel:

1. PHPExcel может читать различные форматы файлов электронных таблиц:

2. Создание и обработка документов средствами PHP

Установка PHPExcel:
1) Скачать библиотеку с официального сайта http://phpexcel.codeplex.com/
2) В скачанном архиве, из папки classes скопировать содержимое в корень сайта

Состав Архива:

Пример чтения Excel файла при помощи класса PHPExcel

Для чтения данных с Excel файла необходимо подключить файл библиотеки PHPExcel и используется метод load() класса PHPExcel_IOFactory. Этот метод собирает данные всех со всех листов текущего документа:

Далее формируем массив из всех листов Excel файла с помощью цикла:

Вывод сформированного массива в виде HTML таблиц(ы) :

Основные методы и свойства класса PHPExcel

Класс PHPExcel – это ядро PHPExcel. Он содержит ссылки на содержащиеся листы, параметры безопасности документов и мета-данные документов. Помимо вышеизложенного, этот класс включает в себя множество других полезных методов для обработки получаемых данных. Некоторые из них будут описаны ниже.

getSheetCount() – возвратит количество листов в книге;

getSheetNames() – возвращает список всех листов в рабочей книге, индексируя их в порядке, в котором их «вкладки» появляются при открытии в MS Excel (или других программах для обработки электронных таблиц);

getSheet(N) – используется для доступа к листу по индексу. Индекс позиции (N) представляет собой порядок, в котором отображаются вкладки листов, когда книга открыта в MS Excel (или других программах для обработки электронных таблиц);

getSheetByName(list_name) – метод используется для доступа к листу по его имени (list_name);

getActiveSheet() – этот метод позволяет получить доступ к активному листу документа напрямую. Активным листом является тот, который будет активен, когда откроется книга в MS Excel (или другой соответствующей программе электронных таблиц);

setActiveSheetIndex() и setActiveSheetIndexByName() – с помощью этих методов можно назначить лист, который будет активным по его индексу или имени.

Получение значения ячейки по координатам

Для получения значения ячейки, сперва должна быть найдена ячейка путем использования метода getCell. Значение ячейки может быть получено с помощью следующей команды:

В случае если вам нужны подсчитанные значения ячейки, вместо getValue(), используйте метод getCalculatedValue():

Получение значения ячейки по строкам и столбцам

Для получения значения ячейки, в листе сначала должна быть найдена ячейка с использованием метода getCellByColumnAndRow. Значение ячейки может быть получено с помощью следующей команды:

Заключение

В этой статье были рассмотрены основные возможности библиотеки PHPExcel в области чтения excel файлов. Помимо всего выше изложенного, есть возможность более гибко использовать эту библиотеку для работы с различными параметрами таблицы. По этим вопросам рекомендуется обращаться к документации. Библиотека PHPExcel так же адаптирована для работы с другими типами файлов, таких как Excel (BIFF). XLS, Excel 2007 (OfficeOpenXML). XLSX, CSV, Libre / OpenOffice Calc. ODS, Gnumeric, PDF и HTML.

Читать еще:  Что означает ссылка в excel
Лучший способ сказать автору «СПАСИБО» рассказать друзьям или поделиться ссылкой!
Другие статьи:

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

Всплывающая фиксированная навигация для сайта jQuery, CSS — инструкция, примеры

DateTimePicker – удобный и легкий в использовании плагин для быстрой подстановки даты и времени в поля ввода.

Плагин DateTimePicker для сайта — инструкция, настройка, инициализация

В этой статье будет рассмотрено решение этой задачи с использованием плагина Masked Input, который отличается простотой и удобством в использовании.

Плагин маски ввода для input — jquery maskedinput — инструкция, настройка, инициализация

Метод, который мы рассмотрим ниже, позволяет размещать информацию на страницах любого пользователя или группы,к которому имеет доступ авторизованный пользователь.

Публикация на стене Вконтакте средствами API — кросспостинг

Текстовый редактор TinyMCE в визуальном режиме при стандартной конфигурации обрезает некоторый теги и свойства.

TinyMCE вырезает теги — исключения для тегов TinyMCE

Научимся вставлять теги в выделенный фрагмент текста, вставлять теги на место селектора в тексте и получать средствами JS HTML код отредактированного текста и текст без HTML сущностей.

Cвойства и методы TinyMCE — вставка тегов, вывод значений

Как вы уже поняли, редактор является платформенным Javascript редактором HTML кода, т.е. WYSIWYG редактором для сайтов и веб приложений. Разработчиком этого полезного продукта является компания Moxiecode Systems AB.

Установка и настройка TinyMCE — инициализация и параметры

В статье мы: познакомимся с каруселью; научимся интегрировать ее на свой сайт; познакомимся с основными параметрами инициализации;рассмотрим самые популярные свойства и методы классов jCarousel

Установка и настройка jCarousel — параметры и методы

Любой backend программист php сталкивается с задачей автоматизации почтовой рассылки на веб сайтах и многие,кто сталкивался с данной задачей впервые, вставали перед ключевым вопросом: «Писать или не писать smtp клиент с нуля?».

PHP библиотека PHPExcel для работы с Excel

Для работы с Excel использовал библиотеку PHPExcel. Установка простейшая – кладем папку Classes в нужную папку на сервере, указываем корректные пути в include/require.

Примеры кода по чтению/генерации файлов Excel можно посмотреть на github странице библиотеки.

Красивости

и этим не ограничивается функционал, это лишь то, что использовал:

  • mergeCells(“cell_range”) – Объединение указанных ячеек в одну. Данные должны лежать в первой ячейке, иначе они теряются.
  • setSize(16) – Делаем размер шрифта 16 для указанных ячеек.
  • setBold(true) – Делаем текст “жирным”
  • setWrapText(true) – Делаем перенос слов по умолчанию для всех ячеек
  • setAutoFilter – Включить фильтр по умолчанию
  • freezePane – Закрепить какие либо строки, например первую
  • borders – делается через создание стиля, а потом его применение на указанный диапазон ячеек
  • color – Аналогично с помощью стилей меняем цвет шрифта (Font)
  • setARGB – Изменить цвет ячейки, например
    • всей первой строки
    • конкретной ячейки (делал так цвет был переменным и задавался на основе данных – формировался разноцветный показательный Excel)
    • диапазона ячеек по диагонали
Читать еще:  Поиск по нескольким условиям в excel
ЧТЕНИЕ

Код для чтения (два столбца):

Редактирование

Открываем файл test.xlsx, на его основе создаем новый new.xlsx с измененными парой ячеек.

ГЕНЕРАЦИЯ

Пример генерации на основе результата MySQL (не тестил, использовал универсальную функцию ниже).

Если нужно протестить базовую работу генерации на основе двумерного массива

Пример генерации xls из двумерного массива с настройками

  • имени (определяется на основе значения в переменной $_POST[‘filename’]),
  • ширины столбца (на основе $_POST[‘excelSettings’]),
  • bold первой строки (setBold),
  • переноса слов (setWrapText).

Пример вызова и код по генерации кнопки, добавлению к названию файла даты/времени (формат 20170123_003800_Название.xlsx) и переходу на страницу генерации xls.

Вызов функции (про функцию iconv_for_xls ниже):

Особенности

Мусор

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

Например, возможны кракозябры при генерации файла больше 20-40 строк, если оставить включенным debug типа print_r($_POST); (почему не воспроизводиться при генерации мелких файлов – это вопрос :)).

Аналогично, будет выдавать ошибку:

  1. Если в конце кода php нет “exit;”
  2. Если перед генерацией файла нет очистки буфера вывода через “ob_end_clean();”
  3. Если используется генерация xlsx (Excel2007), но не установлены xml и xmlwriter модули PHP. Так же может выдаваться ошибка “Fatal error: Class ‘XMLWriter’ not found in /

/XMLWriter.php on line 37” т.к. библиотека PHPExcel использует наследование класса от XMLWriter (“class PHPExcel_Shared_XMLWriter extends XMLWriter”), т.е. требует установленного модуля xmlwriter. Для “нормальных” дистрибутивов это делается простым sudo apt-get/yum install php-xmlwriter (или php5-xml) и перезагрузкой apache, для gentoo это делается через пересборку всего php с новым модулем.

Отправка array на другую страницу

Чтобы функция по генерации xlsx была универсальной, сделал отдельную страницу по генерации, но на эту страницу потребовалось передать двумерный массив. В интернете гуляет два варианта решения: сохранить массив в сессии/куках, передать его через json (лучше) или serialize (хуже).

Через сессии все передавалось, только значение почему то не апдейтилось корректно. Сходу не разобрался в причинах, использовал сначала serialize (полный пример см. в function create_xls), но потом мигрировал на json из-за периодических проблем со спец. символами serialize.

Кодировка

Если на сайте кодировка cp-1251, то при генерации обязательно нужно использовать iconv в utf-8. В противном случае вместо русских символов в ячейке будет бред (например, “ИСТИНА”).

Phpexcel перенос строки в ячейке

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9985
поощрить/наказать

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

Пытался только делать strip_tags, но все равно квадратики остаются, на месте тех переносов, где пользователь нажал на энтер.

Хотел эти переносы на теги заменить(nl2br) и потом эти теги(
) заменить на правильный перенос строки, пытался на rn и на nr и на r и на n, все равно квадраты остаются.

Так как правильно делать перенос строки в Excel файле, на какую комбинацию заменять?

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268
поощрить/наказать
Location: Питер

Николай Булыгин
Excel использует n (0x0A, &#10) в качестве «мягкого» перевода строки.
В редакторе он вводится как Shift+Enter.

Посмотрите, что именно библиотека записывает в файл на место переноса строки.
Возможно, что там идёт автодополнение переносов или ещё что-то.

WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268
поощрить/наказать
Location: Питер

chr(0x0A) — пишу такой перенос(правильно?), вместо переноса встает квадратик, ставлю в ячейку курсор, перехожу на другую ячейку — квадратик преобразуется в перенос.

Полезу сейчас в библиотеку, гляну, может врайтер врет при записи, или может это OLE PEAR-овский глючит.

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

Небольшой скриншот приложил к теме, может кто сталкивался с такой проблемой?

WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268
поощрить/наказать
Location: Питер

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

WingedFox
Если просто тыкнуть на ячейку, а потом энтер — ничего не происходит.

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

XLS Файл(если нужно) приложен.

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268
поощрить/наказать
Location: Питер

Николай Булыгин
Почти.

Посмотрите, что эти библиотека записывает в заголовок ячейки.
Вот что получилось при редактировании 2 ячеек (заметьте — содержимое ячейки не изменилось, изменился тип):

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268
поощрить/наказать
Location: Питер

Николай Булыгин
Ээээ. Сложно ответить просто.

В двух словах — это бинарное сравнение файлов. Всё различие заключается в том, что в test(4) 2 ячейки сохранены с переводом строки.
Берите HEX редактор и смотрите что тама внутри.

Заодно, копайте класс в том месте, где генерируются заголовки ячеек.

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

WingedFox
Профессионал

Joined: 29 Apr 2003
Posts: 4064
Карма: 268
поощрить/наказать
Location: Питер

Николай Булыгин
Если не секрет, то каким именно методом?

Кстати, Вы не пробовали связаться с разработчиками, чтобы они поправили этот баг? 8*)

Николай Булыгин
Участник форума

Joined: 20 Nov 2004
Posts: 76
Карма: 0
поощрить/наказать
Location: Samara

1 способ: Записывать в две разные ячейки, друг под другом.
2 способ: Делать форматирование setTextWrap(переносить по словам) и задавать размер ячейки в одно слово.
3 способ: Еще более сомнительный, запускать VBScript при отрытии книги, который бы пробежался по ячейкам и исправил все кривые переносы.

В общем 1 способ плох тем что не будет работать если нужно объединение ячеек, второй способ перестает работать если ресайзить ячейки.

Попробую связаться с разработчиками, но не знаю в какой срок они исправят этот баг, а мне уже скоро сдавать работу.

Заметил, что файлы созданные через этот класс имеют формат Excel 95.

Ссылка на основную публикацию
Adblock
detector