JQuery 导入导出 Excel

摘要:
正在做一个小项目,从数据库中查询数据放在HTMLTable中.现在想要从这个table中导出数据来.另外用户需要选择导出的列.使用jQuery的导出插件可以完成这个需求.jQueryPlugintoExportHTMLTables例子:导入插件:[javascript]viewplaincopy˂/scr

正在做一个小项目, 从数据库中查询数据放在 HTML Table 中. 现在想要从这个 table 中导出数据来. 另外用户需要选择导出的列. 使用jQuery的导出插件可以完成这个需求.

jQuery Plugin to Export HTML Tables

例子:

导入插件:

[javascript]view plaincopy在CODE上查看代码片派生到我的代码片
  1. <scriptsrc="jquery-tableexport/tableExport.js"></script>
  2. <scriptsrc="jquery-tableexport/jquery.base64.js"></script>

html:

<ahref="#"onClick="$('#table-name').tableExport({type:'excel',separator:';',escape:'false'});"id="buttonExportData"class="ui-btn ui-btn-inline ui-mini ui-shadow ui-corner-all">Export XLS</a>

插件还有以下这些参数选项:

separator:','
ignoreColumn:[2,3],
tableName:'yourTableName'
type:'csv'
pdfFontSize:14
pdfLeftMargin:20
escape:'true'
htmlContent:'false'
consoleLog:'false'

通过 ignoreColumn 可以指定哪几列不被导出.

JS-XLSX

导入 excel 2007 以上版本, 可以使用 JS-XLSX 插件. 首先导入 js 包:

[javascript]view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!--https://github.com/SheetJS/js-xlsx/blob/master/jszip.js-->
  2. <scriptsrc="/path/to/jszip.js"></script>
  3. <!--https://github.com/SheetJS/js-xlsx/blob/master/xlsx.js-->
  4. <scriptsrc="/path/to/xlsx.js"></script>

Node.js 安装:

$ npminstallxlsx
$ node
> require('xlsx').readFile('excel_file.xlsx');

然后可以使用这个插件把 XLSX 文件转为 JSON, CSV, Formula 输出.

[javascript]view plaincopy在CODE上查看代码片派生到我的代码片
  1. functionget_radio_value(radioName){
  2. varradios=document.getElementsByName(radioName);
  3. for(vari=0;i<radios.length;i++){
  4. if(radios[i].checked){
  5. returnradios[i].value;
  6. }
  7. }
  8. }
  9. functionto_json(workbook){
  10. varresult={};
  11. workbook.SheetNames.forEach(function(sheetName){
  12. varroa=XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
  13. if(roa.length>0){
  14. result[sheetName]=roa;
  15. }
  16. });
  17. returnresult;
  18. }
  19. functionto_csv(workbook){
  20. varresult=[];
  21. workbook.SheetNames.forEach(function(sheetName){
  22. varcsv=XLSX.utils.sheet_to_csv(workbook.Sheets[sheetName]);
  23. if(csv.length>0){
  24. result.push("SHEET:"+sheetName);
  25. result.push("");
  26. result.push(csv);
  27. }
  28. });
  29. returnresult.join(" ");
  30. }
  31. functionto_formulae(workbook){
  32. varresult=[];
  33. workbook.SheetNames.forEach(function(sheetName){
  34. varformulae=XLSX.utils.get_formulae(workbook.Sheets[sheetName]);
  35. if(formulae.length>0){
  36. result.push("SHEET:"+sheetName);
  37. result.push("");
  38. result.push(formulae.join(" "));
  39. }
  40. });
  41. returnresult.join(" ");
  42. }
  43. vartarea=document.getElementById('b64data');
  44. functionb64it(){
  45. varwb=XLSX.read(tarea.value,{type:'base64'});
  46. process_wb(wb);
  47. }
  48. functionprocess_wb(wb){
  49. varoutput="";
  50. switch(get_radio_value("format")){
  51. case"json":
  52. output=JSON.stringify(to_json(wb),2,2);
  53. break;
  54. case"form":
  55. output=to_formulae(wb);
  56. break;
  57. default:
  58. output=to_csv(wb);
  59. }
  60. if(out.innerText===undefined)out.textContent=output;
  61. elseout.innerText=output;
  62. }
  63. vardrop=document.getElementById('drop');
  64. functionhandleDrop(e){
  65. e.stopPropagation();
  66. e.preventDefault();
  67. varfiles=e.dataTransfer.files;
  68. vari,f;
  69. for(i=0,f=files[i];i!=files.length;++i){
  70. varreader=newFileReader();
  71. varname=f.name;
  72. reader.onload=function(e){
  73. vardata=e.target.result;
  74. //varwb=XLSX.read(data,{type:'binary'});
  75. vararr=String.fromCharCode.apply(null,newUint8Array(data));
  76. varwb=XLSX.read(btoa(arr),{type:'base64'});
  77. process_wb(wb);
  78. };
  79. //reader.readAsBinaryString(f);
  80. reader.readAsArrayBuffer(f);
  81. }
  82. }
  83. functionhandleDragover(e){
  84. e.stopPropagation();
  85. e.preventDefault();
  86. e.dataTransfer.dropEffect='copy';
  87. }
  88. if(drop.addEventListener){
  89. drop.addEventListener('dragenter',handleDragover,false);
  90. drop.addEventListener('dragover',handleDragover,false);
  91. drop.addEventListener('drop',handleDrop,false);
  92. }

