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.

202 lines
3.6 KiB

  1. /*
  2. 生成EXCEL的数据格式定义
  3. {
  4. name: '',
  5. widths: [xxx,,xxx],
  6. clazz" '',
  7. style: '',
  8. data: [
  9. {
  10. height: xxx,
  11. clazz" '',
  12. style: '',
  13. cell: [
  14. {
  15. range: 'xxx.xxx',
  16. text: '',
  17. clazz: '',
  18. style: ''
  19. },{
  20. }
  21. ]
  22. },,{
  23. }
  24. ], ,[
  25. ]
  26. }
  27. */
  28. (function($) {
  29. $.fn.exportTableData = function(options) {
  30. var opts = $.extend({}, $.fn.exportTableData.defaults, options);
  31. var table = $(this[0]);
  32. if (table.attr('nodeName').toUpperCase() != 'TABLE')
  33. return null;
  34. var result = {
  35. widths: [],
  36. data: []
  37. };
  38. readCSS(result, table);
  39. var cols = table.find('col');
  40. cols.each(function(i) {
  41. result.widths[i] = $(this).width();
  42. })
  43. var trs = table.find('tr');
  44. trs.each(function(row) {
  45. var tr = $(this);
  46. result.data[row] = {
  47. height: tr.height(),
  48. cell: []
  49. };
  50. readCSS(result.data[row], tr);
  51. var tds = tr.find('td');
  52. tds.each(function(col) {
  53. var td = $(this);
  54. var val = td.html();
  55. if (opts.callback)
  56. val = opts.callback(tr, td, row, col, val);
  57. result.data[row].cell[col] = {
  58. text: val
  59. }
  60. readRange(result.data[row].cell[col], td);
  61. readCSS(result.data[row].cell[col], td);
  62. })
  63. })
  64. return result;
  65. function readRange(data, el) {
  66. var rowSpan = el.attr('rowSpan');
  67. var colSpan = el.attr('colSpan');
  68. rowSpan = rowSpan ? parseInt(rowSpan) : 1;
  69. colSpan = colSpan ? parseInt(colSpan) : 1;
  70. if (rowSpan != 1 || colSpan != 1)
  71. data.range = rowSpan + '.' + colSpan;
  72. }
  73. function readCSS(data, el) {
  74. var clazz = el.attr('class');
  75. if (clazz)
  76. data.clazz = clazz;
  77. var style = el.attr('style');
  78. if (style)
  79. data.style = style;
  80. }
  81. };
  82. $.fn.exportTableData.defaults = {
  83. callback: function(tr, td, row, col, val) {
  84. return val;
  85. }
  86. };
  87. $.fn.parseImportTableConfig = function(options) {
  88. var opts = $.extend({}, $.fn.parseImportTableConfig.defaults, options);
  89. var table = $(this[0]);
  90. if (table.attr('nodeName').toUpperCase() != 'TABLE')
  91. return null;
  92. var result = '';
  93. var trs = table.find('tr');
  94. trs.each(function(row) {
  95. var tr = $(this);
  96. var tds = tr.find('td');
  97. tds.each(function(col) {
  98. var td = $(this);
  99. if (opts.callback) {
  100. if (opts.callback({
  101. tr: tr,
  102. td: td,
  103. row: row,
  104. col: col
  105. }) == false)
  106. return;
  107. }
  108. result += row + '.' + col + ' ';
  109. })
  110. })
  111. return result;
  112. };
  113. $.fn.parseImportTableConfig.defaults = {
  114. callback: function(params) {
  115. return true;
  116. }
  117. };
  118. $.fn.importTableData = function(data, options) {
  119. var opts = $.extend({}, $.fn.importTableData.defaults, options);
  120. var table = $(this[0]);
  121. if (table.attr('nodeName').toUpperCase() != 'TABLE')
  122. return null;
  123. var importTds = [];
  124. var trs = table.find('tr');
  125. trs.each(function(row) {
  126. var tr = $(this);
  127. var tds = tr.find('td');
  128. tds.each(function(col) {
  129. var td = $(this);
  130. var key = row + '.' + col;
  131. if (typeof(data[key]) == 'undefined')
  132. return;
  133. var params = {
  134. tr: tr,
  135. td: td,
  136. row: row,
  137. col: col,
  138. val: data[key]
  139. };
  140. if (opts.callback) {
  141. if (opts.callback(params) == false)
  142. return;
  143. }
  144. var val = params.val;
  145. var orgVal = td.html();
  146. if (val != null && val != orgVal) {
  147. td.html(val);
  148. importTds[importTds.length] = td;
  149. }
  150. })
  151. })
  152. if (importTds.length > 0 && opts.finish)
  153. opts.finish(importTds);
  154. };
  155. $.fn.importTableData.defaults = {
  156. callback: function(params) {
  157. return true;
  158. },
  159. finish: function(tds) {
  160. }
  161. };
  162. })(jQuery);