table2csv:将表格转化为csv数据
参数:一个JSON对象
{
'repeatChar':'拆分单元格填充字符', //默认为null则将单元格值填充到拆分的每个单元格中,如果给定字符串则用给定字符串填充
'callback':'回调函数' //传入两个参数(csv,data),分别为csv字符串和data二维数组
}
(function($){
$.fn.table2csv=function(option){
if(option==null) option={};
if(option.repeatChar=='') option.repeatChar="-";
//计算行数列数
var rows=0;//行
var cols=0;//列
this.find("tr").each(function(){
rows+=1;
var tr=$(this);
var n=tr.find("td,th").length;
cols=Math.max(cols,n);
});
//document.title=("行/列:"+rows+"/"+cols);
//空数组准备
var data=new Array();
for(var i=0;i
var line=new Array();
for(var j=0;j
line.push('');
data.push(line);
}
//数据填充
var i=0;//当前行坐标
this.find("tr").each(function(){
var tr=$(this);
var j=0;//当前列坐标
tr.find("td,th").each(function(){
var td=$(this);
var colspan=1;
var rowspan=1;
var value=td.text();
if(td.attr("colspan")!=null) colspan=parseInt(td.attr("colspan"));
if(td.attr("rowspan")!=null) rowspan=parseInt(td.attr("rowspan"));
//定位CSV数组中第一个没有数据的单元格
for(var p=0;p
if(data[i][p]==''){ j=p; break; }
}
data[i][j]=value;//填充值
if(colspan+rowspan==2) return; //如果不是合并单元格,返回并继续each
//填充单元格区域
var fic=i+rowspan; //alert(value+i+":"+j);
for(var fi=i;fi
var fjc=j+colspan; //alert(""+j+"\r\n"+fic+":"+fjc);
for(var fj=j;fj
if((fj==j)&&(fi==i)) continue;
data[fi][fj]= (option.repeatChar==null)? value :option.repeatChar; //alert(test(data));
}
}
});
i++;
});
//填充完毕
//生成调试数据
var str="";
for(var i in data){
str+=data[i].join(",");
str+="\r\n";
}
if(option.callback!=null) option.callback(str,data);
};
/
$.fn.csv2table=function(param){
var isarray=param instanceof Array;
var data=null;
if(isarray)//数组直接用
data=param;
else{//csv字符串则转为数组
data=new Array();
var lines=param.split('\r\n');
for(var i=0;i
var cells=lines[i].split(',');
data.push(cells);
}
}
var table="
for(var i=0;i
table+="
";var cells=data[i];
for(var j=0;j
table+=("
"+cells[j]+"");table+="
";}
table+="
";table+=(isarray?"":"");
this.html(table);
}
})(jQuery);
测试界面(将表格中的内容转为csv,然后再将csv生成为第二个表格):