0

我有一个关于将 dojo 数据网格导出到 excel 文件的问题。我已经使用 dojo 导出器和一些 php 代码使其与 csv 文件一起工作。但是,如何将其保存为 excel 文件。我现在介绍 pear 和其他一些库,但必须有与我用于 csv 的解决方案类似的解决方案。另外,当我在 dojo 中创建自己的导出器时,它是否需要比我用于 csv 导出器的代码更具体。另外,我需要在 php 代码中更改什么以使其另存为 xls。代码如下。提前非常感谢。

我的道场出口商:

function exportCsv(){
    var g = dijit.byId("grid");
    g.exportGrid("csv",{
                writerArgs: {
                    separator: ","
                }
                }, function(str){


                        var form = document.createElement('form');
                        dojo.attr(form, 'method', 'POST');
                        document.body.appendChild(form);
                        dojo.io.iframe.send({
                                url: "csv.php",
                                form: form,
                                method: "POST",
                                content: {exp: str},
                                timeout: 15000
                        });
                        document.body.removeChild(form);

                        }); 
}

我使用 csv 的 php 代码:

<?

$time = time();
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=\"grid_$time.csv\"");
$exportedData = $_POST['exp'];


echo stripslashes($exportedData);
exit;
?> 
4

1 回答 1

2

这是一个不错的 PHP 工具,非常适合此目的。

http://www.phpclasses.org/package/1919-PHP-Stream-wrapper-to-read-and-write-MS-Excel-files.html

设置非常简单,您已经将大部分设置为将 .csv 文件作为下载附件传递,请尝试以下代码。

将 CSV 转换为 XLS

第一个设置文件 csv-data 和 classes

require_once "excel.php"; 
define('_CSV_SEPARATOR_', ',');
// the excel class setsup xlsfile stream writer, point it to a tmp file
$export_file = "xlsfile://tmp/example.xls"; 
// the csv-contents must be put into an array, 
// serialized and sent to the stream
$import_file = "/path/to/CSV_FILE.csv";
$import=explode("\n", file_get_contents($import_file));
// column names should be first line
$header = array_shift($import);

确保一切看起来都很好

$header = explode(_CSV_SEPARATOR_, $header);
for($i = 0; $i < count($header); $i++)
    $header[$i] = trim($header[$i]);

在 csv-data 的剩余内容中循环行

// rest of text is data, split em up and list them with array indices,
// and associative names as key in the rowdata
$assocData = array();

foreach($import as $line) {
   $row = explode(_CSV_SEPARATOR_, $line);
   $rowData = array();
   $unknowncount = 0;
   for($i = 0; $i < count($row); $i++) {
       if(!empty($header[$i])) $column = $header[$i];
       else $column = 'UNK'.$unknowncount++;

       $rowData[$column] = trim($row[$i]);
   }
   $assocData[]=$rowData;
}

现在,我们将数据写入导出 tmp 文件并完成转换

$fp = fopen($export_file, "wb"); 
if (!is_resource($fp)) 
{ 
    die("Cannot open $export_file"); 
} 
fwrite($fp, serialize($assocData)); 
fclose($fp); 

将输出的 tmp 文件传输到客户端

$export_file = "xlsfile://tmp/example.xls"; 
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT"); 
header ("Cache-Control: no-cache, must-revalidate"); 
header ("Pragma: no-cache"); 
header ("Content-type: application/x-msexcel"); 
header ("Content-Disposition: attachment; filename=\"" . basename($export_file) . "\"" ); 
header ("Content-Description: PHP/INTERBASE Generated Data" ); 
readfile($export_file); 
exit; 

祝你好运,享受:D

于 2012-08-01T21:25:21.000 回答