Экспорт сетки данных dojo в файл CSV

Я ищу функцию Javascript, которая будет экспортировать мою сетку данных (zero.grid.DataGrid), полную данных, в файл CSV или что-то подобное, которое можно открыть с помощью приложения для работы с электронными таблицами.

Есть ли какой-нибудь стандартный способ сделать это там..


person RenegadeAndy    schedule 14.12.2010    source источник


Ответы (3)


У меня были трудные времена с использованием плагина Exporter с EnhancedGrid, использующим сервлет в качестве серверной части. Наконец, я заставил это работать с помощью iFrame:

<!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>

Я написал сообщение в блоге, чтобы мне не пришлось искать снова.

Экспорт данных из сетки в Dojo

PS: рекомендуется использовать iFrame только для внутренних веб-приложений.

person Piyush-Ask Any Difference    schedule 18.04.2013
comment
Не могли бы вы дать код сервлета в бэкэнде? Как обрабатываются вещи в бэкэнде? - person Justin John; 11.01.2014

Вот как вы можете это сделать, используя PHP-скрипт на стороне сервера.

           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;

  ?>
person picololo    schedule 14.01.2012

Я ищу то же самое и получаю ваш вопрос, но я нахожу ответ...

Вы должны использовать подключаемый модуль Exporter для dojox.Enhancedgrid.

«Плагин Exporter предоставляет функции для экспорта данных сетки в заданный формат».

http://docs.dojocampus.org/dojox/grid/EnhancedGrid/plugins/Exporter

С уважением

person Edward    schedule 12.01.2011