05.07.2010

PHP работа с Excel

По просьбам читателей сегодня пишу пост о дружбе MS Excel'я и PHP , сразу скажу чтобы потом не закидали камнями что дружат они ущербно , минут десять я потратил, чтобы найти разработку с помощью которой можно создавать excel'евские таблицы и ещё около часа искал класс с помощью которого это можно будет прочитать )) Начну с создания таблицы.



Есть класс под названием Excel Writer с помощью которого можно с лёгкостью создать excel'евский файлик вот таким образом
include("excelwriter.inc.php");
$excel=new  ExcelWriter("myXls.xls");
if($excel==false)    
echo  $excel->error;
$myArr=array("Name","Last  Name","Address","Age");
$excel->writeLine($myArr);
$myArr=array("Sriram","Pandit","23 mayur vihar",24);
$excel->writeLine($myArr);

$excel->writeRow();
$excel->writeCol("Manoj");
$excel->writeCol("Tiwari");
$excel->writeCol("80 Preet Vihar");
$excel->writeCol(24);
 
$excel->writeRow();
$excel->writeCol("Harish");
$excel->writeCol("Chauhan");
$excel->writeCol("115 Shyam  Park Main");
$excel->writeCol(22);

$myArr=array("Tapan","Chauhan","1st Floor Vasundhra",25);
$excel->writeLine($myArr);

$excel->close();
echo "data is write into myXls.xls Successfully.";
В папке со скриптом у меня появился файл myXls.xls , который открылся двумя экселями 2007 и 2003
php 
excel














Скачать класс:
http://www.phpclasses.org/browse/download/zip/package/2037/name/excelwriter-2004-12-30.zip
http://slil.ru/26310473

Для того чтобы читать таблицы созданные в excel'е вам понадобиться класс под названием Spreadsheet Excel Reader , для его работы необходим модуль PEAR, но на линукс хостинге у меня всё работало и так, без дополнительных установок. Еще в файле Excel/reader.php 31 строчку я заменил с
require_once 'Spreadsheet/Excel/Reader/OLERead.php';
на
require_once 'Excel/oleread.inc';
Пример у меня выглядел следующим образом:
require_once ('Excel/reader.php');

$data  = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('cp-1251');
$data->setUTFEncoder('mb');  $data->read('filename.xls');

echo ('<table>');  
for  ($i = 1; $i < = $data->sheets[0]['numRows']; $i++)
{
    echo('<tbody><tr>');
    for ($j = 1; $j < =  $data->sheets[0]['numCols']; $j++)
    {
        echo  ('<td>'.$data->sheets[0]['cells'][$i][$j].'</td>');      
    }      
    echo('</tr>');  
}  
echo ('</tbody></table>');

Скрипт отлично распарсил созданный мною файл и выдал на экран такую же таблицу только в HTML'е.
Скачать класс:
http://downloads.sourceforge.net/phpexcelreader/phpExcelReader.zip

Я бы не советовал организовывать серьёзные проекты на классе Spreadsheet Excel Reader  , т.к. во время поиска увидел массу людей не довольных его работой, он плохо справляется с файлами состоящих из нескольких листов или с вычисляемыми полями. Встретил одну коммерческую разработку, которая творит чудеса и даже разбивает результат по листам ,вот демо проекта.

Источник

3 комментария:

  1. Как сделать, чтобы числа выводились с отделением тысяч?
    1 000

    ОтветитьУдалить
  2. Как вариант, использовать функцию number_format, например:

    $myNumber = 123456.784321;
    // Выводит "123 456,78"
    echo number_format( $myNumber, 2, ',', ' ' );

    ОтветитьУдалить
  3. Анонимный29 ноября, 2011 16:54

    Я вывожу русские слова так:

    $myArr=array("Номер","Имя","Фамилия","Почта");
    $excel->writeLine($myArr);

    но в Excel документе получаю какието кракозябры

    ОтветитьУдалить