Сетка данных 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