You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
3.6 KiB

/*
生成EXCEL的数据格式定义:
{
name: '',
widths: [xxx,…,xxx],
clazz" '',
style: '',
data: [
{
height: xxx,
clazz" '',
style: '',
cell: [
{
range: 'xxx.xxx',
text: '',
clazz: '',
style: ''
},…{
}
]
},…,{
}
], …,[
]
}
*/
(function($) {
$.fn.exportTableData = function(options) {
var opts = $.extend({}, $.fn.exportTableData.defaults, options);
var table = $(this[0]);
if (table.attr('nodeName').toUpperCase() != 'TABLE')
return null;
var result = {
widths: [],
data: []
};
readCSS(result, table);
var cols = table.find('col');
cols.each(function(i) {
result.widths[i] = $(this).width();
})
var trs = table.find('tr');
trs.each(function(row) {
var tr = $(this);
result.data[row] = {
height: tr.height(),
cell: []
};
readCSS(result.data[row], tr);
var tds = tr.find('td');
tds.each(function(col) {
var td = $(this);
var val = td.html();
if (opts.callback)
val = opts.callback(tr, td, row, col, val);
result.data[row].cell[col] = {
text: val
}
readRange(result.data[row].cell[col], td);
readCSS(result.data[row].cell[col], td);
})
})
return result;
function readRange(data, el) {
var rowSpan = el.attr('rowSpan');
var colSpan = el.attr('colSpan');
rowSpan = rowSpan ? parseInt(rowSpan) : 1;
colSpan = colSpan ? parseInt(colSpan) : 1;
if (rowSpan != 1 || colSpan != 1)
data.range = rowSpan + '.' + colSpan;
}
function readCSS(data, el) {
var clazz = el.attr('class');
if (clazz)
data.clazz = clazz;
var style = el.attr('style');
if (style)
data.style = style;
}
};
$.fn.exportTableData.defaults = {
callback: function(tr, td, row, col, val) {
return val;
}
};
$.fn.parseImportTableConfig = function(options) {
var opts = $.extend({}, $.fn.parseImportTableConfig.defaults, options);
var table = $(this[0]);
if (table.attr('nodeName').toUpperCase() != 'TABLE')
return null;
var result = '';
var trs = table.find('tr');
trs.each(function(row) {
var tr = $(this);
var tds = tr.find('td');
tds.each(function(col) {
var td = $(this);
if (opts.callback) {
if (opts.callback({
tr: tr,
td: td,
row: row,
col: col
}) == false)
return;
}
result += row + '.' + col + ' ';
})
})
return result;
};
$.fn.parseImportTableConfig.defaults = {
callback: function(params) {
return true;
}
};
$.fn.importTableData = function(data, options) {
var opts = $.extend({}, $.fn.importTableData.defaults, options);
var table = $(this[0]);
if (table.attr('nodeName').toUpperCase() != 'TABLE')
return null;
var importTds = [];
var trs = table.find('tr');
trs.each(function(row) {
var tr = $(this);
var tds = tr.find('td');
tds.each(function(col) {
var td = $(this);
var key = row + '.' + col;
if (typeof(data[key]) == 'undefined')
return;
var params = {
tr: tr,
td: td,
row: row,
col: col,
val: data[key]
};
if (opts.callback) {
if (opts.callback(params) == false)
return;
}
var val = params.val;
var orgVal = td.html();
if (val != null && val != orgVal) {
td.html(val);
importTds[importTds.length] = td;
}
})
})
if (importTds.length > 0 && opts.finish)
opts.finish(importTds);
};
$.fn.importTableData.defaults = {
callback: function(params) {
return true;
},
finish: function(tds) {
}
};
})(jQuery);