Phpexcel файл не открывается
С помощью PHPExcel можно производить чтение и запись информации в файлы, форматировать их содержимое,
выполнять операции с формулами, стилями и т.д.
PHPExcel – библиотека, предназначенная для обработки данных формата MS Excel. С её помощью можно производить чтение и запись информации в файлы, форматировать их содержимое, выполнять операции с формулами, стилями и т.д.
Для работы PHPExcel требуется версия PHP 5.2 или выше, а так же наличие подключенных расширений ZIP, XML и GD2.
Примечание: расширение php_zip нужно только при использовании классов PHPExcel_Reader_Excel2007, PHPExcel_Writer_Excel2007 и PHPExcel_Reader_OOCalc. То есть если вы хотите использовать PHPExcel для полноценной работы с файлами форматов .xlsx или .ods, то вам потребуется zip-расширение.
Возможности библиотеки PHPExcel:
1. PHPExcel может читать различные форматы файлов электронных таблиц:
- Excel5
- Excel2003XML
- Excel2007
- OOCalc
- SYLK
- Gnumeric
- CSV
2. Создание и обработка документов средствами PHP
Состав Архива:
Другие решения
Есть много причин для этого «раздувания», и это очень сильно зависит от фактических данных на рабочем листе, но в MS Excel используется множество различных методов для сохранения размера файла, в то время как PHPExcel пишет простую версию формата OfficeOpenXML. ,
Например, MS Excel просматривает содержимое строк всех ячеек и сохраняет отдельные строки в таблице строк. Если строка используется двумя или более ячейками, в таблице строк будет только одна запись. Однако при проверке того, существует ли уже строка в таблице строк, это приводит к снижению производительности, поэтому PHPExcel не выполняет эту проверку, но будет дублировать записи в таблице строк. Это означает, что он создаст большой файл из-за дублирования, но сохранит скорость сохранения как можно быстрее.
Точно так же MS Excel просматривает все формулы, и если формула похожа на существующую формулу (только с разницей в смещении строки / столбца), она будет сохранять ее как общую формулу, а не как формула ячейки, поэтому фактические данные формулы являются только хранится один раз. Опять же, PHPExcel не будет выполнять эту проверку, поскольку при сохранении это приводит к значительному снижению производительности, поэтому каждая формула хранится в виде формулы ячейки, а не общей формулы.
И нет, я не могу объяснить, почему файл не загружается в MS Excel 2010, и при этом я не смогу объяснить это, не будучи в состоянии выполнить все это через отладку
Пример кода PHPExcel успешно завершается на моем локальном ПК, файл загружается на локальный компьютер и успешно открывается в Excel 2007. Но использование того же кода на моем сервере дает недопустимый файл для Excel, который, когда я ОТКРЫВАЮ И РЕМОНТ, он успешно открывается.
Я не хочу использовать опцию «Открыть и восстановить», а хочу использовать только опцию «Открыть».
Не смогли выяснить в чем проблема? Пожалуйста помоги.
Не зная точное содержимое файла xlsx, очень сложно определить, на какие из нескольких миллионов возможностей жалуется MS Excel . какие дополнительные функции (например, автофильтры, диаграммы и т. Д.) Вы используете? Какая версия MS Excel? Если вы запишете файл на диск сервера, а не сохраните его через браузер, возникнет ли у вас та же проблема? Вы по-прежнему жалуетесь, если вы используете Excel5 Writer и сохраняете его как файл .xls? Можете ли вы загрузить копию файла на веб-сайт PHPExcel для исследования?
@Mark Baker: нет на сервере файл правильно сгенерирован, и когда я его загружаю, он успешно открывается в Excel без каких-либо проблем.
Это почти наверняка означает, что ваш скрипт отражает что-то в потоке вывода php: //, будь то начальный или конечный пробел, или пустая строка, или промежуток между ?> и
сэр, я загружаю файл Excel на веб-сайт PHPExcel, проверьте. будет большим подспорьем. там всего два столбца и две строки, и я удалил все пробелы.
Добавьте строку ob_end_clean(); в конце вашей программы перед строкой $objWriter->save('php://output');
Код выглядит так: // для XLSX
Опубликованный вами файл имеет один пробел перед выводом PHPExcel . проверьте свой скрипт, чтобы увидеть, куда он может быть отправлен в выходной поток php: //. Убедитесь, что перед начальным
ob_end_clean() это всегда будет workround . где - то, что будет пробел или заголовок BOM или какой - то вывод текста , который вызывает эту проблему . правильное решение всегда , чтобы определить , что объем производства и устранить ее
Проверьте, не отображаются ли в файле какие-либо ложные символы, открыв его в текстовом редакторе. Если да, вы, вероятно, сможете выяснить, где они представлены. Очевидные виновники - пробелы или разрывы строк.
Также убедитесь, что перед тега в любом из ваших файлов нет пробелов или символов новой строки .
xlsx Формат фактически Молния коллекция xml файлов, так что если нет очевидных текстовых строк (кроме П.К. подписи) , видимых в текстовом редакторе, а затем попробуйте расстегивать его. Это может дать другие ключи к разгадке проблемы.
Если вы работаете на платформе Windows, то были некоторые версии php_zip.dll библиотеки ссылок ZipArchive с ошибками, которые могут вызвать эту ошибку. Вы можете использовать PCLZip как альтернативу ZipArchive.
Получение значения ячейки по координатам
Для получения значения ячейки, сперва должна быть найдена ячейка путем использования метода getCell. Значение ячейки может быть получено с помощью следующей команды:
В случае если вам нужны подсчитанные значения ячейки, вместо getValue(), используйте метод getCalculatedValue():
7 Answers 7
Add a line ob_end_clean(); at the end of your program before the line $objWriter->save('php://output');
The code looks like: //for XLSX
The file that you've posted has a single space character before the PHPExcel output. check your script to see where this might be sent to the php://output stream. Check that there's no space before your initial
I could remove as much white-spaces i could , but still it didn't work , i couldn't find the single space before the output , so i found ob_end_clean() on a post on stackoverflow and used it and it worked.
ob_end_clean() is always going to be a workround. somewhere, there will be a space or a BOM header or some output text that causes this problem. the correct solution is always to identify that output and eliminate it
Check for any spurious characters being echoed into the file by opening it in a text editor. If there are, you can probably figure out where they're being introduced. Spaces or line breaks are obvious culprits.
Also, make sure that there are no spaces or newlines before the tag in any of your files.
The xlsx format is actually a zipped collection of xml files, so if there are no obvious text strings (beside the PK signature) visible in a text editor, then try unzipping it. That may give other clues to the issue.
If you're running on a Windows platform, then there have been some buggy versions of the ZipArchive php_zip.dll link library that can cause this error. You can use PCLZip as an alternative to ZipArchive.
Здравствуйте.
У меня проблема. Если вставить в конце страницы заголовки
header(«Content-Type:application/vnd.ms-excel»);
header(«Content-Disposition:attachment;filename=’simple.xls’»);
то выдается предупреждение при открытии файла Excel:
Не удается открыть файл, т.к. формат или расширение являются недопустимыми.
Действительный формат файла отличается от указываемого его расширением имени файла,
а сама страница открывается в Excel с кучей тегов и notice вместо формы прайса .
Подскажите как убрать эту ошибку, а то получается как будто я сохраняю не файл.xls , а саму страницу php (
Вот код:
Помогите пожалуйста решить данную проблему.
Здравствуйте!
Попробуйте, закоментировать отправку заголовков - то есть все вызовы функйии header, а также строку $objWriter->save('php://output');. То есть у Вас должно получиться так:
И (после обновления страницы) посмотрите нет ли каких либо ошибок на экране.
Если ошибок нет то верните все изменения назад и попробуйте заменить строку:
на
Здравствуйте! Попробуйте, закоментировать отправку заголовков - то есть все вызовы функйии header, а также строку $objWriter->save('php://output');. То есть у Вас должно получиться так: И (после обновления страницы) посмотрите нет ли каких либо ошибок на экране. Если ошибок нет то верните все изменения назад и попробуйте заменить строку: на
Попробовал. В уроке по созданию прайса листа добавил строку date_default_timezone_set('Европа/Город'); и только после этого сохранилось без ошибок.
А вот моя собственная статистика выдает ошибки на отсутствующие файлы CSS и почему то после того, как я убрал ошибки со страницы, то сохранились все input html как на самой странице, хотя я записывал из input число в Excel.
Если убрать Header и вставить SAVE, то сохраняется на сервер без ошибок и формируется нормальная статистика в Excel'e, правда приходится формировать ссылку для скачивания, что не очень удобно для пользователя.
Большое вам спасибо за ответ. Теперь у меня появилась надежда, что я все таки смогу реализовать сохранение в Excel в своем проекте с возможностью выбора "куда сохранять" пользователю />
Я пытаюсь открыть существующий файл Excel, изменить некоторые ячейки и сохранить его. Я использую Excel2007 для читателя и писателя.
Я могу загрузить данные, прочитать и записать в них некоторые значения, которые я проверяю с помощью различных var_dumps в коде.
Проблема при сохранении. Он выдает некоторые фатальные ошибки при тайм-аутах, а также, если он записывает файл, размер файла увеличивается до 9,2 МБ, что нормально, если я могу его открыть.
фрагмент кода — ничего особенного.
Я использую MS Excel 2010, чтобы открыть результирующий файл, но он занимает вечность и не открывал его ни разу.
Пожалуйста, помогите мне решить эту проблему, указав, куда мне следует обратиться.
Любая помощь с благодарностью.
Основные методы и свойства класса PHPExcel
Класс PHPExcel – это ядро PHPExcel. Он содержит ссылки на содержащиеся листы, параметры безопасности документов и мета-данные документов. Помимо вышеизложенного, этот класс включает в себя множество других полезных методов для обработки получаемых данных. Некоторые из них будут описаны ниже.
getSheetCount() – возвратит количество листов в книге;
getSheetNames() – возвращает список всех листов в рабочей книге, индексируя их в порядке, в котором их «вкладки» появляются при открытии в MS Excel (или других программах для обработки электронных таблиц);
getSheet(N) – используется для доступа к листу по индексу. Индекс позиции (N) представляет собой порядок, в котором отображаются вкладки листов, когда книга открыта в MS Excel (или других программах для обработки электронных таблиц);
getSheetByName(list_name) – метод используется для доступа к листу по его имени (list_name);
getActiveSheet() – этот метод позволяет получить доступ к активному листу документа напрямую. Активным листом является тот, который будет активен, когда откроется книга в MS Excel (или другой соответствующей программе электронных таблиц);
setActiveSheetIndex() и setActiveSheetIndexByName() – с помощью этих методов можно назначить лист, который будет активным по его индексу или имени.
Заключение
В этой статье были рассмотрены основные возможности библиотеки PHPExcel в области чтения excel файлов. Помимо всего выше изложенного, есть возможность более гибко использовать эту библиотеку для работы с различными параметрами таблицы. По этим вопросам рекомендуется обращаться к документации. Библиотека PHPExcel так же адаптирована для работы с другими типами файлов, таких как Excel (BIFF). XLS, Excel 2007 (OfficeOpenXML). XLSX, CSV, Libre / OpenOffice Calc. ODS, Gnumeric, PDF и HTML.
Лучший способ сказать автору «СПАСИБО» рассказать друзьям или поделиться ссылкой!
Другие статьи:
В этой статье Мы покажем Вам, как сделать так, чтобы шапка сайта выезжала при прокрутке страницы вверх, но при этом скрывалась при прокрутке страницы вниз, чтобы не загораживать нам просмотр самой страницы.
Всплывающая фиксированная навигация для сайта jQuery, CSS - инструкция, примеры
DateTimePicker – удобный и легкий в использовании плагин для быстрой подстановки даты и времени в поля ввода.
Плагин DateTimePicker для сайта - инструкция, настройка, инициализация
В этой статье будет рассмотрено решение этой задачи с использованием плагина Masked Input, который отличается простотой и удобством в использовании.
Плагин маски ввода для input - jquery maskedinput - инструкция, настройка, инициализация
Метод, который мы рассмотрим ниже, позволяет размещать информацию на страницах любого пользователя или группы,к которому имеет доступ авторизованный пользователь.
Публикация на стене Вконтакте средствами API - кросспостинг
Текстовый редактор TinyMCE в визуальном режиме при стандартной конфигурации обрезает некоторый теги и свойства.
TinyMCE вырезает теги - исключения для тегов TinyMCE
Научимся вставлять теги в выделенный фрагмент текста, вставлять теги на место селектора в тексте и получать средствами JS HTML код отредактированного текста и текст без HTML сущностей.
Cвойства и методы TinyMCE - вставка тегов, вывод значений
Как вы уже поняли, редактор является платформенным Javascript редактором HTML кода, т.е. WYSIWYG редактором для сайтов и веб приложений. Разработчиком этого полезного продукта является компания Moxiecode Systems AB.
Установка и настройка TinyMCE - инициализация и параметры
В статье мы: познакомимся с каруселью; научимся интегрировать ее на свой сайт; познакомимся с основными параметрами инициализации;рассмотрим самые популярные свойства и методы классов jCarousel
Установка и настройка jCarousel - параметры и методы
Любой backend программист php сталкивается с задачей автоматизации почтовой рассылки на веб сайтах и многие,кто сталкивался с данной задачей впервые, вставали перед ключевым вопросом: "Писать или не писать smtp клиент с нуля?".
The example code of PHPExcel exceutes successfully on my local PC, the file gets downloaded to local and is opened in Excel 2007 successfully. But using the same code on my server gives an Invalid file to excel, which when I OPEN AND REPAIR, then it opens successfully.
I don't want to use the Open and Repair option, but only the Open option.
Couldn't find out the problem? Please help.
Without knowing the exact content of the xlsx file, it's very difficult to identify which of the several million possibilities MS Excel is complaining about. what additional features (such as autofilters, charts, etc) are you using? What version of MS Excel? If you write the file to the server's disk rather than saving via the browser, do you still have the same problem? Does it still complain if you use the Excel5 Writer and save as an .xls file? Can you upload a copy of the file to the PHPExcel website for investigation?
@Mark Baker : no on the server the file is properly generated and when i download it , the it opens successfully in excel without any problems.
That almost certainly means that your script is echoing something into the php://output stream, whether a leading or trailing space or blank line, or a gap between ?> and
sir, am uploading the excel file on the PHPExcel website, please check. would be of great help. there's just two columns and two rows and i have removed all spaces.
Получение значения ячейки по строкам и столбцам
Для получения значения ячейки, в листе сначала должна быть найдена ячейка с использованием метода getCellByColumnAndRow. Значение ячейки может быть получено с помощью следующей команды:
Решение
Вместо сохранения в файл, сохраните его в PHP: // outputDocs :
Это отправит это как есть в браузер.
Вы хотите добавить некоторые headersDocs во-первых, как это обычно происходит при загрузке файлов, поэтому браузер знает, какой тип у этого файла и как он должен называться (имя файла):
Сначала делайте заголовки, затем сохраняйте. Для заголовков Excel смотрите также следующий вопрос: Установка типа MIME для документа Excel .
Таким образом, окончательный код будет иметь следующие строки —
Я думаю, что эта строка:
Должен решить вашу проблему.
Пример чтения Excel файла при помощи класса PHPExcel
Для чтения данных с Excel файла необходимо подключить файл библиотеки PHPExcel и используется метод load() класса PHPExcel_IOFactory. Этот метод собирает данные всех со всех листов текущего документа:
Далее формируем массив из всех листов Excel файла с помощью цикла:
Вывод сформированного массива в виде HTML таблиц(ы) :
Читайте также: