Подтвердить что ты не робот

Экспорт данных из php в excel

Мне нужно экспортировать данные из php (данные, полученные из базы данных mysql), чтобы преуспеть. Я использую Zend Framework. Мне нужно внести некоторые изменения в мои данные перед экспортом в excel. Фактически, мне действительно нужно создать ежемесячную кассовую книгу.

Я прочитал много документов, но оказался в беспорядке. Я действительно не понимаю, как мне начать. Мне действительно нужен PEAR? Нужно ли загружать любую библиотеку классов? Нет ли простого способа сделать это?

Заранее спасибо

4b9b3361

Ответ 1

Я предлагаю вам использовать большую библиотеку PHPExcel. Он действительно мощный, поддерживает множество форматов, может делать визуальное форматирование и прост в использовании.

Об этом можно узнать на веб-странице: http://phpexcel.codeplex.com/. (PHPExcelуже перемещен в https://github.com/PHPOffice/PHPExcel)

Пример использования:

    $objPHPExcel = new PHPExcel();
    /** You can set many properties */
    $objPHPExcel->getProperties()->setCreator("My company")
                 ->setLastModifiedBy("John Doe")
                 ->setTitle("Annual report")
                 ->setSubject("Sales")
                 ->setDescription("Annual sales report by John Doe")
                 ->setCategory("Finance");

    /** Choose one of sheets */
    $activeSheet = $objPHPExcel->setActiveSheetIndex(0);
    /** Simply set value of cell */
    $activeSheet->setCellValue("A1", 'plural');

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

Ответ 2

Я написал отчет о вариации в инвентаре из 94 строк, в котором я беру данные из MySQL (6 кбайт + записей на таблицу), создаю многомерный массив из данных MySQL, извлеченных из нескольких таблиц, а затем сбрасывает все в одну строку и генерирует .xls Таким образом:

<?php
////////////////////////////////// BEGIN SETUP
    $filename ="document_name.xls";
    header('Content-type: application/ms-excel');
    header('Content-Disposition: attachment; filename='.$filename);
////////////////////////////////// END SETUP
////////////////////////////////// BEGIN GATHER
    // Your MySQL queries, fopens, et cetera go here.
    // Cells are delimited by \t
    // \n is just like you might expect; new line/row below
    // E.G:
    $stuff="PART\tQTY\tVALUE\t\n";
    $stuff=$stuff."01-001-0001\t37\t28.76\t\n";
    $stuff=$stuff."01-001-0002\t6\t347.06\t\n";
    $stuff=$stuff."01-001-0003\t12\t7.11\t\n";
////////////////////////////////// END GATHER
// The point is to get all of your data into one string and then:
////////////////////////////////// BEGIN DUMP
    echo $stuff;
////////////////////////////////// END DUMP
?>

Не требуется никаких расширений.

Единственные предостережения в том, что я еще не понял, как выплевывать .xls без Excel, говоря мне, что данные могут быть повреждены - и я не пытался делать какое-либо форматирование или что-то более сложное, чем просто "экспорт" " данные. Файл/данные в порядке, конечно, но он генерирует предупреждение из Excel.

EDIT: я должен отметить, что "setup" и "dump" относятся к следующему: daniweb.com

Ответ 3

Вы можете использовать phpexcel библиотеку. Это позволяет вам писать и читать из разных форматов файлов электронных таблиц.

для интеграции с zend вы можете воспользоваться ссылкой .

Ответ 4

Вы можете использовать CSV для создания импортируемого формата для excel. Это самый простой способ сделать это.

CSV выглядит следующим образом:

"my first cellcontent", "my second cell content", "my third cell content"
"second line, first cell content", "etc", "etc

Каждая строка представляет строку Excel, вы помещаете содержимое ячейки между двойными кавычками и разделяете запятыми. Будьте осторожны с \r\n, если у вас есть некоторые из ваших данных, это может сломать ваш CSV и создать нежелательные новые строки.

Ответ 5

С небольшим количеством google вы бы нашли это: http://www.the-art-of-web.com/php/dataexport/

Подготовка данных

$data = array(
    array( "firstname" => "Mary", "lastname" => "Johnson", "age" => 25 ),
    array( "firstname" => "Amanda", "lastname" => "Miller", "age" => 18 ),
    array( "firstname" => "James", "lastname" => "Brown", "age" => 31 ),
    array( "firstname" => "Patricia", "lastname" => "Williams", "age" => 7 ),
    array( "firstname" => "Michael", "lastname" => "Davis", "age" => 43 ),
    array( "firstname" => "Sarah", "lastname" => "Miller", "age" => 24 ),
    array( "firstname" => "Patrick", "lastname" => "Miller", "age" => 27 )
);

Первым шагом является вывод данных в формате с разделителями табуляции (CSV также можно использовать, но немного сложнее). Для этого мы используем следующий код:

<?php
    header("Content-Type: text/plain");

    $flag = false;
    foreach( $data as $row ) {
        if( !$flag ) {
        // display field/column names as first row
        echo implode( "\t", array_keys( $row ) ) . "\r\n";
        $flag = true;
    }
    echo implode( "\t", array_values( $row ) ) . "\r\n";
}
exit;

?>

Мы устанавливаем тип содержимого в text/plain, чтобы результат можно было более легко просмотреть в браузере. В противном случае, поскольку нет форматирования HTML, вывод будет отображаться как одна строка текста.

Первая строка вывода будет заголовками столбцов (в этом случае используются имена полей). Значения разделяются вкладкой \t и строками с разрывом строки \n. Результат должен выглядеть примерно так:

firstname  lastname  age
Mary Johnson 25 
Amanda Miller 18 
James Brown 31 
Patricia    Williams     7 
Michael Davis 43 
Sarah Miller 24 
Patrick Miller 27

В этом коде есть слабость, которая может быть не сразу очевидной. Что делать, если одно из полей, которые должны быть выведены, уже содержит один или несколько символов табуляции или, что еще хуже, новую строку? Это собирается выбросить весь процесс, поскольку мы полагаемся на эти символы, чтобы указывать разрывы столбцов и строк.

Решение состоит в том, чтобы "избежать" символов табуляции. В этом случае мы заменим вкладки литеральными \t и разрывами строк с литералом \n, чтобы они не влияли на форматирование:

<?php
    function cleanData( &$str ) {
        $str = preg_replace( "/\t/", "\\t", $str );
        $str = preg_replace("/\r?\n/", "\\n", $str);
    }

    header("Content-Type: text/plain");
    $flag = false;
    foreach( $data as $row ) {
        if( !$flag ) {
            // display field/column names as first row
            echo implode( "\t", array_keys( $row ) ) . "\r\n";
            $flag = true;
        }
        array_walk( $row, 'cleanData' );
        echo implode( "\t", array_values( $row ) ) . "\r\n";
    }
    exit;

?>

Теперь, прежде чем каждая строка будет эхом, любые символы табуляции заменяются "\ t", так что наши столбцы не разбиваются. Также любые разрывы строк внутри данных заменяются на "\n".