【问题标题】:Exporting a dojo datagrid to a CSV file将 dojo 数据网格导出到 CSV 文件
【发布时间】:2011-05-25 08:35:03
【问题描述】:

我正在寻找一个 Javascript 函数,它将我的数据网格 (zero.grid.DataGrid) 中的数据导出到 CSV 文件或可以由电子表格应用程序打开的类似文件中。

有没有标准的方法可以做到这一点..

【问题讨论】:

    标签: javascript dojo widget export-to-csv


    【解决方案1】:
    <!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>
    

    【讨论】:

      【解决方案2】:

      我很难将 Exporter 插件与 EnhancedGrid 一起使用,并使用 servlet 作为后端。最后我使用 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>
      

      我写了一篇博文,这样我就不必再搜索了。

      Export Data from Grid in Dojo

      PS:建议仅将 iFrame 用于内部/内部 Web 应用程序。

      【讨论】:

      • 你能在后端提供servlet代码吗?后端是如何处理的?
      【解决方案3】:

      这就是您使用 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;
      
        ?>
      

      【讨论】:

        【解决方案4】:

        我正在寻找相同的东西并得到你的问题,但我找到了答案......

        您必须为 dojox.Enhancedgrid 使用 Exporter 插件

        “Exporter 插件提供了将网格数据导出为给定格式的功能”。

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

        问候

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-12
          • 1970-01-01
          • 1970-01-01
          • 2020-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多