0

DojoデータグリッドをExcelファイルにエクスポートすることについて質問があります。dojoエクスポーターといくつかのphpコードを使用してcsvファイルで動作するようにしました。ただし、Excelファイルとして保存するにはどうすればよいですか。梨と他のいくつかのライブラリについて説明しますが、csvに使用しているものと同様のソリューションが必要です。また、dojoで独自のエクスポーターを作成する場合、csvエクスポーターに使用しているコードよりも具体的なものが必要ですか。また、xlsとして保存するには、phpコードで何を変更する必要がありますか。コードは以下のとおりです。よろしくお願いします。

私の道場エクスポーター:

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-データとクラス

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データの残りのコンテンツのループ行

// 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 に答える