Export de données vers excel avec Spreadsheet_Excel_Writer
Bonjour,
J'ai besoin d'exporter des données d'une base de données MySQL vers Excel sous Zend Framework 1.5.
Pour celà j'ai lu d'abord le tuto de MaitrePylos sur Spreadsheet_Excel_Writer et ensuite "Introduction à PHPExcel" paru dans le magazine de ce mois.
Mais j'ai des problèmes pour faire marcher ces scripts sous zend.
Voici ce à quoi ressemble mon bootstrap :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
<?php
define('ROOT_DIR', dirname(dirname(__FILE__)));
define('ROOT_UNIX','/var/www/html/zendsite/html');
define('ROOT_URL','http://localhost/zendsite/html');
if ( empty($_SERVER['HTTP_REFERER']) ) {
define('REFERER_PATH','/');
} else {
define('REFERER_PATH', str_replace(ROOT_URL, '', $_SERVER['HTTP_REFERER']));
}
//error_reporting(E_ALL|E_STRICT);
//Setup default TimeZone
date_default_timezone_set('Europe/Paris');
// Setup path to the Zend Framework files
set_include_path('.'
. PATH_SEPARATOR . ROOT_DIR.'/library'
. PATH_SEPARATOR . ROOT_DIR.'/html'
. PATH_SEPARATOR . ROOT_DIR.'/application/models'
. PATH_SEPARATOR . get_include_path());
require_once ('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Controller_Front');
//Setup Auth
Zend_Loader::loadClass('Zend_Auth');
Zend_Loader::loadClass('Zend_Auth_Result');
Zend_Loader::loadClass('Zend_Auth_Adapter_Interface');
// Set up autoload.
Zend_Loader::registerAutoload();
//Setup Config_Ini
Zend_Loader::loadClass('Zend_Config_Ini');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table');
Zend_Loader::loadClass('Zend_Db_Select');
//Load ini configuration
$config = new Zend_Config_Ini(ROOT_DIR.'/application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);
//Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');
Zend_Loader::loadClass('Zend_Controller_Router_Route_Regex');
//Setup database
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
$registry->set('db', $db);
//[SESSIONS GLOBALES]
//Setup Default Language
require_once ('Zend/Session/Namespace.php');
$aiw = new Zend_Session_Namespace('AIW');
if (!isset($aiw->langue)) {
$aiw->langue=1;
}
//Initialisation des sessions generales
if(!isset($aiw->secteur)){
$aiw->secteur='0';
}
if(!isset($aiw->pays)){
$aiw->pays=0;
}
if(!isset($aiw->keyword)){
$aiw->keyword='[keyword]';
}
if(!isset($aiw->aiw_title)){
$aiw->aiw_title='Mon titre';
}
if (!isset($aiw->base)) {
$aiw->base = "news";
}
//Fin sessions generales
//Setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory(ROOT_DIR.'/application/controllers');
/* Réecriture d'url pour optimiser le référencement */
$router = $frontController->getRouter();
$route = new Zend_Controller_Router_Route_Regex(
'(.+)-(\d+)\.html',
array(
'controller' => 'news',
'action' => 'show'
),
array(
1 => 'titre',
2 => 'idinfo'
),
'%s-%d.html'
);
$router->addRoute('NewsArchive', $route);
//desactiver le noViewRenderer
$frontController->setParam("noViewRenderer",true);
// initialiser smarty
include_once "Smarty/Smarty.class.php";
$smarty = new Smarty();
$smarty->template_dir = ROOT_DIR.'/application/views/scripts/';
$smarty->compile_dir = ROOT_DIR.'/smarty/templates_c/';
$smarty->config_dir = ROOT_DIR.'/smarty/configs/';
$smarty->cache_dir = ROOT_DIR.'/smarty/cache/';
// init viewRenderer
require_once ('Aiw_View_Smarty.php');
$view = new Aiw_View_Smarty();
$view->setEngine($smarty);
// initialiser le helper smarty
require_once(ROOT_DIR . "/application/views/helpers/Aiw_Controller_Action_Helper_ViewManager.php");
$viewManager = new Aiw_Controller_Action_Helper_ViewManager();
$viewManager->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewManager);
// run!
//$frontController->dispatch();
try {
$frontController->dispatch();
} catch(Exception $e) {
echo nl2br($e->__toString());
} |
J'ai pris soin de copier les classes OLE et Spreadsheet dans les dossier /library de mon site et
rajouter Zend_Loader::registerAutoload() dans mon bootstrap.
Voici le code de mon controller en me basant sur le tuto Spreadsheet_Excel_Writer:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
public function IndexAction()
{
//faire différents traitements, puis appeler la méthode pour le fichier Excel
//Ici je veux récupérer tous les enregistrements de ma table et les exporter vers excel
//DB
$db = Zend_Registry::get('db');
$select = new Zend_Db_Select($db);
$select = $db->select()
->distinct()
->from(array('a'=>'a_pays'),array(
'a.idpays',
'a.pays'))
->limit(20);
$stmt = $db->query($select);
$result = $stmt->fetchAll();
$this->Excel();
}
private function Excel()
{
/**
* On génère le fichier de base
*/
$workbook = new Spreadsheet_Excel_Writer();
$workbook->send('/home/Dev/Documents/base.xls');
$worksheet = $workbook->addWorksheet();
//J'ai gardé ceci juste pour tester le bon fonctionnement du module
$worksheet->write(1,2,'toto');
$workbook->close();
$workbook->sendFile();
/**
* Je renvoie vers l'action qui m'a appelée.
*/
$this->_redirect($this->IndexAction());
} |
Mais j'ai ces erreurs dans mon fichier journal sous linux :
Code:
1 2 3 4 5
|
[Tue May 19 15:19:10 2009] [error] [client 127.0.0.1] PHP Warning: require_once(PEAR.php) [<a href='function.require-once'>function.require-once</a>]:
failed to open stream: No such file or directory in /var/www/html/zendsite/library/Spreadsheet/Excel/Writer/Format.php on line 35
[Tue May 19 15:19:10 2009] [error] [client 127.0.0.1] PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]:
Failed opening required 'PEAR.php' (include_path='.:/var/www/html/zendsite/library:/var/www/html/zendsite/html:/var/www/html/zendsite/application/models:.:/usr/share/pear:/usr/share/php') in /var/www/html/zendsite/library/Spreadsheet/Excel/Writer/Format.php on line 35 |
Que dois-je faire pour réussir mon export de data vers excel ? merci d'avance pour vos apports.
PS : l'utilisation de PHPExcel ne me gêne pas du tout. Si vous le jugez mieux que Spreadsheet_Excel_Writer, veuillez m'indiquer alors comment l'intégrer à un projet zend.