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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.