ob_start();
echo 'Désçàui';
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-type: application/x-msexcel; charset=utf-8");
header("Content-Disposition: attachment; filename=Test.xls");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
ob_end_flush();
What I’m getting in the excel file is Désçà ui
However, I do get Désçàui when I try
ob_start();
echo 'Désçàui';
header("Content-Type: text/html; charset=utf-8");
ob_end_flush();
Any help experts?
PS. The file is saved in DW with Title/Encoding Unicode(Utf-8).
pnuts
58k11 gold badges85 silver badges137 bronze badges
asked Mar 20, 2011 at 11:21
3
Source http://www.mwasif.com/2007/5/download-data-csv-using-php/
Solution worked for me
Danish Zahur said,
October 7, 2009 @ 7:23 pm
If your contents are in UTF-8 format, then no need to convert encoding. Just start your file/output stream with UTF-8 BOM after headers.
echo pack("CCC",0xef,0xbb,0xbf);
And header should contain encoding UTF-8
header( "Content-type: application/vnd.ms-excel; charset=UTF-8" );
It will work like charm because Excel will recognize file charset with BOM bytes.
nobug
1721 silver badge7 bronze badges
answered May 12, 2011 at 10:43
AsifAsif
2812 silver badges2 bronze badges
3
I’m not sure, but it may be that excel can not handle utf8(may depend on the version). But it can handle utf16, so try converting the charset.
This works for me(in excel2002):
echo mb_convert_encoding('Désçàui','utf-16','utf-8');
answered Mar 20, 2011 at 11:48
Dr.MolleDr.Molle
116k16 gold badges194 silver badges201 bronze badges
2
I don’t know how you’re generating the excel file. But, if you’re doing it from an HTML output, you can just add the following at the begining:
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
Regards
answered Apr 17, 2012 at 23:10
gonetilgonetil
2012 silver badges2 bronze badges
0
This UTF-8 BOM line of code made my UTF-8 chars work fine:
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename='".$file_name."'");
header("Pragma: no-cache");
header("Expires: 0");
echo "xEFxBBxBF"; //UTF-8 BOM
echo $out;
answered Mar 28, 2014 at 14:25
1
Converting utf8 to html-entities worked quite nicely for me :
$str = 'utf-string ...';
if (mb_detect_encoding($str ) == 'UTF-8') {
$str = mb_convert_encoding($str , "HTML-ENTITIES", "UTF-8");
}
header('Content-type: application/x-msdownload; charset=utf-16');
header('Content-Disposition: attachment; filename=companies.xls');
header('Pragma: no-cache');
header('Expires: 0');
echo $str ;
answered Apr 22, 2013 at 10:54
TaherTaher
11.8k2 gold badges30 silver badges44 bronze badges
The content-type
headers are relevant for the browser only. They have no effect on downloaded files. Once the file is saved, it is up to the application to decide how it treats the data in the file.
The example you show is not a valid Excel file in the first place. When encountering what it must think is a broken file, Excel probably switches to some default processing that assumes windows-1252
or some other single-byte character set.
You would have to give Excel a proper file to open. Alternatively, it may be possible to use the old «Output HTML but save as XLS» trick and specify a UTF-8 encoding in that HTML file.
answered Mar 20, 2011 at 11:40
UnicronUnicron
7,2151 gold badge25 silver badges19 bronze badges
3
try this
<?php
header("Content-Type: application/vnd.ms-excel");
header('Content-Disposition: attachment; filename="sample.xls"');
echo "
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<html>
<head><meta http-equiv="Content-type" content="text/html;charset=utf-8" /></head>
<body>
";
echo "
<table>
<tr>
<th rowspan="2" nowrap="nowrap">เลขที่บัญชี</th>
<th rowspan="2" nowrap="nowrap">ชื่อ-สกุล ลูกค้า</th>
<th rowspan="2" nowrap="nowrap">OS/Balance</th>
<th rowspan="2" nowrap="nowrap">วันที่</th>
<th rowspan="2" nowrap="nowrap">เวลา</th>
<th rowspan="2" nowrap="nowrap">Action Code</th>
<th rowspan="2" nowrap="nowrap">Amount</th>
<th colspan="5" nowrap="nowrap">ผลการติดตาม</th>
</tr>
<tr>
<th nowrap="nowrap">ที่อยู่บ้าน</th>
<th nowrap="nowrap">เบอร์โทรบ้าน</th>
<th nowrap="nowrap">เบอร์โทรมือถือ</th>
<th nowrap="nowrap">ที่อยู่ที่ทำงาน</th>
<th nowrap="nowrap">เบอร์โทรที่ทำงาน</th>
</tr>
<tr>
<td>acc</td>
<td>name</td>
<td>balance</td>
<td>date</td>
<td>time</td>
<td>code</td>
<td>amount</td>
<td>h-addr</td>
<td>h-tel</td>
<td>cell</td>
<td>w-addr</td>
<td>w-tel</td>
</tr>
</table>
";
echo "</body></html>";
?>
answered Sep 13, 2014 at 11:13
1
Try this:
header('Content-Transfer-Encoding: binary');
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Disposition: attachment; filename = "Export '.date("Y-m-d").'.xls"');
header('Pragma: no-cache');
//these characters will make correct encoding to excel
echo chr(255).chr(254).iconv("UTF-8", "UTF-16LE//IGNORE", $out);
answered Dec 13, 2017 at 6:05
Если надо просто выгрузить некую таблицу с сайта как файл excel, то подойдет достаточно простой способ.
Основная идея — excel уже давно умеет сохранять свои документы как html. Ну и самое простое решение — сохраняем любой документ именно так, открываем в текстовом редакторе, смотрим что и как там написано, пытаемся воспроизвести.
Рассмотрим самый банальный пример: (запрос к базе данных не рассматривается… только та часть, которая выгрузит файл, понятный excel’ю.
1. Формируем заголовок:
/* // раскомментируйте строки ниже, если файл не будет загружаться header(«Content-Type: application/force-download»); header(«Content-Type: application/octet-stream»); header(«Content-Type: application/download»); */ //стандартный заголовок, которого обычно хватает header(‘Content-Type: application/vnd.ms-excel; charset=utf-8’); header(«Content-Disposition: attachment;filename=».date(«d-m-Y»).«-export.xls»); header(«Content-Transfer-Encoding: binary «); |
2. Теперь можно выводить ранее полученные данные, из MySQL, из файла, еще откуда — не важно. все на ваше усмотрения. Главное НЕ забыть сформировать стандартную HTML шапку под правильную кодировку (например utf-8) что бы в excel корректно отображалась кириллица. И не забываем про то, что кодировка файла скрипта также должна быть такой же.
echo ‘ <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> <html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en» lang=»en»> <head> <meta http-equiv=»content-type» content=»text/html; charset=utf-8″ /> <meta name=»author» content=»zabey» /> <title>Demo</title> </head> <body> ‘; |
3. И вот формирование самой таблицы, которая откроется в Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// заголовок таблицы echo ‘ <table border=»1″> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> ‘; while($row = $STH—>fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo ‘<tr> <td>’.$row[‘col1’].‘</td> <td>’.$row[‘col2’].‘</td> </tr>’; } echo ‘</table>’; echo ‘</body></html>’; // не забываем закрывать таблицу, боди и сам хтмл документ |
Код одним блоком внутри (далее).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// !заголовок /* // раскомментируйте строки ниже, если файл не будет загружаться header(«Content-Type: application/force-download»); header(«Content-Type: application/octet-stream»); header(«Content-Type: application/download»); */ //стандартный заголовок, которого обычно хватает header(‘Content-Type: application/vnd.ms-excel; charset=utf-8’); header(«Content-Disposition: attachment;filename=».date(«d-m-Y»).«-export.xls»); header(«Content-Transfer-Encoding: binary «); // !! Шапка хтмл echo ‘ <!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> <html xmlns=»http://www.w3.org/1999/xhtml» xml:lang=»en» lang=»en»> <head> <meta http-equiv=»content-type» content=»text/html; charset=utf-8″ /> <meta name=»author» content=»zabey» /> <title>Demo</title> </head> <body> ‘; // !!! Таблица с данными // заголовок таблицы echo ‘ <table border=»1″> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> ‘; while($row = $STH—>fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo ‘<tr> <td>’.$row[‘col1’].‘</td> <td>’.$row[‘col2’].‘</td> </tr>’; } echo ‘</table>’; echo ‘</body></html>’; // не забываем закрывать таблицу, боди и сам хтмл документ |
Загрузка…
Содержание
- php header excel и utf-8
- 8 ответов
- Решение работало для меня
- Изменение кодировки в Microsoft Excel
- Работа с кодировкой текста
- Способ 1: изменение кодировки с помощью Notepad++
- Способ 2: применение Мастера текстов
- Способ 3: сохранение файла в определенной кодировке
- php header excel and utf-8
- 8 Answers 8
- Solution worked for me
- Content type excel
- Установка типа mime для документа excel
- 7 Ответов
- Похожие вопросы:
- Загрузка файлов xls или xlsx с помощью codeigniter, ошибка типа mime
- 4 ответов
- PHP библиотека PHPExcel для работы с Excel
- What is MIME application/excel?
- application/excel
- What Are MIME Types?
- Why Do I Need MIME Types Like application/excel?
- What Are The Most Common Problems Associated With application/excel?
- How To Fix application/excel Issues
- Do I have the application/excel “player application” installed?
- Do I have broken application/excel file associations?
- phpexcel: писать данные в Excel с помощью PHP и читать из Excel
То, что я получаю в файле excel, DÃsçà ui
Тем не менее, я получаю Désçàui, когда я пытаюсь
Любые эксперты помощи?
PS. Файл сохраняется в DW с типом/кодировкой Unicode (Utf-8).
8 ответов
Я не уверен, но может быть, что excel не может обрабатывать utf8 (может зависеть от версии). Но он может работать с utf16, поэтому попробуйте преобразовать кодировку. Это работает для меня (в excel2002):
Решение работало для меня
Датский Захур сказал:
7 октября 2009 года, 7:23 вечера
Если ваше содержимое находится в формате UTF-8, тогда нет необходимости конвертировать кодировку. Просто запустите свой файловый/выходной поток с помощью спецификации UTF-8 после заголовков.
И заголовок должен содержать кодировку UTF-8
header( «Content-type: application/vnd.ms-excel; charset=UTF-8» );
Он будет работать как шарм, потому что Excel распознает кодировку файлов с байтами спецификации.
Я не знаю, как вы создаете файл excel. Но, если вы делаете это из вывода HTML, вы можете просто добавить следующее в начале:
Эта строка кода спецификации UTF-8 сделала мои символы UTF-8 прекрасными:
Преобразование utf8 в html-объекты работало для меня довольно хорошо:
Заголовки content-type относятся только к браузеру. Они не влияют на загруженные файлы. После сохранения файла приложение может решить, как он обрабатывает данные в файле.
Приведенный вами пример не является действительным файлом Excel в первую очередь. Когда он сталкивается с тем, что он должен считать сломанным файлом, Excel, вероятно, переключается на некоторую обработку по умолчанию, которая предполагает windows-1252 или какой-то другой однобайтовый набор символов.
Вам нужно будет предоставить Excel подходящий файл для открытия. В качестве альтернативы можно использовать старый трюк «Выход HTML, но сохранить как XLS» и указать кодировку UTF-8 в этом HTML файле.
Источник
Изменение кодировки в Microsoft Excel
С потребностью менять кодировку текста часто сталкиваются пользователи, работающие браузерах, текстовых редакторах и процессорах. Тем не менее, и при работе в табличном процессоре Excel такая необходимость тоже может возникнуть, ведь эта программа обрабатывает не только цифры, но и текст. Давайте разберемся, как изменить кодировку в Экселе.
Работа с кодировкой текста
Кодировка текста – эта набор электронных цифровых выражений, которые преобразуются в понятные для пользователя символы. Существует много видов кодировки, у каждого из которых имеются свои правила и язык. Умение программы распознавать конкретный язык и переводить его на понятные для обычного человека знаки (буквы, цифры, другие символы) определяет, сможет ли приложение работать с конкретным текстом или нет. Среди популярных текстовых кодировок следует выделить такие:
Последнее наименование является самым распространенным среди кодировок в мире, так как считается своего рода универсальным стандартом.
Чаще всего, программа сама распознаёт кодировку и автоматически переключается на неё, но в отдельных случаях пользователю нужно указать приложению её вид. Только тогда оно сможет корректно работать с кодированными символами.
Наибольшее количество проблем с расшифровкой кодировки у программы Excel встречается при попытке открытия файлов CSV или экспорте файлов txt. Часто, вместо обычных букв при открытии этих файлов через Эксель, мы можем наблюдать непонятные символы, так называемые «кракозябры». В этих случаях пользователю нужно совершить определенные манипуляции для того, чтобы программа начала корректно отображать данные. Существует несколько способов решения данной проблемы.
Способ 1: изменение кодировки с помощью Notepad++
К сожалению, полноценного инструмента, который позволял бы быстро изменять кодировку в любом типе текстов у Эксель нет. Поэтому приходится в этих целях использовать многошаговые решения или прибегать к помощи сторонних приложений. Одним из самых надежных способов является использование текстового редактора Notepad++.
- Запускаем приложение Notepad++. Кликаем по пункту «Файл». Из открывшегося списка выбираем пункт «Открыть». Как альтернативный вариант, можно набрать на клавиатуре сочетание клавиш Ctrl+O.
- Запускается окно открытия файла. Переходим в директорию, где расположен документ, который некорректно отобразился в Экселе. Выделяем его и жмем на кнопку «Открыть» в нижней части окна.
Несмотря на то, что данный способ основан на использовании стороннего программного обеспечения, он является одним из самых простых вариантов для перекодировки содержимого файлов под Эксель.
Способ 2: применение Мастера текстов
Кроме того, совершить преобразование можно и с помощью встроенных инструментов программы, а именно Мастера текстов. Как ни странно, использование данного инструмента несколько сложнее, чем применение сторонней программы, описанной в предыдущем методе.
- Запускаем программу Excel. Нужно активировать именно само приложение, а не открыть с его помощью документ. То есть, перед вами должен предстать чистый лист. Переходим во вкладку «Данные». Кликаем на кнопку на ленте «Из текста», размещенную в блоке инструментов «Получение внешних данных».
- Открывается окно импорта текстового файла. В нем поддерживается открытие следующих форматов:
- TXT;
- CSV;
- PRN.
Переходим в директорию размещения импортируемого файла, выделяем его и кликаем по кнопке «Импорт».
Открывается окно Мастера текстов. Как видим, в поле предварительного просмотра символы отображаются некорректно. В поле «Формат файла» раскрываем выпадающий список и меняем в нем кодировку на «Юникод (UTF-8)».
Если данные отображаются все равно некорректно, то пытаемся экспериментировать с применением других кодировок, пока текст в поле для предпросмотра не станет читаемым. После того, как результат удовлетворит вас, жмите на кнопку «Далее».
- Общий;
- Текстовый;
- Дата;
- Пропустить столбец.
Тут настройки следует выставить, учитывая характер обрабатываемого контента. После этого жмем на кнопку «Готово».
Способ 3: сохранение файла в определенной кодировке
Бывает и обратная ситуация, когда файл нужно не открыть с корректным отображением данных, а сохранить в установленной кодировке. В Экселе можно выполнить и эту задачу.
- Переходим во вкладку «Файл». Кликаем по пункту «Сохранить как».
- Открывается окно сохранения документа. С помощью интерфейса Проводника определяем директорию, где файл будет храниться. Затем выставляем тип файла, если хотим сохранить книгу в формате отличном от стандартного формата Excel (xlsx). Потом кликаем по параметру «Сервис» и в открывшемся списке выбираем пункт «Параметры веб-документа».
- В открывшемся окне переходим во вкладку «Кодировка». В поле «Сохранить документ как» открываем выпадающий список и устанавливаем из перечня тот тип кодировки, который считаем нужным. После этого жмем на кнопку «OK».
- Возвращаемся в окно «Сохранения документа» и тут жмем на кнопку «Сохранить».
Документ сохранится на жестком диске или съемном носителе в той кодировке, которую вы определили сами. Но нужно учесть, что теперь всегда документы, сохраненные в Excel, будут сохраняться в данной кодировке. Для того, чтобы изменить это, придется опять заходить в окно «Параметры веб-документа» и менять настройки.
Существует и другой путь к изменению настроек кодировки сохраненного текста.
- Находясь во вкладке «Файл», кликаем по пункту «Параметры».
- Открывается окно параметров Эксель. Выбираем подпункт «Дополнительно» из перечня расположенного в левой части окна. Центральную часть окна прокручиваем вниз до блока настроек «Общие». Тут кликаем по кнопке «Параметры веб-страницы».
- Открывается уже знакомое нам окно «Параметры веб-документа», где мы проделываем все те же действия, о которых говорили ранее.
Теперь любой документ, сохраненный в Excel, будет иметь именно ту кодировку, которая была вами установлена.
Как видим, у Эксель нет инструмента, который позволил бы быстро и удобно конвертировать текст из одной кодировки в другую. Мастер текста имеет слишком громоздкий функционал и обладает множеством не нужных для подобной процедуры возможностей. Используя его, вам придется проходить несколько шагов, которые непосредственно на данный процесс не влияют, а служат для других целей. Даже конвертация через сторонний текстовый редактор Notepad++ в этом случае выглядит несколько проще. Сохранение файлов в заданной кодировке в приложении Excel тоже усложнено тем фактом, что каждый раз при желании сменить данный параметр, вам придется изменять глобальные настройки программы.
Источник
php header excel and utf-8
What I’m getting in the excel file is Désçà ui
However, I do get Désçàui when I try
Any help experts?
PS. The file is saved in DW with Title/Encoding Unicode(Utf-8).
8 Answers 8
Solution worked for me
Danish Zahur said,
October 7, 2009 @ 7:23 pm
If your contents are in UTF-8 format, then no need to convert encoding. Just start your file/output stream with UTF-8 BOM after headers.
And header should contain encoding UTF-8
header( «Content-type: application/vnd.ms-excel; charset=UTF-8» );
It will work like charm because Excel will recognize file charset with BOM bytes.
I’m not sure, but it may be that excel can not handle utf8(may depend on the version). But it can handle utf16, so try converting the charset. This works for me(in excel2002):
I don’t know how you’re generating the excel file. But, if you’re doing it from an HTML output, you can just add the following at the begining:
This UTF-8 BOM line of code made my UTF-8 chars work fine:
Converting utf8 to html-entities worked quite nicely for me :
The content-type headers are relevant for the browser only. They have no effect on downloaded files. Once the file is saved, it is up to the application to decide how it treats the data in the file.
The example you show is not a valid Excel file in the first place. When encountering what it must think is a broken file, Excel probably switches to some default processing that assumes windows-1252 or some other single-byte character set.
You would have to give Excel a proper file to open. Alternatively, it may be possible to use the old «Output HTML but save as XLS» trick and specify a UTF-8 encoding in that HTML file.
Источник
Content type excel
Установка типа mime для документа excel
MS Excel имеет следующие наблюдаемые типы MIME:
- application/vnd.ms-excel (официальный)
- application/msexcel
- application/x-msexcel
- application/x-ms-excel
- application/x-excel
- application/x-dos_ms_excel
- application/xls
- application/x-xls
- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (XLSX-файл)
Есть ли какой-то один тип, который будет работать для всех версий? Если нет, то нужно ли устанавливать response.setContentType() для каждого из этих типов mime отдельно?
Кроме того, мы используем потоковую передачу файлов в нашем приложении для отображения документа (а не только excel — любого типа документа). При этом, как мы можем сохранить имя файла, если пользователь решает сохранить файл — в настоящее время имя сервлета, который отображает файл, отображается как имя по умолчанию.
7 Ответов
Я считаю, что стандартный тип MIME для файлов Excel — это application/vnd.ms-excel .
Что касается названия документа, то в ответе следует задать следующий заголовок:
Здесь я вижу просыпающуюся старую нить, но я почувствовал желание добавить формат «new» .xlsx.
Согласно http://filext.com/file-extension/XLSX расширение для .xlsx равно application/vnd.openxmlformats-officedocument.spreadsheetml.sheet . Это может быть хорошей идеей, чтобы включить его при проверке на наличие типов mime!
Вы всегда должны использовать тип ниже MIME, если вы хотите обслуживать файл excel в формате xlsx
Я устанавливал тип MIME из кода .NET, как показано ниже —
Мое приложение генерирует excel, используя OpenXML SDK. Этот тип MIME работал —
Для .xls используйте следующий тип содержимого
Для версии Excel 2007 и выше формат файлов .xlsx
Я использую EPPlus для создания файла .xlsx (на основе формата OpenXML) excel. Для отправки этого файла excel в качестве вложения в email я использую следующий тип MIME, и он отлично работает с EPPlus сгенерированным файлом и правильно открывается в MS-outlook mail client preview.
Для тех, кто все еще спотыкается с этим после использования всех возможных типов MIME, перечисленных в вопросе:
Я обнаружил, что iMacs, как правило, также бросает MIME тип «text/xls» для файлов XLS Excel, надеюсь, это поможет.
Похожие вопросы:
Таким образом, в CouchDB вы можете предположительно изменить типы mime. В футоне вам просто нужно пойти и отредактировать источник документа и изменить поле content_type на вложения в поле.
Невозможно получить тип MIME из bytearray-возвращает NULL для любого документа типа MIME. byte[] res.
Как я могу установить правильный тип MIME, который работает с excel 2007? прямо сейчас у меня есть это: header(Content-type: application/vnd.ms-excel; charset=UTF-8); мой браузер постоянно говорит.
Проверка типа mime в php довольно проста, но, насколько я знаю, mime можно подделать. Злоумышленник может загрузить сценарий php, например, с типом jpeg mime. Одна вещь, которая приходит на ум, это.
Я пытаюсь развернуть сайт Jekyll. Вот вам и поток: Содержимое добавляется и перемещается в BitBucket BitBucket трубопровод строит сайт Находит все файлы HTML в _site/ и удаляет их расширение.
Кроме LSCopyDefaultApplicationURLForURL существует LSCopyApplicationURLsForURL , чтобы получить все приложения, а не только один по умолчанию. Если вы просто хотите получить приложения по умолчанию.
Я хочу написать excel и отправить его пользователю в качестве ответа в приложении с помощью Play framework 1.x . Но я не уверен, как установить ответ content-type/MIME-type для возврата doc или.
Для веб-приложения, которое позволяет просматривать документы в браузере, я хотел бы проверить, поддерживает ли браузер пользователя предварительный просмотр текущего типа mime документа. Существует.
Существует ли официальный URN для типа MIME? Mozilla Firefox и другие приложения используют обозначения типа urn:mimetype:text/plain или urn:mimetype:handler:text/plain . Есть две проблемы с этим.
Загрузка файлов xls или xlsx с помощью codeigniter, ошибка типа mime
Ну, я считаю, что это не проблема Codeigniter per se как это mime-type.
Я пытаюсь загрузить файл, файл xls (или xlsx) и MIME-тип браузера, а отчет php —приложения/октет-поток вместо приложение / excel, application / vnd.ms-excel или приложения/msexcel для файла xls. Конечно, плагин загрузки codeigniter сообщит об ошибке (недопустимый тип файла), поскольку он пытается сопоставить расширение файла с типом mime.
странная (est) вещь может заключаться в том, что один и тот же код работал в течение нескольких месяцев и теперь перестал работать с последними Chrome (16.0.912.77), Firefox (10.0) и IE9.
У кого-нибудь была такая же (или похожая) проблема и желание поделиться решением?
большое спасибо. PS: Я не буду предоставлять код, поскольку это не совсем код, но при необходимости я загружу некоторые фрагменты.
редактировать
Это может быть актуально: ошибка не происходит с теми же браузерами в аналогичной конфигурации, но с MS Office вместо Libre Office (на моем ПК). Это также не происходит в системе GNU / Linux + Libre Office. Итак, может ли это быть Windows, играющая жестко на наборе с открытым исходным кодом, или офис Libre меняет типы mime просто для этого?
4 ответов
Я также получаю эту ошибку.
CI сообщает тип файла «application / zip», который имеет смысл, поскольку формат xlsx является сжатым форматом (переименуйте его в zip, и вы можете открыть содержимое).
Я добавил / заменил следующую строку в файл типов mime (application/config/mimes.php):
и это работает (по крайней мере, для этого браузера!)
пожалуйста, пройдите через следующее описание и подсказку и получите ответ легко!
описание:
на самом деле, как многие из них посоветовали добавить/заменить следующую строку в файле (application/config/mimes.php):
Но я понял это в CodeIgniter Версии 2.2.* проблема немного отличается! Они уже добавили эту строку, но забыли добавить следующий «file_type» ==> ‘application / vnd.ms-excel’
Итак, добавив выше ‘ application / vnd.ms-excel’ в массив xlsx тип файла, позвольте мне загрузить .XLSX-файл файлы!
подсказка:
всякий раз, когда вы получаете следующую ошибку, на платформе CodeIgniter и загружаете файлы:
тип файла, который вы пытаетесь загрузить, не допускается.
сделайте следующее в вашем Метод загрузки контроллера,
и это даст вам огромный массив, который вы можете получить представление из этого ссылке.(Пожалуйста, смотрите конец этой страницы). В этом массиве вы можете получить реальный mime_type файла, который вы пытаетесь загрузить, но не даете вам загрузить.
ответ:
в моем случае, расширение файла, .XLSX-файл, а тип мима был application / vnd.ms-excel, который был не добавлено в
так что я добавил его вручную, и после этого он работает ВЕРРИ ХОРОШО.
то же самое произошло с загрузкой CSV еще раз, когда я проверил расширение файла .csv но тип mime был text / plain, когда я добавил его в следующую строку:
и сохраненный следующим образом:
это работает как шарм! :Д Попробуйте, если вы найдете что-то новое в вышеприведенном шаги, пожалуйста, прокомментируйте здесь. Поэтому, надеясь, что это будет полезно для всего сообщества CodeIgniter, я разместил его некоторое время!
С наилучшими пожеланиями, ребята,
это была ошибка CI несколько месяцев назад:https://github.com/EllisLab/CodeIgniter/issues/394 . пантомимы.php в фреймворке был обновлен и ошибка была устранена. Обновите библиотеку CodeIgniter до версии 2.1.0 (или новее).
также хорошей вещью для тестирования / дампа являются типы mime вашего сервера.
Другой альтернативой является принуждение типа mime. С.htaccess, это было бы
для всего приключения отладки, испытайте различные файлы офиса с get_mime_by_extension($file) С помощью Помощника по файлам (http://codeigniter.com/user_guide/helpers/file_helper.html)
только для записей, я нашел причину, MIME-тип отсутствовал в реестре windows, решил добавить эти ключи с a .reg-файл:
но предпочел бы использовать эти решения, я не люблю возиться с реестром.
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)
- диапазона ячеек по диагонали
ЧТЕНИЕ
Код для чтения (два столбца):
Редактирование
Открываем файл 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); (почему не воспроизводиться при генерации мелких файлов – это вопрос :)).
Аналогично, будет выдавать ошибку:
- Если в конце кода php нет “exit;”
- Если перед генерацией файла нет очистки буфера вывода через “ob_end_clean();”
- Если используется генерация 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. В противном случае вместо русских символов в ячейке будет бред (например, “ИСТИНА”).
What is MIME application/excel?
application/excel
Compatible with Windows 10, 8, 7, Vista, XP and 2000
Optional Offer for WinThruster by Solvusoft | EULA | Privacy Policy | Terms | Uninstall
What Are MIME Types?
A Multi-Purpose Internet Mail Extension (eg. “application/excel”), also known as a MIME, is type of Internet standard originally developed to allow the exchange of different types of data files through e-mail messages. MIME types like application/excel are classified into specific data categories such as Video, Audio, Image, and many more. This categorization provides instructions to your computer or mobile device about how these files should be opened / viewed.
Why Do I Need MIME Types Like application/excel?
Categorizing MIME types like application/excel into a data type such as “Application” allows your e-mail client or Internet browser to display the content as intended. For example, when you attach a digital camera photo file to an e-mail, an Image MIME type will be associated with that file to allow your recipient to view the photograph.
Here’s how it works: Web servers (computers that host websites and e-mail) insert a set of MIME instructions into the beginning of a data transmission, such as an e-mail message or webpage, in the following format:
Content-Type: application/excel
[Format Explanation: The MIME type, which in this example is “Application”, is separated by a forward slash (“/”) and followed by a subtype.]
This set of instructions tells your client application, such as an e-mail program (eg. Microsoft Outlook, Apple Mail) or web browser (eg. Google Chrome, Mozilla Firefox), which “player application” should be used to properly display the application/excel content.
Many modern web browsers include built-in components to display common data types such as image players (eg. GIF, JPEG), Adobe Flash Player, Javascript, and many more. Other less-common types of players must be downloaded separately in order to properly display the MIME content.
What Are The Most Common Problems Associated With application/excel?
Sometimes you’ll find that your web browser or e-mail client is unable to properly display your application/excel content. This could be due to one of two reasons:
1. You are missing the proper Application “player software” to display the application/excel content.
2. Your Windows Registry contains an incorrect file extension (eg. XLS, PDF) association with the application/excel MIME type.
How To Fix application/excel Issues
Do I have the application/excel “player application” installed?
The first step in troubleshooting issues with opening application/excel content is to first make sure that you have the correct “player application” installed for this MIME type. Because there can be several (or even hundreds) of related software applications to application/excel, it is very difficult for us to compile a comprehensive list.
Therefore, a key strategy in determining the correct application is to look for clues on what software programs might be related to application/excel. Look at the naming of the subtype for clues about a related program (eg. Word, Excel) or software developer name (eg. Microsoft).
Furthermore, if you’ve been sent MIME type application/excel as an e-mail attachment, look for the file extension of the attached file. This file extension (eg. XLT, XLS, etc.) can provide you with a clue of what “player application” is associated with this Application MIME. Take a look at our file extension list below to see if there are any clues to finding the right “player application”.
Do I have broken application/excel file associations?
The second step in troubleshooting application/excel issues is making sure that you have correct file associations in the Windows Registry. Installing and uninstalling programs can lead to incorrect file associations with application/excel. Take a look at your Windows Registry settings to ensure that the MIME type is correctly associated with the “player application” and file extension.
WARNING: DO NOT edit the Windows Registry unless you are an advanced computer user with experience editing the Registry. Making an error in editing the Registry can create irreversible damage to your PC.
If you are not comfortable editing the Windows Registry, we highly recommend using an automated registry cleaning program, or taking you computer to a qualified professional.
phpexcel: писать данные в Excel с помощью PHP и читать из Excel
Задача писать данные в Excel с помощью PHP и читать из Excel
Как сказал Гагарин — «Поехали!»
//Скачать библиотеку — http://phpexcel.codeplex.com/
//Нашел русскую документацию — http://www.cyberforum.ru/php-beginners/thread1074684.html
//Подключаем скачаную библиотеку
include(«Classes/PHPExcel.php»);
//Создание объекта класса библиотеки
$objPHPExcel = new PHPExcel();
//Указываем страницу, с которой работаем
$objPHPExcel->setActiveSheetIndex(0);
//Получаем страницу, с которой будем работать
$active_sheet = $objPHPExcel->getActiveSheet();
//Создание новой страницы(пример)
//$objPHPExcel->createSheet();
//Ориентация и размер страницы
// $active_sheet->getPageSetup()
// ->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
$active_sheet->getPageSetup()
->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
$active_sheet->getPageSetup()
->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
//Имя страницы
$active_sheet->setTitle(«Данные из docs»);
//Ширина стобцов
$active_sheet->getColumnDimension(‘A’)->setWidth(8);
$active_sheet->getColumnDimension(‘B’)->setWidth(10);
$active_sheet->getColumnDimension(‘C’)->setWidth(90);
//Объединение ячеек
$active_sheet->mergeCells(‘A1:C1’);
//Высота строки
$active_sheet->getRowDimension(‘1’)->setRowHeight(30);
//Вставить данные(примеры)
//Нумерация строк начинается с 1, координаты A1 — 0,1
$active_sheet->setCellValueByColumnAndRow(0, 1, ‘Сегодня ‘.date(‘d-m-Y’));
$active_sheet->setCellValue(‘A3’, ‘id’);
$active_sheet->setCellValue(‘B3’, ‘name’);
$active_sheet->setCellValue(‘C3’, ‘info’);
//Вставка данных из выборки
$start = 4;
$i = 0;
foreach($l as $row_l) setCellValueByColumnAndRow(0, $next, $row_l[‘id’]);
$active_sheet->setCellValueByColumnAndRow(1, $next, $row_l[‘name’]);
$active_sheet->setCellValueByColumnAndRow(2, $next, $row_l[‘info’]);
//Отправляем заголовки с типом контекста и именем файла
header(«Content-Type:application/vnd.ms-excel»);
header(«Content-Disposition:attachment;filename=’simple.xlsx’»);
//Сохраняем файл с помощью PHPExcel_IOFactory и указываем тип Excel
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);
//Отправляем файл
$objWriter->save(‘php://output’);
>;
if($_GET[‘do’]==2) getWorksheetIterator() as $worksheet)
getTitle();
//Последняя используемая строка
$lastRow = $worksheet->getHighestRow();
//Последний используемый столбец
$lastColumn = $worksheet->getHighestColumn();
//Последний используемый индекс столбца
$lastColumnIndex = PHPExcel_Cell::columnIndexFromString($lastColumn);
На этом — все, видео выложу на своем канале в YouTube
Источник
От автора: очень часто при разработке веб-приложений возникает задача создать прайс-лист товаров либо услуг какой то кампании в формате таблиц Microsoft Excel. Но при этом необходимо предусмотреть, чтобы он свободно генерировался на основе данных, хранящихся в базе данных.
В сегодняшнем уроке мы с Вами решим такую задачу. То есть мы научимся генерировать документ в формате таблиц Excel при помощи языка PHP и специальной библиотеки PHPExcel. Это очень мощная и очень широко применяемая библиотека с огромнейшим функционалом. Конечно, все ее возможности за один урок рассмотреть мы не сможем, но узнать основы и научиться с ней работать — мы вполне успеем.
План урока
1. Подготовка к уроку.
2. Установка библиотеки PHPExcel.
3. Основные настройки листа книги Excel.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!
4. Наполнение документа данными.
5. Стилизация данных.
Детали учебника
Тема: PHP
Сложность: Средняя
Урок: Видео (.mp4)
Время: 01:31:02
Размер архива: 217 Mb
1. Подготовка к уроку.
Первое что нам потребуется для создания прайс-листа – это данные, которые в нем выводить. Для этого я подготовил базу данных (под названием price), в которой содержится всего одна табличка – tovar. В табличке содержится несколько наименований товара, для вывода в прайс-листе. Ее дамп Вы сможете взять из изходников к уроку.
Далее я подготовил очень простой скрипт, который вытаскивает данные из базы данных, а конкретнее из таблички tovar, и формирует из этих данных массив. С этим массивом мы с Вами и будем работать.
Скрипт включает в себя всего три файла:
config.php
functions.php
index.php
Важное замечание!
Если Вы хотите использовать для вывода данных в формате EXCEL русские символы, то обязательно все файлы нужно сохранять в кодировке UTF8.
Далее давайте приведу код всех трех файлов. Файл config.php:
<?php define(«HOST»,«localhost»); define(«USER»,«Viktor»); define(«PASSWORD»,«1234»); define(«DB»,«price»); $db = mysql_connect(HOST,USER,PASSWORD); if (!$db) { exit(‘WRONG CONNECTION’); } if(!mysql_select_db(‘price’,$db)) { exit(DB); } mysql_query(‘SET NAMES utf8’); ?> |
Как Вы видите, здесь все элементарно. Просто задаем четыре константы для хранения настроек подключения к базе данных. И собственно, выполняем подключение и выбор базы данных для работы. Далее устанавливаем кодировку запросов.
Следующий файл functions.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php function get_price() { $sql = «SELECT id,name,price,quantity FROM tovar»; $result = mysql_query($sql); if(!$result) { exit(mysql_error()); } $row = array(); for($i = 0;$i < mysql_num_rows($result);$i++) { $row[] = mysql_fetch_assoc($result); } return $row; } |
Здесь также все очень просто. Описана всего лишь одна функция, которая выполняет запрос к базе данных и формирует по результатам выборки массив. Далее я приведу распечатку этого массива.
И последний файл index.php:
<?php require_once ‘config.php’; require_once ‘functions.php’; $price_list = get_price(); ?> |
В этом файле мы дальше будем вести все кодирование. Это пока лишь заготовка. Как Вы видите, вначале я подключаю файлы config.php и functions.php и вызываю функцию get_price(), для получения массива товаров.
Давайте я приведу распечатку этого массива (при помощи функции print_r()):
Теперь, думаю, Вам понятно, что содержится в массиве $price_list. Теперь перейдем к установке библиотеки PHPExcel.
2. Установка библиотеки PHPExcel.
Первым делом библиотеку необходимо скачать. Для этого переходим на официальный сайт библиотеки — //phpexcel.codeplex.com/ :
И нажимаем по кнопке download. В результате скачивания у нас получится архив PHPExcel-1.7.7.zip. Давайте его распакуем. Как Вы видите, после распаковки у нас получилось несколько файлов и папок:
Classes
Documentation
Tests
changelog.txt
install.txt
license.txt
Файлы — это различные описания по предыдущим версиям, лицензионное соглашение и очень краткая инструкция по установке. Далее в папке Classes, содержится непосредственно сама библиотека PHPExcel – эту папку необходимо скопировать в корень нашего скрипта, что я и сделал.
В папке Documentation – содержится документация по библиотеке, но правда она на английском языке. Но все равно я Вам рекомендую с ней ознакомиться. Так как библиотека имеет огромнейший функционал, и конечно сегодня мы весь его не рассмотрим. А в документации Вы найдете много всего интересного.
В папке Tests – содержатся примеры по использованию библиотеки.
Итак, если Вы скопировали папку Classes в корень скрипта, то мы можем приступать к дальнейшей работе.
Итак, переходим в файл index.php и начинаем работать с ним. Теперь нам необходимо подключить главный файл библиотеки PHPExcel.php (который находится в папке Classes) к нашему скрипту и создать объект класса PHPExcel:
require_once ‘Classes/PHPExcel.php’; $objPHPExcel = new PHPExcel(); |
Для тех кто не знает класс – это своего рода чертеж или описательный элемент, какой то определенной сущности. То есть в нашем случае (если сказать простыми словами) класс PHPExcel.php описывает все методы (это обычные функции, только описанные в классе) и свойства (переменные класса) необходимые для вывода данных в формате Excel.
Для того что бы создать объект класса необходимо указать переменную ($objPHPExcel) затем поставить знак присвоения, далее ключевое слово new и указать имя класса. Объект – это такой тип переменной, который позволяет нам работать с методами и свойствами класса. То есть если мы создали объект, то мы получили доступ ко всему, что описано в классе.
На этом установка библиотеки завершена, можно приступать к работе с ней.
3. Основные настройки листа книги Excel.
Как Вы знаете, документ Excel состоит из книг, а каждая книга в свою очередь, состоит из листов. Далее лист состоит из набора ячеек, доступ к которым осуществляется по координатам. То есть у нас есть столбцы, которые имеют буквенные имена (А, В, С и т.д) и есть строки, которые пронумерованы. Значит, что бы получить доступ к первой ячейке нужно указать код А1. Точно также мы с помощью библиотеки будем получать доступ к каждой ячейке.
Итак, первым делом необходимо выбрать активный лист, на который мы будем выводить данные и получить объект этого листа.
$objPHPExcel—>setActiveSheetIndex(0); $active_sheet = $objPHPExcel—>getActiveSheet(); |
С помощью метода setActiveSheetIndex(0) – указываем индекс (номер) активного листа. Нумерация листов начинается с нуля. Далее с помощью метода getActiveSheet() – получаем объект этого активного листа, то есть другими словами получаем доступ к нему для работы. И сохраняем этот объект в переменную $active_sheet.
Если Вы захотите указать активным какой то другой лист, то вначале его необходимо создать, при помощи метода:
$objPHPExcel—>createSheet(); |
Затем по аналогии, указываем индекс и получаем объект активного листа.
Теперь давайте сгенерируем наш первый документ Excel (правда конечно пока пустой), для этого в файл index.php в его конец добавим следующий код (далее весь код, который я буду приводить, следует вставлять перед этим кодом – то есть код который идет ниже должен быть в самом низу файла – это уже завершение скрипта!!!):
header(«Content-Type:application/vnd.ms-excel»); header(«Content-Disposition:attachment;filename=’simple.xls'»); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5’); $objWriter—>save(‘php://output’); exit(); |
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!
В начале, обратите внимание, отправляем заголовки.
Первый – указываем браузеру тип открываемого контента – это документ формата Excel. И второй – указываем браузеру, что документ необходимо отдать пользователю на скачивание и тут же указываем имя скачиваемого файла (‘simple.xls’ ).
Далее документ необходимо сохранить. Сначала нужно указать, в какой версии мы его сохраняем. Для этого у класса PHPExcel_IOFactory вызываем метод createWriter() и передаем ему объект $objPHPExcel и указываем версию Excel5. При этом будет создан объект класса PHPExcel_Writer_Excel5 и у него вызываем метод save(). Этому методу передаем параметром строку ‘php://output’, это означает, что файл не будет сохранен, а будет отдан браузеру, а браузер в свою очередь, отдаст его нам на скачивание.
Теперь немного о версиях. Кроме версии Excel5, доступна также версия Excel2007, но так как у меня установлен MS Office 2003, то версия Excel2007 у меня просто не откроется. Поэтому я создаю документ версии Excel5.
Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:
Как Вы видите, мы с Вами получили пустой документ в формате Excel, с одним активным листом.
Теперь давайте пропишем остальные настройки листа (обратите внимание, что все методы мы вызываем у объекта $active_sheet – объекта активного листа документа и весь код вставляем перед заголовками – функция header):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Ориентация страницы и размер листа $active_sheet—>getPageSetup() —>setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); $active_sheet—>getPageSetup() —>SetPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); //Поля документа $active_sheet—>getPageMargins()—>setTop(1); $active_sheet—>getPageMargins()—>setRight(0.75); $active_sheet—>getPageMargins()—>setLeft(0.75); $active_sheet—>getPageMargins()—>setBottom(1); //Название листа $active_sheet—>setTitle(«Прайс-лист»); //Шапа и футер $active_sheet—>getHeaderFooter()—>setOddHeader(«&CШапка нашего прайс-листа»); $active_sheet—>getHeaderFooter()—>setOddFooter(‘&L&B’.$active_sheet—>getTitle().‘&RСтраница &P из &N’); //Настройки шрифта $objPHPExcel—>getDefaultStyle()—>getFont()—>setName(‘Arial’); $objPHPExcel—>getDefaultStyle()—>getFont()—>setSize(8); |
Итак, вначале задаем ориентацию листа, при помощи метода setOrientation(), которому передаем константу, ORIENTATION_PORTRAIT, класса PHPExcel_Worksheet_PageSetup. Эта константа — означает, что ориентация страницы будет портретом.
Если Вы хотите расположить лист в виде альбомного листа, нужно методу setOrientation(), передать константу Worksheet_PageSetup::ORIENTATION_LANDSCAPE.
Обратите внимание, что перед методом setOrientation() необходимо вызвать метод getPageSetup() – который предоставит нам доступ к настройкам страницы (вернет объект класса, который отвечает за настройки страницы).
Далее вызываем метод SetPaperSize(), который позволяет задать размер страницы, для печати. Ему передаем параметром константу PAPERSIZE_A4, класса — PHPExcel_Worksheet_PageSetup. Что означает, что размер листа страницы будет установлен А4.
Это можно проверить, если открыть документ, в формате Excel и перейти в меню Файл, затем на пункт параметры страницы.
Далее устанавливаем поля документа, то есть отступы от краев документа. Отступы задаются в специальных символьных единицах. Вначале, обратите внимание, вызываем у объекта $active_sheet, метод getPageMargins() (он вернет объект класса, который отвечает за настройки полей страницы). Затем вызываем метод setTop(1), который задает верхний отступ страницы.
Далее по аналогии методы setRight(0.75), setLeft(0.75), setBottom(1) – задают соответственно правый, левый и нижний отступы документа.
Далее давайте при помощи метода setTitle(«Прайс лист») – зададим название нашего листа.
Затем при печати (если кому это нужно), можно выводить шапку и нижний футер листа. Такую возможность можно задать при помощи методов setOddHeader(«&CШапка нашего прайс-листа») и setOddFooter(‘&L&B’.$active_sheet->getTitle().’&RСтраница &P из &N’), которые задают соответственно — шапку и футер документа.
Обратите внимание на передаваемые параметры:
Для шапки – передаем строку — &C Шапка нашего прайс-листа (метка &C – означает, что текст нужно расположить по центру).
Для футера – передаем строку — &L&B’.$active_sheet->getTitle().’&RСтраница &P из &N’, это означает, что нужно вывести слева и жирным шрифтом (&L&B’), название листа (метод $active_sheet->getTitle()), затем справа (&R) вывести номер страницы (Страница &P) из общего количества страниц (&N).
Полный список меток, можно посмотреть в документации. Я этот список Вам не привожу, так как он очень большой, да и многие из них Вам не понадобятся.
Затем указываем настройки шрифта по умолчанию. Это можно сделать при помощи последовательного вызова методов:
$objPHPExcel->getDefaultStyle()->getFont()->setName(‘Arial’) – задаем имя шрифта;
$objPHPExcel->getDefaultStyle()->getFont()->setSize(8); — задаем размер шрифта;
Теперь если сохранить изменения и сгенерировать наш документ, то можно увидеть что у нас изменилось название листа документа на Прайс-лист, и если открыть предварительный просмотр страницы, то можно увидеть как выводится шапка и футер документа.
4. Наполнение документа данными
Для начала давайте зададим ширину основных столбцов, которые нам понадобятся:
$active_sheet—>getColumnDimension(‘A’)—>setWidth(7); $active_sheet—>getColumnDimension(‘B’)—>setWidth(80); $active_sheet—>getColumnDimension(‘C’)—>setWidth(10); $active_sheet—>getColumnDimension(‘D’)—>setWidth(10); |
Как вы видите вначале обращаемся к нашему объекту активного листа, далее вызываем метод getColumnDimension(‘A’) – то есть получаем доступ ширине столбца А (либо любого другого столбца, какой мы передадим методу параметром), затем задаем ширину, при помощи метода setWidth(ширина столбца) и передаем ему ширину в символьных единицах.
Для остальных столбцов – все аналогично.
Давайте посмотрим, что получилось:
Как Вы видите, размеры столбцов изменились. Теперь давайте заполним несколько ячеек текстом:
$active_sheet—>mergeCells(‘A1:D1’); $active_sheet—>getRowDimension(‘1’)—>setRowHeight(40); $active_sheet—>setCellValue(‘A1’,‘Техно мир’); $active_sheet—>mergeCells(‘A2:D2’); $active_sheet—>setCellValue(‘A2’,‘Компьютеы и комплектующие на любой вкус и цвет’); $active_sheet—>mergeCells(‘A4:C4’); $active_sheet—>setCellValue(‘A4’,‘Дата создания прайс-листа’); |
В начале давайте объединим ячейки с А1 до D1, при помощи метода mergeCells(диапазон ячеек) – который позволяет объединять ячейки.
Далее зададим высоту этих объединенных ячеек (строка 1), при помощи методов getRowDimension(‘1’)->setRowHeight(40) – смотрите, вначале получаем доступ к строке 1 (getRowDimension(‘1’)), затем задаем высоту (setRowHeight(высота строки)).
И затем при помощи метода setCellValue(‘A1′,’Техно мир’), устанавливаем значение ячейки А1. Этот метод позволяет записать данные в любую ячейку. Координаты ячейки передаем первым параметром, а значение – вторым.
Следующие ячейки заполняем по аналогии. Давайте посмотрим, что у нас получилось:
Далее давайте в ячейку D4 запишем текущую дату:
//Записываем данные в ячейку $date = date(‘d-m-Y’); $active_sheet—>setCellValue(‘D4’,$date); //Устанавливает формат данных в ячейке — дата $active_sheet—>getStyle(‘D4’) —>getNumberFormat() —>setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14); |
Для этого запишем текущую дату в ячейку D4, а затем установим формат данных этой ячейки – как дата. Для этого необходимо последовательно вызвать методы у объекта $active_sheet:
getStyle(‘D4’)—>getNumberFormat()—> setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14); |
То есть получаем доступ к стилям ячейки D4 ( метод getStyle(‘D4’) вернет объект класса отвечающий за стили ячейки), затем получаем формат данных этой ячейки и устанавливаем новый формат данных (setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14)).
В константе FORMAT_DATE_XLSX14 хранится строка с форматом даты (вида дд-мм-гггг). Все константы, относящиеся к форматам даты можно посмотреть в документации по библиотеке.
Теперь, используя метод setCellValue(), а также цикл foreach() давайте наполним данными наш прайс-лист:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//Создаем шапку таблички данных $active_sheet—>setCellValue(‘A6’,‘№п.п’); $active_sheet—>setCellValue(‘B6’,‘Имя’); $active_sheet—>setCellValue(‘C6’,‘Цена’); $active_sheet—>setCellValue(‘D6’,‘кол-во’); //В цикле проходимся по элементам массива и выводим все в соответствующие ячейки $row_start = 7; $i = 0; foreach($price_list as $item) { $row_next = $row_start + $i; $active_sheet—>setCellValue(‘A’.$row_next,$item[‘id’]); $active_sheet—>setCellValue(‘B’.$row_next,$item[‘name’]); $active_sheet—>setCellValue(‘C’.$row_next,$item[‘price’]); $active_sheet—>setCellValue(‘D’.$row_next,$item[‘quantity’]); $i++; } |
Теперь давайте сохраним изменения и посмотрим, что получилось:
Как Вы видите, данные успешно вывелись.
5. Стилизация данных.
Теперь давайте красиво украсим наш прайс-лист, то есть каждой ячейке добавим стилей. Для этого необходимо создать массив со стилями (стили очень похожи на правила CSS), и при помощи метода applyFromArray($массив стилей), применить этот массив к ячейке:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//массив стилей $style_wrap = array( //рамки ‘borders’=>array( //внешняя рамка ‘outline’ => array( ‘style’=>PHPExcel_Style_Border::BORDER_THICK ), //внутренняя ‘allborders’=>array( ‘style’=>PHPExcel_Style_Border::BORDER_THIN, ‘color’ => array( ‘rgb’=>‘696969’ ) ) ) ); //применяем массив стилей к ячейкам $active_sheet—>getStyle(‘A1:D’.($i+6))—>applyFromArray($style_wrap); |
Обратите внимание, как необходимо оформлять массив стилей. Вначале идет главный массив с ключом – главное правило (к примеру borders – рамки), а в нем еще массивы с правилами. Стили для каждого правила (для каждого вида рамки) – это константы. К примеру, BORDER_THICK – это жирная рамка, BORDER_THIN – это тоненькая рамка.
После создания массива вызываем методы getStyle() – для получения объекта класса, отвечающего за стили выбранной ячейки, а затем метод applyFromArray($style_wrap), который применяет массив стилей к ячейке.
Обратите внимание, как я указал диапазон ячеек в методе getStyle(‘A1:D’.($i+6)). Переменная $i – это число итераций цикла, который выводит данные из массива. А число 6 – это количество строк до вывода данных из цикла. Давайте перейдем в браузер и посмотрим, что получилось:
Как Вы видите, стили успешно применились. Теперь давайте по аналогии, применим стили к остальным ячейкам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
//Стили для верхней надписи строка 1 $style_header = array( //Шрифт ‘font’=>array( ‘bold’ => true, ‘name’ => ‘Times New Roman’, ‘size’ => 20 ), //Выравнивание ‘alignment’ => array( ‘horizontal’ => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, ‘vertical’ => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ), //Заполнение цветом ‘fill’ => array( ‘type’ => PHPExcel_STYLE_FILL::FILL_SOLID, ‘color’=>array( ‘rgb’ => ‘CFCFCF’ ) ) ); $active_sheet—>getStyle(‘A1:D1’)—>applyFromArray($style_header); //Стили для слогана компании – вторая строка $style_slogan = array( //шрифт ‘font’=>array( ‘bold’ => true, ‘italic’ => true, ‘name’ => ‘Times New Roman’, ‘size’ => 13, ‘color’=>array( ‘rgb’ => ‘8B8989’ ) ), //выравнивание ‘alignment’ => array( ‘horizontal’ => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, ‘vertical’ => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ), //заполнение цветом ‘fill’ => array( ‘type’ => PHPExcel_STYLE_FILL::FILL_SOLID, ‘color’=>array( ‘rgb’ => ‘CFCFCF’ ) ), //рамки ‘borders’ => array( ‘bottom’ => array( ‘style’=>PHPExcel_Style_Border::BORDER_THICK ) ) ); $active_sheet—>getStyle(‘A2:D2’)—>applyFromArray($style_slogan); //Стили для текта возле даты $style_tdate = array( //выравнивание ‘alignment’ => array( ‘horizontal’ => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_RIGHT, ), //заполнение цветом ‘fill’ => array( ‘type’ => PHPExcel_STYLE_FILL::FILL_SOLID, ‘color’=>array( ‘rgb’ => ‘CFCFCF’ ) ), //рамки ‘borders’ => array( ‘right’ => array( ‘style’=>PHPExcel_Style_Border::BORDER_NONE ) ) ); $active_sheet—>getStyle(‘A4:C4’)—>applyFromArray($style_tdate); //Стили для даты $style_date = array( //заполнение цветом ‘fill’ => array( ‘type’ => PHPExcel_STYLE_FILL::FILL_SOLID, ‘color’=>array( ‘rgb’ => ‘CFCFCF’ ) ), //рамки ‘borders’ => array( ‘left’ => array( ‘style’=>PHPExcel_Style_Border::BORDER_NONE ) ), ); $active_sheet—>getStyle(‘D4’)—>applyFromArray($style_date); //Стили для шапочки прайс-листа $style_hprice = array( //выравнивание ‘alignment’ => array( ‘horizontal’ => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, ), //заполнение цветом ‘fill’ => array( ‘type’ => PHPExcel_STYLE_FILL::FILL_SOLID, ‘color’=>array( ‘rgb’ => ‘CFCFCF’ ) ), //Шрифт ‘font’=>array( ‘bold’ => true, ‘italic’ => true, ‘name’ => ‘Times New Roman’, ‘size’ => 10 ), ); $active_sheet—>getStyle(‘A6:D6’)—>applyFromArray($style_hprice); //стили для данных в таблице прайс-листа $style_price = array( ‘alignment’ => array( ‘horizontal’ => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_LEFT, ) ); $active_sheet—>getStyle(‘A7:D’.($i+6))—>applyFromArray($style_price); |
Теперь давайте посмотрим на окончательный результат нашей работы:
Вот так вот выглядит окончательный вариант нашего прайс-листа. Согласитесь очень достойный вид. Притом, что мы не затратили на его создание очень много времени. Еще раз Вам рекомендую просмотреть документацию по библиотеке PHPExcel, там содержится очень много всего интересного.
На этом у меня все. Удачного Вам кодирования и до новых встреч!
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!
Разработка веб-приложения на PHP
Скачайте видеокурс и узнайте, как создать веб-приложение на PHP
Скачать