MIME (Multipurpose Internet Mail Extensions) is a media type used to identify a type of data on the Internet or by applications. Its name contains the word «Internet» but it is not only limited to the Internet.IANA is in charge of standardizing and disseminating these MIME classifications.
There are numerous popular extensions available among them. One of them is the Excel MIME type.
Every mime type is divided into two parts, which are separated by a slash (/).
1 Type is a logical grouping of many MIME types that are similar to one another. All Excel files have an application as a type.
2 SubType is specific to a single file type within the «type«.They are unique within the «type».Some of the subtypes for excel files are: vnd.ms-excel,vnd.openxmlformats-officedocument.spreadsheetml.sheet,vnd.openxmlformats-officedocument.spreadsheetml.template,vnd.ms-excel.sheet.macroEnabled.12 etc.
There are various MIME types for Excel for various Excel-related files and their extensions such as. xls,.xlsx,.xlt,.xla, and so on.
Let’s look at Excel file MIME Type and extension used by them in table format.
Extension | MIME Type (Type / SubType) | Kind of Document |
.xls | application/vnd.ms-excel | Microsoft Excel |
.xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | Microsoft Excel (OpenXML) |
.xltx | application/vnd.openxmlformats-officedocument.spreadsheetml.template | Office Excel 2007 template |
.xlsm | application/vnd.ms-excel.sheet.macroEnabled.12 | Office Excel 2007 macro-enabled workbook |
.xltm | application/vnd.ms-excel.template.macroEnabled.12 | Office Excel 2007 macro-enabled workbook template |
.xlam | application/vnd.ms-excel.addin.macroEnabled.12 | Office Excel 2007 macro-enabled add-in |
.xlsb | application/vnd.ms-excel.sheet.binary.macroEnabled.12 | Office Excel 2007 non xml binary workbook |
Let’s explain them in brief.
1 .xls
.xls is one of the older file extension of Microsoft Excel Spreadsheet.It is created by Excel 97 or Excel 2003. They by default generate .xls format.
MIME Type Supported by .xls file is application/vnd.ms-excel where the application of MIME type and vnd.ms-excel is subtypes and vnd here means vendor-specific which in this case vendor is Microsoft.
If you have an.xls file and want to open it in Excel before prior 2007, you can do so easily because Excel before 2007 recognizes application/vnd.ms-excel and does not require to afford to open it.
Despite the fact that the.xls file format is older, it can be opened in all versions of Excel due to backward compatibility in newer versions.
2 .xlsx
xlsx is the new file extension of the Microsoft Excel Spreadsheet. It is created by Excel 2007 and later versions.
If you create an excel file in Excel 2007 or later, it will be saved with the.xlsx extension by default; however, you can also save the same file in.xls format.xlsx is more secure and better for data storage(ie. smaller file size) than xls.
MIME type for .xlsx file is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet where MIME type is application and subtype is vnd.openxmlformats-officedocument.spreadsheetml.sheet
It is a file format based on Office OPEN XML developed by Microsoft for representing spreadsheets. Because xlsx is an open standard, other software application vendors, such as Google (Google Sheets), can use it to interoperate with their spreadsheet applications.
📑 The last «x» in the xlsx file extension indicates that the file is based on the XML Standard.
You can open Xls file in excel 2007 and later and convert them to xlsx and save it.
3 .xltx
Microsoft Excel Template files with the. xltx extensions are based on the Office OpenXML file format specifications. It is used to generate a standard template file that can be used to generate XLSX files with the same settings as the XLTX file.
MIME type for .xlsx file is application/vnd.openxmlformats-officedocument.spreadsheetml.template where MIME type is application and subtype is vnd.openxmlformats-officedocument.spreadsheetml.sheet
It is XML based file format developed by Microsoft for representing templates. An XLTX is identical to an XLSX in every way except that Excel creates a new instance of an XLSX if the file opened is an XLTX.
📓 xltx is the replacement for the old .xlt format.
4 .xlsm
An XLSM file is a macro-enabled spreadsheet created by Microsoft Excel that can also be opened with Google Sheets.XLSM files are based on the Office Open XML format, where the last «m» of an xlsm file extension indicates that the file contains macros.Macros can be stored within an xlsm file, allowing users to automate repetitive tasks.
MIME type for .xlsx file is application/vnd.ms-excel.sheet.macroEnabled.12 where MIME type is application and subtype is vnd.ms-excel.sheet.macroEnabled.12
5 .xlam
An XLAM file extension indicates an Excel Macro-Enabled Add-In file, which is used to provide additional functionality for spreadsheets.
It has the following MIME types:application/vnd.ms-excel.template.macroEnabled.12 where MIME type is application and subtype is vnd.ms-excel.template.macroEnabled.12
Because of the file’s purpose, there is built-in macro support in .xlam files.
6 .xlsb
An XLSB file is an Excel Binary Workbook file that stores data in binary rather than XML format. Because they are stored in binary, the read and write times in xlsb files are faster, and they have been found to be useful for very large and complex spreadsheets for this reason. They are also smaller in size than the XLSM format.
MIME type for .xlsx file is application/vnd.ms-excel.sheet.binary.macroEnabled.12 where MIME type is application and subtype is vnd.ms-excel.sheet.binary.macroEnabled.12
FAQ:
How to generate .xls file in C# ?
For generating a .xls file in C# code you have to mention application/vnd.ms-excel MIME types in response header as shown below.
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("content-disposition", "attachment; filename=sample.xls");
How to generate .xlsx file in C#?
For generating a .xls file in C# code you have to mention application/vnd.openxmlformats-officedocument.spreadsheetml.sheet MIME types in response header as shown below.
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("content-disposition", "attachment; filename=sample.xls");
If you are generating Excel file target to xlsx file then you have to use above.
What is the replacement of the xla format?
Ans: xlam is the replacement for the old .xla format.
MS Excel has the following observed MIME types:
application/vnd.ms-excel
(official)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)
Is there any one type that would work for all versions? If not, do we need to set response.setContentType()
with each one of these mime types individually?
Also, we use file streaming in our application to display document (not just excel — any type of document). In doing so, how can we retain the filename if the user opts to save the file — currently, the name of the servlet that renders the file appears as the default name.
asked Jun 10, 2009 at 7:07
5
I believe the standard MIME type for Excel files is application/vnd.ms-excel
.
Regarding the name of the document, you should set the following header in the response:
header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
answered Dec 26, 2009 at 19:44
jbochijbochi
28.7k16 gold badges73 silver badges90 bronze badges
7
Waking up an old thread here I see, but I felt the urge to add the «new» .xlsx format.
According to http://filext.com/file-extension/XLSX the extension for .xlsx is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
. It might be a good idea to include it when checking for mime types!
Dave Jarvis
30.2k39 gold badges178 silver badges312 bronze badges
answered Apr 20, 2012 at 12:39
Karlis RodeKarlis Rode
3,5932 gold badges16 silver badges16 bronze badges
1
For .xls use the following content-type
application/vnd.ms-excel
For Excel 2007 version and above .xlsx files format
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
answered Apr 6, 2019 at 7:21
Du-LacosteDu-Lacoste
11k2 gold badges65 silver badges50 bronze badges
I was setting MIME type from .NET code as below —
File(generatedFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
My application generates excel using OpenXML SDK. This MIME type worked —
vnd.openxmlformats-officedocument.spreadsheetml.sheet
answered Jun 21, 2016 at 17:01
I am using EPPlus to generate .xlsx (OpenXML format based) excel file. For sending this excel file as attachment in email I use the following MIME type and it works fine with EPPlus generated file and opens properly in ms-outlook mail client preview.
string mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Net.Mime.ContentType contentType = null;
if (mimeType?.Length > 0)
{
contentType = new System.Net.Mime.ContentType(mimeType);
}
answered Nov 1, 2018 at 11:25
Vishwajit GVishwajit G
5004 silver badges9 bronze badges
For anyone who is still stumbling with this after using all of the possible MIME types listed in the question:
I have found that iMacs tend to also throw a MIME type of «text/xls» for XLS Excel files, hope this helps.
answered May 25, 2016 at 18:58
be_esbe_es
311 bronze badge
The content type for .xlsx files is:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Or use this:
Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("content-disposition", "attachment; filename=myfile.xls");
For Excel 2007 and above the MIME type differs
Response.ContentType = "application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AppendHeader("content-disposition", "attachment; filename=myfile.xlsx");
Or if you are trying to read the file then try this:
DataSet objds = new DataSet(); string ConnStr = ""; if (FileExtension == ".xlsx") { ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties="Excel 12.0 Xml;HDR=No;IMEX=1";"; } else { ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties="Excel 8.0;HDR=No;IMEX=1";"; } OleDbCommand selectCommand = new OleDbCommand(); OleDbConnection connection = new OleDbConnection(); OleDbDataAdapter adapter = new OleDbDataAdapter(); connection.ConnectionString = ConnStr; string strSQL = "SELECT * FROM [Sheet1$]"; if (connection.State != ConnectionState.Open) connection.Open(); OleDbCommand cmd = new OleDbCommand(strSQL, connection); OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(objds); connection.Close();
All the best.
—Amit
Установка типа 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»);
if($_GET[‘do’]==1) <
//Запрос и выборка данных из базы
//В моем примере я подключаюсь к базе MS SQL
//В Вашем примере вы указываете свое подключение MySQLMS SQLPostgree.
$sql = «select TOP 5 id, name, info FROM ip_acct.dbo.points WHERE client_id = 780 AND info IS NOT NULL»;
$result = sqlsrv_query( $iconn, $sql );
while($r = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC)) <
//Результат выборки данных в массиве $l
$l[] = $r;
>;
//Создание объекта класса библиотеки
$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) <
$next = $start + $i;
$active_sheet->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) <
//————————————
//2 Часть: чтение файла
//Файл лежит в директории веб-сервера!
$objPHPExcel = PHPExcel_IOFactory::load(«simple.xlsx»);
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
<
//Имя таблицы
$Title = $worksheet->getTitle();
//Последняя используемая строка
$lastRow = $worksheet->getHighestRow();
//Последний используемый столбец
$lastColumn = $worksheet->getHighestColumn();
//Последний используемый индекс столбца
$lastColumnIndex = PHPExcel_Cell::columnIndexFromString($lastColumn);
На этом — все, видео выложу на своем канале в YouTube
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()
для каждого из этих типов пантомимы по отдельности?
Кроме того, мы используем потоковую передачу файлов в нашем приложении для отображения документа (а не только Excel — любого типа документа). При этом, как мы можем сохранить имя файла, если пользователь решает сохранить файл — в настоящее время имя сервлета, отображающего файл, отображается как имя по умолчанию.
7 ответов
Лучший ответ
Я считаю, что стандарт Тип MIME для файлов Excel: application/vnd.ms-excel
.
Что касается названия документа, вы должны указать в ответе следующий заголовок:
header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
367
Callum Watkins
22 Фев 2020 в 04:46
21
В чем разница между application / msexcel и application / vnd.ms-excel?
–
7
Если вы хотите отображать документ в браузере (если поддерживается), Content-Disposition должен быть «встроенным». См. stackoverflow.com/questions/1395151/…
–
4
Вам следует избегать использования Content-Disposition в HTTP, это имеет соображения безопасности. Content-Disposition предназначен только для электронной почты. См. stackoverflow.com/questions/1012437 для получения дополнительной информации.
–
Обратите внимание, что для формата файла OpenXML Excel XLSX определен другой тип Mime, полный список см. По предоставленной ссылке.
–
Что такое "безопасная" альтернатива размещению контента? Перейдя по вашей ссылке, затем ссылка в этом ответе, а затем ссылка в этом документе приведет нас сюда: tools.ietf.org/html/rfc6266#section-4.3. Насколько я могу судить, проблема безопасности связана только с именами файлов, предоставленными пользователями - если они содержат нелатинские символы или символы, недопустимые в некоторых ОС. Все основные браузеры имеют защиту от этих проблем. Windows и Mac также устанавливают флаг для файла, указывающий, что он был получен из Интернета, и появляется предупреждение при попытке его открыть.
–
Просыпаясь здесь я вижу старую ветку, но я почувствовал побуждение добавить «новый» формат .xlsx.
Согласно http://filext.com/file-extension/XLSX расширением для .xlsx является application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
. Было бы неплохо включить его при проверке типов mime!
191
Dave Jarvis
19 Янв 2013 в 02:27
2
Это было то, что я искал, спасибо, необходимое для поддержки последнего формата, а также предыдущего.
–
Вы всегда должны использовать тип MIME ниже, если хотите обслуживать файл Excel в формате xlsx .
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
50
Siva Kranthi Kumar
1 Ноя 2012 в 09:26
Я устанавливал тип MIME из кода .NET, как показано ниже -
File(generatedFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
Мое приложение генерирует Excel с использованием OpenXML SDK. Этот тип MIME работал -
vnd.openxmlformats-officedocument.spreadsheetml.sheet
8
Aleksei Matiushkin
23 Ноя 2016 в 14:05
Я использую EPPlus для создания файла Excel .xlsx (на основе формата OpenXML). Для отправки этого файла Excel в виде вложения в электронное письмо я использую следующий тип MIME, он отлично работает с файлом, созданным EPPlus, и правильно открывается в предварительном просмотре почтового клиента ms-outlook.
string mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Net.Mime.ContentType contentType = null;
if (mimeType?.Length > 0)
{
contentType = new System.Net.Mime.ContentType(mimeType);
}
2
Vishwajit G
1 Ноя 2018 в 14:25
Для тех, кто все еще сталкивается с этим после использования всех возможных типов MIME, перечисленных в вопросе:
Я обнаружил, что iMac также имеют тенденцию генерировать MIME-тип «text / xls» для файлов XLS Excel, надеюсь, это поможет.
0
be_es
25 Май 2016 в 21:58
Для .xls используйте следующий тип содержимого
application/vnd.ms-excel
Для версии Excel 2007 и выше формата файлов .xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
33
Dulith De Costa
6 Апр 2019 в 10:21
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 — любой тип документа). При этом, как мы можем сохранить имя файла, если пользователь решит сохранить файл — в настоящее время, имя сервлета, который обрабатывает файл отображается как имя, заданное по умолчанию.
5 ответов
Я верю стандарт тип MIME для Excel файлы application/vnd.ms-excel
.
Что касается названия документа, вы должны установить следующий заголовок в ответе:
header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');
Пробуждение старой нити здесь я вижу, но я почувствовал желание добавить «новый» .формат xlsx.
согласно http://filext.com/file-extension/XLSX Расширение для .XLSX-это application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
. Было бы неплохо включить его при проверке типов mime!
вы всегда должны использовать ниже типа MIME, если вы хотите обслуживать файл excel в xlsx формат
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
35
автор: Siva Kranthi Kumar
я устанавливал тип MIME из кода .NET, как показано ниже —
File(generatedFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
мое приложение генерирует excel с помощью OpenXML SDK. Этот тип мима работал —
vnd.openxmlformats-officedocument.spreadsheetml.sheet
5
автор: Divyans Mahansaria
для тех, кто все еще спотыкается с этим после использования всех возможных типов MIME, перечисленных в вопросе:
Я обнаружил, что iMacs, как правило, также бросают тип MIME «text/xls» для файлов XLS Excel, надеюсь, это поможет.
PHPExcel — библиотека для создания и чтения данных из файлов формата OpenXML (который используется в MS Excel 2007). С ее помощью можно считывать из файлов, записывать в файлы, форматировать содержимое, работать с формулами и т.д. Для работы PHPExcel требуется версия PHP 5.2 или выше, с установленными библиотеками Zip, XML и GD2.
Установка PHPExcel
Первым делом библиотеку необходимо скачать. Для этого переходим на официальный сайт библиотеки и скачиваем архив PHPExcel-1.7.8.zip. После распаковки мы получим несколько файлов и папок:
- Classes
- Documentation
- Tests
- changelog.txt
- install.txt
- license.txt
Файлы — это различные описания по предыдущим версиям, лицензионное соглашение и очень краткая инструкция по установке. Далее, в папке Classes, содержится непосредственно сама библиотека PHPExcel — эту папку необходимо скопировать в корень нашего скрипта.
В папке Documentation содержится документация по библиотеке на английском языке. В папке Tests — примеры по использованию библиотеки.
Создание Excel-файла
Итак, давайте создадим файл makeexcel.php и начинаем работать с ним. Для начала нам необходимо подключить главный файл библиотеки PHPExcel.php (который находится в папке Classes) и создать объект класса PHPExcel:
require_once 'Classes/PHPExcel.php'; $pExcel = new PHPExcel();
Настройки листа книги Excel
Документ Excel состоит из книг, а каждая книга в свою очередь, состоит из листов. Далее лист состоит из набора ячеек, доступ к которым осуществляется по координатам. То есть у нас есть столбцы, которые имеют буквенные имена (А, В, С и т.д) и есть строки, которые пронумерованы. Значит, что бы получить доступ к первой ячейке нужно указать код А1. Точно также мы с помощью библиотеки будем получать доступ к каждой ячейке.
Итак, первым делом необходимо выбрать активный лист, на который мы будем выводить данные и получить объект этого листа:
$pExcel->setActiveSheetIndex(0); $aSheet = $pExcel->getActiveSheet();
С помощью метода setActiveSheetIndex(0) указываем индекс (номер) активного листа. Нумерация листов начинается с нуля. Далее с помощью метода getActiveSheet() получаем объект этого активного листа, то есть другими словами получаем доступ к нему для работы. И сохраняем этот объект в переменную $aSheet.
Если Вы захотите указать активным какой то другой лист, то вначале его необходимо создать, при помощи метода:
$pExcel->createSheet();
Затем, по аналогии, указываем индекс и получаем объект активного листа.
// Ориентация страницы и размер листа $aSheet->getPageSetup() ->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT); $aSheet->getPageSetup() ->SetPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); // Поля документа $aSheet->getPageMargins()->setTop(1); $aSheet->getPageMargins()->setRight(0.75); $aSheet->getPageMargins()->setLeft(0.75); $aSheet->getPageMargins()->setBottom(1); // Название листа $aSheet->setTitle('Прайс-лист'); // Шапка и футер (при печати) $aSheet->getHeaderFooter() ->setOddHeader('&CТД ТИНКО: прайс-лист'); $aSheet->getHeaderFooter() ->setOddFooter('&L&B'.$aSheet->getTitle().'&RСтраница &P из &N'); // Настройки шрифта $pExcel->getDefaultStyle()->getFont()->setName('Arial'); $pExcel->getDefaultStyle()->getFont()->setSize(8);
Вначале задаем ориентацию листа при помощи метода setOrientation(), которому передаем константу класса PHPExcel_Worksheet_PageSetup:
- ORIENTATION_PORTRAIT — книжная
- ORIENTATION_LANDSCAPE — альбомная
Обратите внимание, что перед методом setOrientation() необходимо вызвать метод getPageSetup(), который предоставляет доступ к настройкам страницы.
Далее вызываем метод SetPaperSize(), который позволяет задать размер страницы для печати. Ему передаем параметром константу PAPERSIZE_A4 класса PHPExcel_Worksheet_PageSetup. Что означает, что размер листа страницы будет установлен А4.
Далее устанавливаем поля документа, то есть отступы от краев документа. Отступы задаются в специальных символьных единицах. Вначале, обратите внимание, вызываем у объекта $aSheet метод getPageMargins(), который вернет объект класса, отвечающего за настройки полей страницы. Затем вызываем методы setTop(), setRight(), setLeft() и setBottom().
Далее при помощи метода setTitle(‘Прайс лист’) задаем название нашего листа.
Если нужно, можно при печати выводить шапку и подвал листа:
- setOddHeader();
- setOddFooter();
Обратите внимание на передаваемые параметры:
- для шапки передаем строку ‘&CТД ТИНКО: прайс-лист’; метка &C означает, что текст нужно расположить по центру.
- для подвала передаем строку ‘&L&B’.$aSheet->getTitle().’&RСтраница &P из &N’; это означает, что нужно вывести слева и жирным шрифтом (&L&B) название листа (метод $aSheet->getTitle()), затем справа (&R) вывести номер страницы (&P) из общего количества страниц (&N).
Затем указываем настройки шрифта по умолчанию:
- setName(‘Arial’) — задаем имя шрифта;
- setSize(8) — задаем размер шрифта.
Наполнение документа данными
Для начала давайте зададим ширину столбцов (в символьных единицах), которые нам понадобятся:
$aSheet->getColumnDimension('A')->setWidth(3); $aSheet->getColumnDimension('B')->setWidth(7); $aSheet->getColumnDimension('C')->setWidth(20); $aSheet->getColumnDimension('D')->setWidth(40); $aSheet->getColumnDimension('E')->setWidth(10);
Теперь заполним несколько ячеек текстом:
$aSheet->mergeCells('A1:E1'); $aSheet->getRowDimension('1')->setRowHeight(20); $aSheet->setCellValue('A1','ТД ТИНКО'); $aSheet->mergeCells('A2:E2'); $aSheet->setCellValue('A2','Поставка технических средств безопасности'); $aSheet->mergeCells('A4:C4'); $aSheet->setCellValue('A4','Дата создания прайс-листа');
Здесь мы сначала объеденяем ячейки с А1 до E1 при помощи метода mergeCells(), далее задаем высоту строки: вначале получаем доступ к строке 1 при помощи метода getRowDimension(‘1’), затем задаем высоту — setRowHeight(20). Далее при помощи метода setCellValue(‘A1′,’ТД ТИНКО’), устанавливаем значение ячейки А1.
Далее давайте в ячейку D4 запишем текущую дату:
// Записываем данные в ячейку $date = date('d-m-Y'); $aSheet->setCellValue('D4',$date); // Устанавливает формат данных в ячейке (дата вида дд-мм-гггг) $aSheet->getStyle('D4')->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14);
С помощью констант, определенных в классе PHPExcel_Style_NumberFormat, можно задать формат ячейки: FORMAT_GENERAL (общий), FORMAT_TEXT (текст), FORMAT_NUMBER (число), FORMAT_NUMBER_00 (число с дробной частью), FORMAT_PERCENTAGE (процент), FORMAT_PERCENTAGE_00 (процент с дробной частью) и т.п.
Теперь, используя метод setCellValue(), а также цикл while() наполним данными наш прайс-лист:
mysql_connect(DB_HOST, DB_USER, DB_PASS); mysql_query('SET NAMES utf8'); mysql_select_db(DB_NAME); // Создаем шапку таблички данных $aSheet->setCellValue('A6','№'); $aSheet->setCellValue('B6','Код'); $aSheet->setCellValue('C6','Наименование'); $aSheet->setCellValue('D6','Описание'); $aSheet->setCellValue('E6','Цена'); $query = "SELECT `code`, `name`, `description`, `price` FROM `products` WHERE 1 LIMIT 10"; $res = mysql_query( $query ); $i = 1; while( $prd = mysql_fetch_assoc($res) ) { $aSheet->setCellValue('A'.($i+6), $i); $aSheet->setCellValue('B'.($i+6), $prd['code']); $aSheet->setCellValue('C'.($i+6), $prd['name']); $aSheet->setCellValue('D'.($i+6), $prd['description']); $aSheet->setCellValue('E'.($i+6), $prd['price']); $i++; }
Стилизация данных
Давайте немного украсим наш прайс-лист, то есть каждой ячейке добавим стилей. Для этого необходимо создать массив со стилями и при помощи метода applyFromArray(), применить этот массив к ячейке (или ячейкам):
// массив стилей $style_wrap = array( // рамки 'borders'=>array( // внешняя рамка 'outline' => array( 'style'=>PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb'=>'006464' ) ), // внутренняя 'allborders'=>array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'CCCCCC' ) ) ) ); $aSheet->getStyle('A1:F'.($i+5))->applyFromArray($style_wrap);
Теперь, по аналогии, применим стили к остальным ячейкам:
// Стили для верхней надписи (первая строка) $style_header = array( // Шрифт 'font'=>array( 'bold' => true, 'name' => 'Times New Roman', 'size' => 15, 'color'=>array( 'rgb' => '006464' ) ), // Выравнивание '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' => '99CCCC' ) ), 'borders'=>array( 'bottom'=>array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'006464' ) ) ) ); $aSheet->getStyle('A1:E1')->applyFromArray($style_header); // Стили для слогана компании (вторая строка) $style_slogan = array( // шрифт 'font'=>array( 'bold' => true, 'italic' => true, 'name' => 'Times New Roman', 'size' => 12, 'color'=>array( 'rgb' => '006464' ) ), // выравнивание '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' => '99CCCC' ) ), //рамки 'borders' => array( 'bottom' => array( 'style'=>PHPExcel_Style_Border::BORDER_THIN, 'color' => array( 'rgb'=>'006464' ) ) ) ); $aSheet->getStyle('A2:E2')->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' => 'EEEEEE' ) ), // рамки 'borders' => array( 'right' => array( 'style'=>PHPExcel_Style_Border::BORDER_NONE ) ) ); $aSheet->getStyle('A4:D4')->applyFromArray($style_tdate); // Стили для даты $style_date = array( // заполнение цветом 'fill' => array( 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=>array( 'rgb' => 'EEEEEE' ) ), // рамки 'borders' => array( 'left' => array( 'style'=>PHPExcel_Style_Border::BORDER_NONE ) ), ); $aSheet->getStyle('E4')->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 ), ); $aSheet->getStyle('A6:E6')->applyFromArray($style_hprice); // Cтили для данных в таблице прайс-листа $style_price = array( 'alignment' => array( 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_LEFT, ) ); $aSheet->getStyle('A7:E'.($i+5))->applyFromArray($style_price);
Сохранение документа
Осталось только сохранить наш документ:
/* $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel5'); $objWriter->save('simple.xls'); */ $objWriter = PHPExcel_IOFactory::createWriter($pExcel, 'Excel2007'); $objWriter->save('simple.xlsx');
или так
/* $objWriter = new PHPExcel_Writer_Excel5($pExcel); $objWriter->save('simple.xls'); */ $objWriter = new PHPExcel_Writer_Excel2007($pExcel); $objWriter->save('simple.xlsx');
Если нужно вывести документ в браузер
/* header('Content-Type:application/vnd.ms-excel'); header('Content-Disposition:attachment;filename="simple.xls"'); $objWriter = new PHPExcel_Writer_Excel5($pExcel); */ header('Content-Type:xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition:attachment;filename="simple.xlsx"'); $objWriter = new PHPExcel_Writer_Excel2007($pExcel); $objWriter->save('php://output');
Первый заголовок указывает браузеру тип открываемого контента — это документ формата Excel. Второй — говорит браузеру, что документ необходимо отдать пользователю на скачивание под именем simple.xlsx.
Добавление формул
Формула Excel — это математическое выражение, которое создается для вычисления результата и которое может зависеть от содержимого других ячеек. Формула в ячейке Excel может содержать данные, ссылки на другие ячейки, а также обозначение действий, которые необходимо выполнить.
Использование ссылок на ячейки позволяет пересчитывать результат по формулам, когда происходят изменения содержимого ячеек, включенных в формулы. Формулы Excel начинаются со знака =. Скобки ( ) могут использоваться для определения порядка математических операции.
Примеры формул Excel: =27+36, =А1+А2-АЗ, =SUM(А1:А5), =MAX(АЗ:А5), =(А1+А2)/АЗ.
PHPExcel тоже поддерживает добавление формул в ячейки. Установить формулу можно так:
// формула для вычисления суммы $formula = '=SUM(D2:D4)'; $aSheet->setCellValue('D5', $formula);
Чтение Excel-файла
Самый простой вариант — считать все таблицы (на всех листах) и записать данные в трехмерный массив:
// Подключаем библиотеку require_once 'Classes/PHPExcel.php'; $pExcel = PHPExcel_IOFactory::load('simple.xlsx'); // Цикл по листам Excel-файла foreach ($pExcel->getWorksheetIterator() as $worksheet) { // выгружаем данные из объекта в массив $tables[] = $worksheet->toArray(); }
Теперь можно вывести массив:
// Цикл по листам Excel-файла foreach( $tables as $table ) { echo '<table border="1">'; // Цикл по строкам foreach($table as $row) { echo '<tr>'; // Цикл по колонкам foreach( $row as $col ) { echo '<td>'.$col.'</td>'; } echo '</tr>'; } echo '</table>'; }
Для получения значения отдельной ячейки:
// выбираем лист, с которым будем работать $pExcel->setActiveSheetIndex(0); $aSheet = $pExcel->getActiveSheet(); // получаем доступ к ячейке по номеру строки // (нумерация с единицы) и столбца (нумерация с нуля) $cell = $aSheet->getCellByColumnAndRow($col, $row); // читаем значение ячейки $value = $cell->getValue()
или так:
$value = $pExcel->getActiveSheet()->getCellValue('B2')
Еще два примера:
// Цикл по листам Excel-файла foreach( $pExcel->getWorksheetIterator() as $worksheet ) { echo '<h2>Лист «'.$worksheet->getTitle().'»</h2>'; echo '<table border="1">'; // Цикл по строкам foreach( $worksheet->getRowIterator() as $row ) { echo '<tr>'; // Цикл по колонкам foreach( $row->getCellIterator() as $cell ) { $value = $cell->getValue(); // $calcValue = $cell->getCalculatedValue() // $dataType = PHPExcel_Cell_DataType::dataTypeForValue($value); echo '<td>'.$value.'</td>'; } echo '</tr>'; } echo '</table>'; }
// Цикл по листам Excel-файла foreach ($pExcel->getWorksheetIterator() as $worksheet) { $worksheetTitle = $worksheet->getTitle(); $highestRow = $worksheet->getHighestRow(); // например, 10 $highestColumn = $worksheet->getHighestColumn(); // например, 'E' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $nrColumns = ord($highestColumn) - 64; echo '<h2>Лист «'.$worksheetTitle.'» '; echo $nrColumns . ' колонок (A-' . $highestColumn . ') '; echo ' и ' . $highestRow . ' строк.</h2>'; echo '<table border="1">'; // Цикл по строкам for ($row = 1; $row <= $highestRow; $row++) { echo '<tr>'; // Цикл по колонкам for ($col = 0; $col < $highestColumnIndex; $col++) { $cell = $worksheet->getCellByColumnAndRow($col, $row); echo '<td>'.$cell->getValue().'</td>'; } echo '</tr>'; } echo '</table>'; }
Дополнительно
- Документация разработчика PHPExcel на русском
- Блог на Laravel 7, часть 17. Временная зона для пользователей, деплой на хостинг TimeWeb
- Блог на Laravel 7, часть 16. Роль нового пользователя, сообщение админу о новом посте
- Блог на Laravel 7, часть 15. Восстановление постов, slug для категории, поста и страницы
- Блог на Laravel 7, часть 14. Валидация данных и права доступа при загрузке изображений
- Блог на Laravel 7, часть 13. Загрузка и ресайз изображений для категорий и постов блога
- Блог на Laravel 7, часть 12. Доп.страницы сайта в панели управления и в публичной части
- Блог на Laravel 7, часть 11. Панель управления — назначение ролей и прав для пользователей
Поиск:
Excel • MS • PHP • Web-разработка
Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Я тоже получаю эту ошибку.
CI сообщает о типе файла «application / zip», который имеет смысл, так как формат xlsx является сжатым форматом (переименуйте его в zip, и вы можете открыть его содержимое).
Я добавил / заменил следующую строку в файл типов mime (application / config / mimes.php):
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','application/zip'),
и это работает (для этого браузера хотя бы!)
Пожалуйста, ознакомьтесь со следующим описанием и подсказкой и получите ответ легко!
Описание:
Фактически, многие из них рекомендовали добавить / заменить следующую строку в файле (application / config / mimes.php):
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
Но я понял, что в CodeIgniter Version 2.2. * Проблема немного другая! Они уже добавили эту строку, но забыли добавить следующий «file_type» ==> ‘application / vnd.ms-excel’
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel'),
Поэтому добавив вышеприведенное «application / vnd.ms-excel» в массив типа xlsx , позвольте мне загрузить файлы .xlsx !
Подсказка:
Всякий раз, когда вы получаете следующую ошибку, на платформе CodeIgniter и загружаете файлы:
Тип файла, который вы пытаетесь загрузить, не разрешен.
Сделайте следующее в методе загрузки вашего контроллера,
var_dump($this->upload->data());
И это даст вам огромный массив, который вы можете получить по этой ссылке . (Пожалуйста, посмотрите на конец этой страницы). В этом массиве вы можете получить то, что является реальным mime_type файла, который вы пытаетесь загрузить, но не позволяете загружать.
Ответ:
В моем случае расширение файла было .xlsx , а типом mime было application / vnd.ms-excel , которое не было добавлено в
'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'),
Поэтому я добавил его вручную, и после этого он работает VERRY WELL !!!
То же самое случилось с загрузкой CSV еще раз, когда я проверил расширение файла .csv, но тип mime был text / plain , когда я добавил его в следующую строку:
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel');
и сохраняется следующим образом,
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'),
Отлично работает! : D Попробуйте, если вы найдете что-то новое в вышеуказанных шагах, прокомментируйте здесь !!! Поэтому, надеясь, что это будет полезно для всего сообщества CodeIgniter, я отправил его на некоторое время!
С наилучшими пожеланиями, ребята,
Randika
Это было ошибкой CI несколько месяцев назад: https://github.com/EllisLab/CodeIgniter/issues/394 . mimes.php в рамках был обновлен, и ошибка была решена. Обновите библиотеку CodeIgniter до версии 2.1.0 (или новее).
Также хорошей проверкой / дампом является ваш тип mime сервера.
Другой альтернативой является принудительный тип mime. С .htaccess это будет
AddType application/excel .xls .xlsx
Для целого отладочного приключения протестируйте различные офисные файлы с помощью get_mime_by_extension($file)
с помощью File Helper (http://codeigniter.com/user_guide/helpers/file_helper.html)
Только для записей, я нашел причину, mime-type отсутствовал в реестре Windows, решил добавить эти ключи с REG-файлом:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USERSoftwareClasses.xls] "Content Type"="application/excel" [HKEY_CURRENT_USERSoftwareClasses.xlsx] "Content Type"="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Но предпочел бы использовать вышеприведенные решения, мне не нравится возиться с реестром.