Exportieren eines Dojo Datenraster in eine CSV-Datei
-
09-10-2019 - |
Frage
Ich suche eine Javascript-Funktion zu erhalten, die meine Datenraster exportieren (zero.grid.DataGrid) vollen Daten in eine CSV-Datei oder etwas ähnliches, die von einem Tabellenkalkulationsprogramm geöffnet werden können.
Gibt es eine standardisierte Möglichkeit, dies zu tun gibt ..
Lösung
Ich hatte harte Zeit mit der Verwendung von Exporter-Plugin mit EnhancedGrid Servlet als Backend verwenden. Schließlich habe ich es durch die Verwendung iFrame arbeiten:
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CISROMM - Master Milestone List Editor</title>
<!-- Include dojo dependencies -->
<link rel="stylesheet" href="js/dojoroot/dojo/resources/dojo.css">
<link rel="stylesheet" href="js/dojoroot/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="js/dojoroot/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css">
<link rel="stylesheet" href="js/dojoroot/dojox/grid/enhanced/resources/EnhancedGrid.css">
<link rel="stylesheet" href="js/dojoroot/dojox/grid/resources/claroGrid.css">
<script src="js/dojoroot/dojo/dojo.js"
data-dojo-config="isDebug: true,parseOnLoad: true">
</script>
<!-- Include dojo dependencies -->
<!-- Require the widgets -->
<script>
dojo.require("dojox.grid.EnhancedGrid");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dojox.grid.enhanced.plugins.exporter.CSVWriter");
dojo.require("dojo.io.iframe");
<!-- Require the widgets -->
<!-- Data Export Handler -->
function exportAll(){
dijit.byId("grid").exportGrid("csv", function(str){
dojo.io.iframe.create('exportFrame', 'exportFrameLoaded()', '');
dojo.io.iframe._currentDfd = null;
dojo.io.iframe.send({
url: "/ExportGrid.json",
content:{data:str}
});
});
};
<!-- Data Export Handler -->
var grid, store;
<!-- Grid Creation -->
dojo.ready(function(){
store = new dojo.data.ItemFileWriteStore({ url: 'PopulateMsListEditor.json', urlPreventCache: 'yes', clearOnClose: 'yes' });
grid = new dojox.grid.EnhancedGrid({
store: store,
rowSelector: 'auto',
query: {id: "*"} ,
plugins: {
exporter: true
},
structure: [
{field: 'msConstId', width: '20%', name: 'Milestone',hidden: true},
{field: 'name', width: '20%', name: 'Milestone',editable: true}
]
},"grid");
grid.startup();
});
</script>
</head>
<body class="claro">
<button id="exportBtn" data-dojo-type="dijit.form.Button"
data-dojo-props="
iconClass:'dijitIconFile',
showLabel:true,
onClick:function() {
exportAll();
}">
Export to Excel
</button>
<div id="grid" style="width: 560px;height: 680px;"></div>
</body>
</html>
Ich habe eine Blog-Post so geschrieben, dass ich wieder nicht suchen.
Exportieren von Daten von Grid in Dojo
PS:. Es wird empfohlen, iFrame zu verwenden nur für den internen / Inhouse-Web-Anwendungen
Andere Tipps
Dies ist, wie Sie es erreichen, dass ein PHP-Server-Skript verwendet wird.
grid.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: "CSVexport.php",
form: form,
method: "POST",
content: {exp: str},
timeout: 15000
});
document.body.removeChild(form);
}
);
CSVexport.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 $exportedData;
?>
Ich bin für die gleiche Suche und Ihre Frage, aber ich die Antwort finden ...
Sie müssen das Exporter Plugin für den dojox.Enhancedgrid
verwenden"Exporter Plugin bietet Funktionen, um die Rasterdaten in einem bestimmten Format zu exportieren".
http://docs.dojocampus.org/dojox/grid/EnhancedGrid/ plugins / Exporter
Viele Grüße
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CISROMM - Master Milestone List Editor</title>
<!-- Include dojo dependencies -->
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/resources/dojo.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dijit/themes/tundra/tundra.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dijit/themes/claro/claro.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dijit/themes/claro/document.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dojox/grid/enhanced/resources/claro/EnhancedGrid.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.8/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css">
<script src='http://ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js'></script>
<!-- Include dojo dependencies -->
<!-- Require the widgets -->
<script>
dojo.require("dojox.grid.EnhancedGrid");
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dojox.grid.enhanced.plugins.exporter.CSVWriter");
dojo.require("dojo.io.iframe");
<!-- Require the widgets -->
<!-- Data Export Handler -->
function exportAll(){
dijit.byId("grid").exportGrid("csv", function(str){
/*dojo.io.iframe.create('exportFrame', 'exportFrameLoaded()', '');
dojo.io.iframe._currentDfd = null;
dojo.io.iframe.send({
url: "/ExportGrid.json",
content:{data:str}
});*/
//alert(str);
document.getElementById("output").value=str;
});
};
<!-- Data Export Handler -->
var grid, store;
<!-- Grid Creation -->
dojo.ready(function(){
data = {
identifier: 'id',
label: 'id',
items: []
};
data_list = [
{ col1: "normal", col2: false, col3: "new", col4: 'But are not followed by two hexadecimal', col5: 29.91, col6: 10, col7: false },
{ col1: "important", col2: false, col3: "new", col4: 'Because a % sign always indicates', col5: 9.33, col6: -5, col7: false },
{ col1: "important", col2: false, col3: "read", col4: 'Signs can be selectively', col5: 19.34, col6: 0, col7: true },
{ col1: "note", col2: false, col3: "read", col4: 'However the reserved characters', col5: 15.63, col6: 0, col7: true },
{ col1: "normal", col2: false, col3: "replied", col4: 'It is therefore necessary', col5: 24.22, col6: 5.50, col7: true },
{ col1: "important", col2: false, col3: "replied", col4: 'To problems of corruption by', col5: 9.12, col6: -3, col7: true },
{ col1: "note", col2: false, col3: "replied", col4: 'Which would simply be awkward in', col5: 12.15, col6: -4, col7: false }
];
var rows = 100;
for(var i=0, l=data_list.length; i<rows; i++){
data.items.push(dojo.mixin({ id: i }, data_list[i%l]));
}
// global var "test_store"
store = new dojo.data.ItemFileWriteStore({data: data});
grid = new dojox.grid.EnhancedGrid({
store: store,
rowSelector: 'auto',
query: {id: "*"} ,
plugins: {
exporter: true
},
structure: [
{field: 'col1', width: '20%', name: 'col1',hidden: false},
{field: 'col2', width: '20%', name: 'col2',hidden: false},
{field: 'col3', width: '20%', name: 'col3',hidden: false},
{field: 'col4', width: '20%', name: 'col4',editable: true}
]
},"grid");
grid.startup();
});
</script>
</head>
<body class="claro">
<button id="exportBtn" onClick="exportAll();">
Export to Excel
</button>
<div id="grid" style="width: 560px;height: 680px;"></div>
<textarea id="output" style="width: 560px;height: 680px;"/>
</body>
</html>