插件作者地址:author

不使用 HTML5 的话, 就要上传文件到服务器端, 服务器再来解析处理文件.例子如下:

  1. @using(Html.BeginForm("Index","Home",FormMethod.Post,new{enctype="multipart/form-data"}))
  2. {
  3. <inputtype="file"name="file"/>
  4. <inputtype="submit"value="OK"/>
  5. }
publicclassHomeController:Controller
{
    // This action renders the form
    publicActionResultIndex()
    {
        returnView();
    }
    // This action handles the form POST and the upload
    [HttpPost]
    publicActionResultIndex(HttpPostedFileBasefile)
    {
        // Verify that the user selected a file
        if(file !=null&&file.ContentLength>0)
        {
            // extract only the fielname
            varfileName =Path.GetFileName(file.FileName);
            // store the file inside ~/App_Data/uploads folder
            varpath =Path.Combine(Server.MapPath("~/App_Data/uploads"),fileName);
            file.SaveAs(path);
        }
        // redirect back to the index action to show the form once again
        returnRedirectToAction("Index");
    }
}

深圳一朋友说使用jquery.base64.js时发现对于中文直接抛出异常,作者压根不处理汉字的情况,因此

对其进行修正,关键函数为:

jQuery.base64 = (function ($) {

var _PADCHAR = "=",
_ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
_VERSION = "1.1"; //Mr. Ruan fix to 1.1 to support asian char(utf8)

function _getbyte64(s, i) {
// This is oddly fast, except on Chrome/V8.
// Minimal or no improvement in performance by using a
// object with properties mapping chars to value (eg. 'A': 0)

var idx = _ALPHA.indexOf(s.charAt(i));

if (idx === -1) {
throw "Cannot decode base64";
}

return idx;
}

function _decode_chars(y, x) {
while (y.length > 0) {
var ch = y[0];
if (ch < 0x80) {
y.shift();
x.push(String.fromCharCode(ch));
} else if ((ch & 0x80) == 0xc0) {
if (y.length < 2) break;
ch = y.shift();
var ch1 = y.shift();
x.push(String.fromCharCode(((ch & 0x1f) << 6) + (ch1 & 0x3f)));
} else {
if (y.length < 3) break;
ch = y.shift();
var ch1 = y.shift();
var ch2 = y.shift();
x.push(String.fromCharCode(((ch & 0x0f) << 12) + ((ch1 & 0x3f) << 6) + (ch2 & 0x3f)));
}
}
}

function _decode(s) {
var pads = 0,
i,
b10,
imax = s.length,
x = [],
y = [];

s = String(s);

if (imax === 0) {
return s;
}

if (imax % 4 !== 0) {
throw "Cannot decode base64";
}

if (s.charAt(imax - 1) === _PADCHAR) {
pads = 1;

if (s.charAt(imax - 2) === _PADCHAR) {
pads = 2;
}

// either way, we want to ignore this last block
imax -= 4;
}

for (i = 0; i < imax; i += 4) {
var ch1 = _getbyte64(s, i);
var ch2 = _getbyte64(s, i + 1);
var ch3 = _getbyte64(s, i + 2);
var ch4 = _getbyte64(s, i + 3);

b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6) | _getbyte64(s, i + 3);
y.push(b10 >> 16);
y.push((b10 >> 8) & 0xff);
y.push(b10 & 0xff);
_decode_chars(y, x);
}
switch (pads) {
case 1:
b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6);
y.push(b10 >> 16);
y.push((b10 >> 8) & 0xff);
break;

case 2:
b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12);
y.push(b10 >> 16);
break;
}
_decode_chars(y, x);
if (y.length > 0) throw "Cannot decode base64";
return x.join("");
}

