Оригинальный автор: Подкаст на айсберге Когда я увидел эту статью, я был очень удивлен терпением оригинального автора. Хотя мы используем некоторые из них в повседневной жизни, автором перечислены не все. При написании Excel я использовал грушу. Library, я также использовал заголовок пакета, а также те, которые используют smarty, чтобы просто заменить xml, не говоря уже о csv. хе-хе. (Я не буду говорить о методе COM. Слишком много их читаемых. Я также писал статьи об использовании wps для генерации слов и т. д.)
Но когда я читал, я использовал только один, я забыл, что это было, поэтому мне пришлось вернуться и прочитать код. Поскольку оно основано на принципе заимствования, я его не помню.
Исходный адрес: http://xinsync.xju.edu.cn/index.php/archives/3858.
Исходное содержание:
Недавно в связи с потребностями проекта мне нужно разработать модуль для экспорта некоторых данных из системы в Excel, их изменения и последующего импорта обратно в систему. Я воспользовался возможностью, чтобы провести небольшое исследование по этому поводу, и вот некоторые из них.
По сути, существует два типа экспортируемых файлов:
1: Формат, подобный Excel. На самом деле это не файл Excel в традиционном понимании. Это просто потому, что Excel имеет сильную совместимость и его можно открыть правильно. После изменения файла такого типа и его последующего сохранения вам обычно будет предложено преобразовать его в файл Excel.
Достоинства: Просто.
Недостатки: Сложно сгенерировать формат. Если он используется для импорта, нужно написать соответствующую программу самостоятельно.
2: Формат Excel, соответствующий формату Excel, файл, созданный этим методом, ближе к реальному формату Excel.
Если при экспорте китайского языка появляются искаженные символы, вы можете попытаться преобразовать строку в gb2312. Например, следующая команда преобразует $yourStr из utf-8 в gb2312:
$yourStr = mb_convert_encoding(»gb2312″, «UTF-8», $yourStr);
Ниже подробно перечислены несколько методов.
1. Экспорт PHP в Excel
1. Первая рекомендация — чрезвычайно популярный PHPExcel, официальный сайт: http://www.codeplex.com/PHPExcel.
Его можно импортировать и экспортировать, а также экспортировать в формат Office 2007, который также совместим с 2003.
Скачанный пакет содержит документы и примеры, которые вы можете изучить самостоятельно.
Вот пример копирования абзаца:
PHP-код
<?php
/**
* PHPExcel
*
* Авторские права (C) 2006–2007 PHPExcel.
*
* Эта библиотека является бесплатным программным обеспечением, вы можете распространять ее и/или распространять;
* изменить его в соответствии с условиями GNU Lesser General Public
* Лицензия, опубликованная Фондом свободного программного обеспечения;
* версия 2.1 Лицензии или (по вашему выбору) любая более поздняя версия.
*
* Данная библиотека распространяется в надежде, что она будет полезна,
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемой гарантии;
* КОММЕРЧЕСКАЯ ПРИГОДНОСТЬ или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. GNU.
* Меньшая стандартная общественная лицензия для более подробной информации.
*
* Вы должны были получить копию GNU Lesser General Public.
* Лицензия вместе с этой библиотекой, если нет, то пишите в Free Software;
* Foundation, Inc., Франклин-стрит, 51, пятый этаж, Бостон, Массачусетс, 02110-1301, США.
*
* @категория PHPExcel
* @пакет PHPExcel
* @copyright Copyright (c) 2006–2007 PHPExcel ( http://www.codeplex.com/PHPExcel )
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @версия 1.5.0, 23 октября 2007 г.
*/
/** Отчет об ошибках */
error_reporting(E_ALL);
/** Включить путь **/
set_include_path(get_include_path(). PATH_SEPARATOR. '../Classes/');
/** PHPExcel */
включить «PHPExcel.php»;
/** PHPExcel_Writer_Excel2007 */
включить «PHPExcel/Writer/Excel2007.php»;
// Создаем новый объект PHPExcel
echo date('H:i:s') ” Создать новый объект PHPExceln”;
$objPHPExcel = новый PHPExcel();
// Устанавливаем свойства
echo date('H:i:s') ” Установить свойстваn”;
$objPHPExcel->getProperties()->setCreator("Мартен Баллиау");
$objPHPExcel->getProperties()->setLastModifiedBy(»Мартен Баллиау»);
$objPHPExcel->getProperties()->setTitle(»Тестовый документ Office 2007 XLSX»);
$objPHPExcel->getProperties()->setSubject(»Тестовый документ Office 2007 XLSX»);
$objPHPExcel->getProperties()->setDescrīption("Тестовый документ для Office 2007 XLSX, созданный с использованием классов PHP.");
$objPHPExcel->getProperties()->setKeywords(»office 2007 openxml php»);
$objPHPExcel->getProperties()->setCategory(»Файл результатов теста»);
//Добавляем некоторые данные
echo date('H:i:s') ”Добавить данныеn”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Привет');
$objPHPExcel->getActiveSheet()->setCellValue('B2', 'мир!');
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Привет');
$objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');
// Переименование листа
echo date('H:i:s') ”Переименовать листn”;
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Установите индекс активного листа на первый лист, чтобы Excel открывал его как первый лист
$objPHPExcel->setActiveSheetIndex(0);
// Сохраняем файл Excel 2007
echo date('H:i:s') ” Записать в формат Excel2007n”;
$objWriter = новый PHPExcel_Writer_Excel2007 ($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
// Эхо завершено
echo date('H:i:s') ” Запись файла завершена.rn”;
2. Используйте адрес загрузки класса Spreadsheet_Excel_Writer компании Pear: http://pear.php.net/package/Spreadsheet_Excel_Writer.
Этот класс зависит от OLE, адрес загрузки: http://pear.php.net/package/OLE.
Следует отметить, что формат экспортированного файла Excel является относительно старым. Если вы сохраните его после изменения, вам будет предложено преобразовать его в более новый формат.
Но вы можете установить формат, и это очень мощно.
PHP-код
<?php
require_once 'Таблица/Excel/Writer.php';
// Создание книги
$workbook = новая Spreadsheet_Excel_Writer();
// отправка HTTP-заголовков
$workbook->send('test.xls');
// Создание рабочего листа
$worksheet =& $workbook->addWorksheet('Мой первый рабочий лист');
//Фактические данные
$worksheet->write(0, 0, 'Имя');
$worksheet->write(0, 1, 'Возраст');
$worksheet->write(1, 0, 'Джон Смит');
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, 'Иоганн Шмидт');
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, 'Хуан Эррера');
$worksheet->write(3, 1, 32);
// Отправляем файл
$workbook->закрыть();
?>
3. Используйте smarty для создания форматов поддержки файлов XML или HTML, соответствующих спецификациям Excel, что является идеальным решением для экспорта. Однако экспортированный файл по сути является файлом XML. Если он используется для импорта, его необходимо обрабатывать отдельно.
Подробную информацию см. в сообщении героя rardge: http://bbs.chinaunix.net/viewthread.php?tid=745757.
Следует отметить, что если количество строк в экспортируемой таблице неопределенно, лучше всего указать «ss:» в шаблоне: удалите такие элементы, как ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”.
4. Используйте функцию упаковки, чтобы распечатать символы разрыва предложения, имитирующие формат Excel. После изменения и сохранения в Office 2003 всплывающее окно не появляется. Рекомендуется использовать этот метод.
Недостаток – отсутствие формата.
PHP-код
<?php
// Отправляем заголовок
заголовок("Прагма: общедоступный");
заголовок("Срок действия истекает: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Тип контента: приложение/принудительная загрузка");
header("Тип контента: приложение/октет-поток");
header("Тип контента: приложение/загрузка");;
header(»Content-Disposition: Attachment;filename=test.xls «);
header("Кодирование-передачи-контента: двоичный");
//Ячейка данных XLS
кслсБОФ();
xlsWriteLabel(1,0,"Моя первая строка Excel");
xlsWriteLabel(2,0,"Моя вторая строка Excel: ");
xlsWriteLabel(2,1,"Всем привет");
кслсЕОФ();
функция xlsBOF() {
echo package("сссссс", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
возвращаться;
}
функция xlsEOF() {
echo package("сс", 0×0A, 0×00);
возвращаться;
}
function xlsWriteNumber($Row, $Col, $Value) {
echo Pack("sssss", 0×203, 14, $Row, $Col, 0×0);
echo Pack("d", $Value);
возвращаться;
}
function xlsWriteLabel($Row, $Col, $Value) {
$L = стрлен($Значение);
echo Pack("ssssss", 0×204, 8 + $L, $Row, $Col, 0×0, $L);
эхо $Value;
возвращаться;
}
?>
Однако автору не удалось использовать его в 64-битной системе Linux, и все символы разрыва предложений стали искаженными.
5. Как использовать табуляцию и разрывы строк
Символ табуляции «t» позволяет пользователям разделять столбцы в одной строке, а символ новой строки «tn» может открывать следующую строку.
<?php
header("Тип контента: приложение/vnd.ms-execl");
header("Content-Disposition: Attachment; filename=myExcel.xls");
header("Прагма: без кэша");
заголовок("Срок действия истекает: 0");
/*первая строка*/
эхо "привет"."t";
echo "мир"."t";
эхо «tn»;
/*начало второй строки*/
echo «это вторая строка».»t»;
echo «Привет, красотка».»t»;
эхо «tn»;
?>
6. Используйте com
Если ваш PHP может открыть модуль com, вы можете использовать его для экспорта файлов Excel.
PHP-код
<?PHP
$filename = «c:/spreadhseet/test.xls»;
$лист1 = 1;
$лист2 = «лист2»;
$excel_app = new COM("Excel.application") или Die ("Не подключилось");
напечатайте «Имя приложения: {$excel_app->Application->value}n»;
напечатайте «Загруженная версия: {$excel_app->Приложение->версия}n»;
$Workbook = $excel_app->Workbooks->Open(»$filename») или Die(»Не открылось $filename $Workbook»);
$Worksheet = $Workbook->Рабочие листы($sheet1);
$Worksheet->активировать;
$excel_cell = $Worksheet->Range(»C4″);
$ excel_cell-> активировать;
$excel_result = $excel_cell->значение;
напечатайте «$excel_resultn»;
$Worksheet = $Workbook->Рабочие листы($sheet2);
$Worksheet->активировать;
$excel_cell = $Worksheet->Range(»C4″);
$ excel_cell-> активировать;
$excel_result = $excel_cell->значение;
напечатайте «$excel_resultn»;
#Чтобы закрыть все экземпляры Excel:
$Workbook->Закрыть;
unset($Рабочий лист);
unset($Workbook);
$excel_app->Рабочие книги->Закрыть();
$excel_app->Выйти();
не установлено ($ excel_app);
?>
Пример получше: http://blog.chinaunix.net/u/16928/showart_387171.html
1. Импорт PHP в Excel
1: по-прежнему используйте PHPExcel, официальный сайт: http://www.codeplex.com/PHPExcel .
2. Используйте PHP-ExcelReader, адрес загрузки: http://sourceforge.net/projects/phpexcelreader.
Пример:
PHP-код
<?php
require_once 'Excel/reader.php';
// ExcelFile($filename, $encoding);
$data = новая Spreadsheet_Excel_Reader();
// Устанавливаем выходную кодировку.
$data->setOutputEncoding('utf8');
$data->read('jxlrwtest.xls');
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->sheets[0]['cells'][$i][$j]."",";
}
эхо «n»;
}
?>
----------
Этот сайт принимает соглашение об авторских правах Creative Commons, которое требует указания авторства, некоммерческого характера и единообразия. Этот сайт приветствует любую некоммерческую перепечатку, но должен указать, что она взята из «Простой жизни дяди Фатти», сохранить исходную ссылку, а также должен указать, что оно взято из «Простой жизни дяди Фатти». укажите оригинальное название и ссылку.