Сетка данных Dojo в файл Excel

У меня есть вопрос об экспорте сетки данных Dojo в файл Excel. Я заставил его работать с CSV-файлом, используя экспортер Dojo и некоторый PHP-код. Тем не менее, как мне сделать это, чтобы сохранить как файл Excel. Я сейчас о груше и некоторых других библиотеках, но должно быть решение, подобное тому, которое я использую для 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);

                        }); 
}

Мой PHP-код работает с CSV:

<?

$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;
?> 

1 ответ

Решение

Вот хороший инструмент PHP, хорошо подходящий для этой цели.

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

Настройка довольно проста, у вас есть большая часть настроек для передачи файла.csv в качестве загружаемого вложения, попробуйте следующий код.

Преобразование CSV в XLS

Первые установочные файлы csv-data и классов

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

Другие вопросы по тегам