function _get_chars(ch, y) {
if (ch < 0x80) y.push(ch);
else if (ch < 0x800) {
y.push(0xc0 + ((ch >> 6) & 0x1f));
y.push(0x80 + (ch & 0x3f));
} else {
y.push(0xe0 + ((ch >> 12) & 0xf));
y.push(0x80 + ((ch >> 6) & 0x3f));
y.push(0x80 + (ch & 0x3f));
}
}

function _encode(s) {
if (arguments.length !== 1) {
throw "SyntaxError: exactly one argument required";
}

s = String(s);
if (s.length === 0) {
return s;
}

//s = _encode_utf8(s);
var i,
b10,
y = [],
x = [],
len = s.length;
i = 0;
while (i < len) {
_get_chars(s.charCodeAt(i), y);
while (y.length >= 3) {
var ch1 = y.shift();
var ch2 = y.shift();
var ch3 = y.shift();
b10 = (ch1 << 16) | (ch2 << 8) | ch3;
x.push(_ALPHA.charAt(b10 >> 18));
x.push(_ALPHA.charAt((b10 >> 12) & 0x3F));
x.push(_ALPHA.charAt((b10 >> 6) & 0x3f));
x.push(_ALPHA.charAt(b10 & 0x3f));
}
i++;
}

switch (y.length) {
case 1:
var ch = y.shift();
b10 = ch << 16;
x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 0x3F) + _PADCHAR + _PADCHAR);
break;

case 2:
var ch1 = y.shift();
var ch2 = y.shift();
b10 = (ch1 << 16) | (ch2 << 8);
x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 0x3F) + _ALPHA.charAt((b10 >> 6) & 0x3f) + _PADCHAR);
break;
}

return x.join("");
}

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

} (jQuery));

免责声明:文章转载自《JQuery 导入导出 Excel》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇postgresql笔记如何在linux下安装idea下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

canvas遇到的一些问题

1、移动端无法全屏问题 问题描述:由于canvas的width和height只能设置px值,不支持rem单位,所以想在移动设备屏幕分辨率繁杂的情况下达到canvas铺满全屏的效果很困难。   解决方法:通过js获取到手机屏幕的clientWidth值,赋给canvas,以此来达到适配全屏的效果; 1 2 3 4 5 varclientWidth...

layer 弹出框 回传事件获取弹出框的一些属性

$('.opendialog').click(function () { var ids = $(this).attr("data-id"); //alert(ids); layer.open({ id: "add",...

树莓派开启crontab日志

crontab是Linux下类似Windows计划任务的一个程序,之前利用过这个程序来设定闹钟。后来发现找不到执行任务之后产生的日志文件。有时候需要配合日志文件作一些调试功能,经过一番折腾发现,系统默认禁止了日志文件的产生,重新开启即可。 实验环境 硬件:树莓派3b一台 操作系统:Raspbian with desktop 配置日志文件rsyslog.c...

jenkins pipeline实现自动构建并部署至k8s

在日常开发中,经常会有发布的需求,而且经常会碰到各种环境,比如:开发环境、测试环境、生产环境。虽然可以使用手动构建、上传服务器部署的方式,但在微服务架构下一个项目经常包含多个微服务的部署,如果用手动方式就会非常繁琐而且容易出错。使用jenkins结合SCM可以实现代码的整个自动化构建部署过程。 本文中自动构建部署过程大致完成了以下步骤: 提交spring...

es6 let

1.变量 var  function let const class import    定义变量的关键字 备注     不能忽略函数的形参      函数的私有变量 var     定义变量 var 定义变量能够提升但是不能定义  给window添加一个对应的属性 function    即可以提前声明     同时还定义了 定义:所谓的定义  就是给这...

jQuery(二)

二、jQuery的选择器 我们以前在CSS中学习的选择器有: 今天来学习一下jQuery 选择器。 jQuery选择器是jQuery强大的体现,它提供了一组方法,让我们更加方便的获取到页面中的元素。 1、jQuery 的基本选择器 代码如下: <!DOCTYPE html> <html lang="en"> <...