导出jqgrid表格数据为EXCEL文件,通过tableExport.js插件。

今天公司项目需要做个导出功能,将jqgrid查询出的数据导出为EXCEL表格文件,期间遇到两个问题:

1.导出报错

uncaught exception: INVALID_CHARACTER_ERR: DOM Exception 5

,原因是插件是老外写的,不支持中文。

2.使用官方的导出代码//$('#jqgrid1').tableExport({ type: 'excel', fileName: new Date().getTime(), escape: 'false' });,导出的EXCEL文件没有表头,并且数据最上方多了一行空白行。

下面我们就来说说怎么处理这两个问题。

首先说一下这个插件下载地址:

Jquery tableExcel.js下载地址:https://github.com/kayalshri/tableExport.jquery.plugin

这个插件功能很强大,支持以下导出格式:

JSON
XML
PNG
CSV
TXT
SQL
MS - Word
Ms - Excel
Ms - Powerpoint
PDF

今天只介绍我在使用此插入导出EXCEL过程中遇到的问题解决方法。

第一个问题解决方法:

打开jquery.base64.js文件,

return {
decode: _decode,

代码上方,添加两个方法,代码如下:

  // private property
  var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    // private method for UTF-8 encoding
  function utf8Encode(string) {
      string = string.replace(/\r\n/g, "\n");
      var utftext = "";
      for (var n = 0; n < string.length; n++) {
          var c = string.charCodeAt(n);
          if (c < 128) {
              utftext += String.fromCharCode(c);
          }
          else if ((c > 127) && (c < 2048)) {
              utftext += String.fromCharCode((c >> 6) | 192);
              utftext += String.fromCharCode((c & 63) | 128);
          }
          else {
              utftext += String.fromCharCode((c >> 12) | 224);
              utftext += String.fromCharCode(((c >> 6) & 63) | 128);
              utftext += String.fromCharCode((c & 63) | 128);
          }
      }
      return utftext;
  }

  function encode(input) {
      var output = "";
      var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
      var i = 0;
      input = utf8Encode(input);
      while (i < input.length) {
          chr1 = input.charCodeAt(i++);
          chr2 = input.charCodeAt(i++);
          chr3 = input.charCodeAt(i++);
          enc1 = chr1 >> 2;
          enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
          enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
          enc4 = chr3 & 63;
          if (isNaN(chr2)) {
              enc3 = enc4 = 64;
          } else if (isNaN(chr3)) {
              enc4 = 64;
          }
          output = output +
              keyStr.charAt(enc1) + keyStr.charAt(enc2) +
              keyStr.charAt(enc3) + keyStr.charAt(enc4);
      }
      return output;
  }

然后将代码:

 return {
    decode: _decode,
    encode: _encode,
    VERSION: _VERSION
  };

改为:

return {
    decode: _decode,
    encode: function (str) {
        return encode(str);
    },
    VERSION: _VERSION
  };

即可解决。

第二个问题解决办法:

将默认导出代码修改为以下代码:

var tableid = "jq1";
        var dd = $("#gbox_" + tableid + ' .ui-jqgrid-htable thead');
        var ee = $('#' + tableid);
        ee.find('.jqgfirstrow').remove();//干掉多余的无效行
        ee.find('tbody').before(dd);//合并表头和表数据
        ee.find('tr.ui-search-toolbar').remove();//干掉搜索框
        ee.tableExport({ type: 'excel', escape: 'false', fileName: '导出' + new Date().getTime() });
        var a = $("#" + tableid).find('thead');//把合并后的表头和数据拆分
        $("#gbox_" + tableid + ' .ui-jqgrid-htable').append(a);

参考博客:

通过tableExport.js插件来实现导出Excel/Pdf/txt/json等 - xingyuqihuan的博客 - CSDN博客  https://blog.csdn.net/xingyuqihuan/article/details/79139778

jqgrid实现客户端导出Excel、txt、word、json等数据格式的文件 - 无欲则刚 - CSDN博客  https://blog.csdn.net/qq_29542611/article/details/72657802

 

转载于:https://www.cnblogs.com/hfzsjz/p/10272024.html

以下是一个简单的示例,可以将 jqGrid 中的数据导出Excel 文档: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>导出 jqGridExcel</title> <!-- 引入 jQueryjqGrid导出插件的 CSS 文件 --> <link rel="stylesheet" href="//cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.min.css"> <link rel="stylesheet" href="//cdn.bootcss.com/free-jqgrid/4.15.2/css/ui.jqgrid.min.css"> <link rel="stylesheet" href="//cdn.bootcss.com/jQuery-File-Download/1.4.2/css/jquery.fileDownload.css"> <!-- 引入 jQueryjqGridJS 文件 --> <script src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script src="//cdn.bootcss.com/free-jqgrid/4.15.2/jquery.jqgrid.min.js"></script> <!-- 引入导出插件JS 文件 --> <script src="//cdn.bootcss.com/jQuery-File-Download/1.4.2/js/jquery.fileDownload.min.js"></script> <script> $(function() { // 创建 jqGrid 表格 $("#myGrid").jqGrid({ url: "data.json", mtype: "GET", datatype: "json", colModel: [ { label: "序号", name: "id", key: true, width: 75 }, { label: "姓名", name: "name", width: 150 }, { label: "年龄", name: "age", width: 150 }, { label: "性别", name: "gender", width: 150 }, { label: "职业", name: "job", width: 150 }, ], height: 250, rowNum: 20, pager: "#pager", viewrecords: true, caption: "示例 jqGrid", }); // 导出按钮点击事件 $("#exportBtn").click(function() { // 获取表格数据并转换为 JSON 对象 var data = $("#myGrid").jqGrid("getRowData"); // 发送 POST 请求到后端,下载 Excel 文档 $.fileDownload("export.php", { httpMethod: "POST", data: { data: JSON.stringify(data), }, }); }); }); </script> </head> <body> <!-- jqGrid 表格 --> <table id="myGrid"></table> <div id="pager"></div> <!-- 导出按钮 --> <button id="exportBtn">导出 Excel</button> </body> </html> ``` 需要注意的是,上面的代码中有一行 `url: "data.json"`,它指定了 jqGrid 表格数据来源。在实际项目中,你需要根据需要替换成自己的数据接口。 另外还需要编写一个用于导出 Excel 文档的后端脚本,以下是 PHP 版本的示例: ```php <?php // 从 POST 请求中获取表格数据 $data = json_decode($_POST["data"], true); // 创建 Excel 文档 $filename = "export.xlsx"; $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 设置表头 $columns = array_keys($data[0]); foreach ($columns as $i => $column) { $sheet->setCellValueByColumnAndRow($i + 1, 1, $column); } // 填充数据 $row = 2; foreach ($data as $i => $item) { foreach ($columns as $j => $column) { $sheet->setCellValueByColumnAndRow($j + 1, $row, $item[$column]); } $row++; } // 输出 Excel 文件 $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header("Content-Disposition: attachment; filename=\"$filename\""); $writer->save("php://output"); ``` 上面的 PHP 脚本使用了 `PhpOffice\PhpSpreadsheet` 库来创建 Excel 文档。如果你使用其他语言,可以使用相应的库来完成同样的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值