ExcelRightClick.js 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116
  1. Namespace.register("U.MD.O.E.RC");
  2. /*Excel的右键功能*/
  3. /**
  4. * 添加行功能
  5. * checkdCell 被选中的最后一个单元格
  6. * lineNum 行数
  7. * req 当为true的时候 不发送send请求
  8. */
  9. U.MD.O.E.RC.addLine = function (checkdCell, lineNum, req) { //传入参数
  10. var _excel = U.MD.O.E, //声明变量
  11. _cellBox = $(".U_MD_O_E_cellBox")[0], //获取表格的最大包
  12. _rBList = U.UF.C.toArray($(".U_MD_O_E_row")), //所有的行板
  13. _cBList = U.UF.C.toArray($(".U_MD_O_E_column")), //所有的列板
  14. _cellList = U.UF.C.toArray($(".U_MD_O_E_cell")), //所有的单元格
  15. _rBBox = $(".U_MD_O_E_rowBoard")[0], //行板的父元素
  16. _cellLast = checkdCell, //被选中单元格中的最后一个
  17. _rowNum = _cellLast.row, //获取最后一个单元格的所在行数 相当于右键单元格当前所在行
  18. _rBoardCurrent = $(".U_MD_O_E_row")[_rowNum - 1], //当前选中单元格所对应的行板
  19. _rBoardNext, //当前单元格下一行所对应的行板
  20. _rBLen = _rBList.length, //为所以的行板的长度
  21. _rowNext, //当前单元格的下一行的所有元素
  22. _height, //行板的高
  23. _top, //上边距
  24. _frag = $$("frag"), //声明节点DocumentFragment是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。
  25. _mergeCellList, //当前单元格以下的所有合并的单元格
  26. _newEl, //单元格
  27. _iRowCell, //第i行的所有单元格
  28. _colName, //单元格的行的属性名
  29. _rowName, //单元格的列的属性名
  30. _newRow, //新添加的行
  31. _newrB, //为被拷贝的行板
  32. _rowRule, //在单元格指定的元素
  33. _mergeId,
  34. _addHeight, //增加的高度
  35. _mergeChangeArr = [], //为空的数组
  36. i,
  37. j;
  38. if (_rowNum < _rBLen) { //如果选中的行不是最后一行
  39. _rBoardNext = $(".U_MD_O_E_row")[_rowNum]; //当前单元格下一行所对应的行板
  40. _rowNext = _cellList.filter(function (el) { //当前单元格的下一行的所有元素
  41. return +(el.row) === (_rowNum + 1); //返回值
  42. });
  43. _height = _rBoardNext.offsetHeight; //行板的高
  44. _top = _rBoardNext.offsetTop; //行板的offsetTop值 = 单元格的top
  45. } else {
  46. _rBoardNext = _rBoardCurrent; //当前单元格下一行所对应的行板
  47. _rowNext = _cellList.filter(function (el) { //当前选中行的所有单元格
  48. return +(el.row) === (_rowNum); //返回值
  49. });
  50. _height = _rBoardCurrent.offsetHeight; //当前选中单元格所对应的行板的高度
  51. _top = _rBoardCurrent.offsetTop; //当前选中单元格所对应的行板的上边距
  52. }
  53. _addHeight = _height * lineNum;
  54. _rowNext.forEach(function (el) { //for循环遍历当前选中行的所有单元格
  55. _colName = +(el.col); //定义变量里面的内容
  56. _rowName = +(el.row); //定义变量里面的呢绒
  57. var lineLen; //声明变量
  58. if (_rowNum < _rBLen) { //如果选中的行不是最后一行
  59. i = 0; //只遍历到最后一行前面一行
  60. lineLen = lineNum;
  61. } else {
  62. i = 1;
  63. lineLen = lineNum + 1; //只从第二行开始遍历
  64. }
  65. var _newEl = el.cloneNode(), //拷贝循环的结果
  66. _mergeArr,
  67. _mergeEl;
  68. if (el.s_mergerow === _rowName) { //如果克隆的行数 与最大合并单元格 的行 相同
  69. _mergeId = el.s_merge; //获取元素
  70. _newEl.style.display = "block"; //表示显示
  71. _newEl.style.height = _height + "px"; //定义高
  72. _newEl.style.width = _cBList[_colName - 1].offsetWidth + "px";//定义宽
  73. $(_newEl).eRmAttr("s_mergecol"); //返回指定元素的属性
  74. $(_newEl).eRmAttr("s_mergerow");
  75. $(_newEl).eRmAttr("e_mergecol");
  76. $(_newEl).eRmAttr("e_mergerow");
  77. $(_newEl).eRmAttr("s_merge");
  78. $(_newEl).eRmAttr("e_merge");
  79. }
  80. if (el.s_merge && _mergeId !== el.s_merge) { /*合并 且 不是最大的单元格时 _mergeId !== el.s_merge 这句话表示一个大单元格只修改一次属性 */
  81. _mergeId = el.s_merge; //声明变量
  82. _mergeEl = $("#" + _mergeId)[0]; //根据参数选择一个对象
  83. _mergeEl.style.height = _mergeEl.offsetHeight + _addHeight + "px";//定义高
  84. _mergeArr = _cellList.filter(function (el) { //修改合并单元格的 结束位置
  85. return el.s_merge === _mergeId;
  86. });
  87. _mergeArr.forEach(function (el) { //for循环遍历一开始拷贝的结果
  88. $(el).eAttr("e_mergerow", el.e_mergerow + lineNum);//返回值
  89. $(el).eAttr("e_merge", "POS_" + el.e_mergecol + "_" + el.e_mergerow);
  90. });
  91. var temp = {
  92. col: el.s_mergecol,
  93. row: el.s_mergerow //定义数组
  94. };
  95. _mergeChangeArr.push(temp); //调用函数
  96. }
  97. for (; i < lineLen; i++) { //此处添加新的列榜
  98. _newEl = _newEl.cloneNode(); //声明变量为拷贝的对象
  99. if (el.s_merge && el.s_mergerow !== _rowName) { //如果克隆的是非最大单元格的元素
  100. $(_newEl).eAttr("s_merge", el.s_merge);
  101. $(_newEl).eAttr("s_mergerow", el.s_mergerow);
  102. $(_newEl).eAttr("s_mergecol", el.s_mergecol);
  103. $(_newEl).eAttr("e_mergerow", el.e_mergerow);
  104. $(_newEl).eAttr("e_mergecol", el.e_mergecol);
  105. $(_newEl).eAttr("e_merge", "POS_" + _newEl.e_mergecol + "_" + _newEl.e_mergerow);//返回值
  106. }
  107. _newEl.style.top = _top + _height * i + "px"; //此处为单元格上边距
  108. _newRow = _rowName + i; //赋值
  109. $(_newEl).eAttr("row", _newRow); //返回值
  110. _newEl.col = _colName;
  111. _newEl.id = "POS_" + _colName + "_" + _newRow;
  112. U.MD.O.E.BC.Focus(_newEl); //添加单元格聚焦事件
  113. U.MD.O.E.BC.dragCheckd(_newEl); //添加拖拽选中事件
  114. _frag.appendChild(_newEl);//生成子节点
  115. }
  116. });
  117. for (i = 0; i < lineNum; i++) { //此处为添加新的行榜
  118. _newrB = _rBoardNext.cloneNode(true); //声明变量为拷贝的对象,返回正确
  119. _newrB.firstChild.textContent = +(_rBoardCurrent.innerText) + 1;//定义第一个子节点
  120. $(_newrB).eAttr("rowname", +(_rBoardCurrent.innerText) + 1);//返回值
  121. _rowRule = $(_newrB).find(".U_MD_O_E_rowRule");//在单元格里面指定元素
  122. U.MD.O.E.BC.rowExpanding(_rowRule);
  123. U.MD.O.E.BC.rBoardChecked(_newrB); //添加点击 拖拽功能
  124. _excel.After(_rBoardCurrent, _newrB);//返回值
  125. _rBoardCurrent = _newrB;
  126. };
  127. for (i = _rowNum + 1; i <= _rBLen; i++) { //此处是操作单元格的 使选中行下面的所有行移动位置 与 属性
  128. _rBList[i - 1].firstChild.textContent = i + lineNum; //定义第一个子节点
  129. $(_rBList[i - 1]).eAttr("rowname", i + lineNum)
  130. _iRowCell = _cellList.filter(function (el) { //第i行的所有单元格
  131. return (+(el.row) === i && (el.parentNode.nodeType !== 11)); //返回值第i行的所有单元格
  132. });
  133. _top = _rBList[i - 1].offsetTop;//声明上边距
  134. _iRowCell.forEach(function (el) {//for循环遍历
  135. _frag.appendChild(el); //查找子节点
  136. el.style.top = _top + "px"; //赋值上边距
  137. _colName = el.col; //指定参数
  138. _newRow = +(i + lineNum);
  139. el.id = "POS_" + _colName + "_" + _newRow;//赋值ID
  140. $(el).eAttr("row", _newRow);
  141. })
  142. }
  143. _cellBox.appendChild(_frag);
  144. _mergeCellList = _cellList.filter(function (el) { //获取当前单元格以下的所有合并的单元格
  145. return +(el.s_mergerow) > _rowNum;
  146. });
  147. _mergeCellList.forEach(function (el) { /*此处为 修改该行下的 所有合并 单元格的 信息*/
  148. $(el).eAttr("s_mergerow", el.s_mergerow + lineNum);
  149. $(el).eAttr("e_mergerow", el.e_mergerow + lineNum);
  150. $(el).eAttr("s_merge", "POS_" + el.s_mergecol + "_" + el.s_mergerow);
  151. $(el).eAttr("e_merge", "POS_" + el.e_mergecol + "_" + el.e_mergerow);
  152. });
  153. var _data = {
  154. start: _rowNum, //第几行开始
  155. lineNum: lineNum, //添加几行
  156. sizeChange: (_rBoardNext.offsetHeight === U.MD.O.E.rowBoardHeight ? false : _rBoardNext.offsetHeight), //如果高度等于单元格初始化高度(40) 则为false 否则将高度存起来
  157. mergeArr: _mergeChangeArr //需要修改被合并单元格的元素 的 信息
  158. };
  159. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("addLine", _data), req);
  160. }
  161. /**
  162. * 删除行
  163. * startCell 选中的第一个单元格
  164. * endCell 选中的最后一个单元格
  165. * req 当为true的时候 不发送send请求
  166. */
  167. U.MD.O.E.RC.removeLine = function (startCell, endCell, req) {
  168. var _excel = U.MD.O.E,
  169. _cellList = U.UF.C.toArray($(".U_MD_O_E_cell")), //所有的单元格
  170. _rBList = $(".U_MD_O_E_row"), //所有的行板
  171. _rBBox = $(".U_MD_O_E_rowBoard")[0], //行板的父元素
  172. _rBLen = _rBList.length, //所有的行板的长度
  173. _startNum = +(startCell.row), //获取第一个单元格的所在行数
  174. _endNum = +(endCell.row), //获取最后一个单元格的所在行数
  175. _rmNum = _endNum - _startNum + 1, //所删除行的个数
  176. _iRowCell, //第i行的所有单元格
  177. _rBEl, //行板元素
  178. _newRowNum, //未被删除的行板文本
  179. _mergeCellList, //获取当前单元格以下的所有合并的单元格
  180. _colName, //单元格的属性名
  181. _mergeId, //用于判断是否是合并单元格
  182. s_mergerow, //合并单元格的值
  183. e_mergerow,
  184. s_mergecol, //删除合并单元格的值
  185. e_mergecol,
  186. _mergeArr = [], //声明数组
  187. _mergeChangeArr = [],
  188. _mergeInfo, //后面加入参数用于调用数组
  189. _mergeNum, //被删除的单元格的个数
  190. _top, //上边距
  191. i; //声明变量用于for循环
  192. for (i = _startNum; i <= _endNum; i++) { /*此处为 删除 对应的行板 和 对应的所有单元格*/
  193. _rBList[i - 1].remove(); //删除该行对应的行板
  194. _iRowCell = _cellList.filter(function (el) { //获取该行的所有单元格
  195. return +(el.row) === i;
  196. })
  197. _iRowCell.forEach(function (el) { //for循环遍历改行的所有单元格
  198. if (el.s_merge && (_mergeId !== el.s_merge)) { //如果是合并单元格的元素
  199. _mergeId = el.s_merge; //赋值
  200. s_mergerow = el.s_mergerow;
  201. e_mergerow = el.e_mergerow;
  202. s_mergecol = el.s_mergecol;
  203. e_mergecol = el.e_mergecol; //给单元格赋值拆分合并
  204. if (_startNum <= s_mergerow && _endNum >= e_mergerow) { //选择区域大于单元格区域时 非截取合并单元格情况
  205. el.remove(); //删除单元格
  206. return; 返回
  207. }
  208. //这三种情况表示则 截取合并单元格删除的情况
  209. if ((_startNum <= s_mergerow && _endNum >= s_mergerow)) { //截取上半部分的情况
  210. _mergeNum = _endNum - s_mergerow + 1 //从头开始 被删除的单元格个数
  211. s_mergerow = s_mergerow + _mergeNum - _rmNum; //重新设置合并单元格的开头
  212. e_mergerow = e_mergerow - _rmNum; //重新设置合并单元格的结尾
  213. _mergeInfo = { //声明数组
  214. smergeId: "POS_" + s_mergecol + "_" + s_mergerow,
  215. emergeId: "POS_" + e_mergecol + "_" + e_mergerow,
  216. row: s_mergerow,
  217. col: s_mergecol,
  218. endRow: e_mergerow,
  219. endCol: e_mergecol
  220. };
  221. _mergeArr.push(_mergeInfo); //调用函数
  222. } else if (_startNum <= e_mergerow && _endNum >= e_mergerow) { //截取下半部分的情况
  223. _mergeNum = e_mergerow - _startNum + 1; //从尾开始 被删除的单元格个数
  224. e_mergerow = e_mergerow - _mergeNum; //重新设置合并单元格的结尾
  225. _mergeInfo = { //声明数组
  226. smergeId: "POS_" + s_mergecol + "_" + s_mergerow, //赋值给id
  227. emergeId: "POS_" + e_mergecol + "_" + e_mergerow,
  228. row: s_mergerow,
  229. col: s_mergecol,
  230. endRow: e_mergerow,
  231. endCol: e_mergecol
  232. };
  233. _mergeArr.push(_mergeInfo);
  234. } else if (_startNum > s_mergerow && _endNum < e_mergerow) { //截取中间部分的情况
  235. e_mergerow = e_mergerow - _rmNum; //重新设置合并单元格的结尾
  236. _mergeInfo = {
  237. smergeId: "POS_" + s_mergecol + "_" + s_mergerow,
  238. emergeId: "POS_" + e_mergecol + "_" + e_mergerow,
  239. row: s_mergerow,
  240. col: s_mergecol,
  241. endRow: e_mergerow,
  242. endCol: e_mergecol
  243. };
  244. _mergeArr.push(_mergeInfo);
  245. }
  246. var _splitCells = $("#" + _mergeId)[0]; //声明变量选择指定的对象
  247. _excel.RC.splitCells(_splitCells, true); //拆分单元格
  248. }
  249. el.remove();
  250. });
  251. }
  252. for (i = _endNum + 1; i <= _rBLen; i++) { /* 此处为移动删除行下的 所有单元格 */
  253. _rBEl = _rBList[i - 1]; //行板元素
  254. _newRowNum = +(_rBEl.innerText) - _rmNum; //这里处理参数
  255. _rBEl.firstChild.textContent = _newRowNum;
  256. $(_rBEl).eAttr("rowname", _newRowNum);
  257. _iRowCell = _cellList.filter(function (el) { //获取该行的所有单元格
  258. return +(el.row) === i;
  259. })
  260. _top = _rBEl.offsetTop; //赋以上边距
  261. _iRowCell.forEach(function (el) { //遍历获取的所有单元格
  262. el.style.top = _top + "px"; //给予上边距的值
  263. $(el).eAttr("row", _newRowNum); //返回值
  264. _colName = el.col;
  265. el.id = "POS_" + _colName + "_" + _newRowNum;
  266. });
  267. }
  268. _mergeCellList = _cellList.filter(function (el) { //获取当前单元格以下的所有合并的单元格
  269. return +(el.s_mergerow) > _startNum;
  270. });
  271. _mergeCellList.forEach(function (el) { /*此处为 修改该行下的 所有合并 单元格的 信息*/
  272. $(el).eAttr("s_mergerow", el.s_mergerow - _rmNum);
  273. $(el).eAttr("e_mergerow", el.e_mergerow - _rmNum);
  274. $(el).eAttr("s_merge", "POS_" + el.s_mergecol + "_" + el.s_mergerow);
  275. $(el).eAttr("e_merge", "POS_" + el.e_mergecol + "_" + el.e_mergerow);
  276. });
  277. console.log(_mergeArr);
  278. var smergeCell,
  279. emergeCell; //声明变量
  280. _mergeArr.forEach(function (json) {
  281. smergeCell = $("#" + json.smergeId)[0]; //需要合并的开始单元格
  282. emergeCell = $("#" + json.emergeId)[0]; //需要合并的结束单元格
  283. _excel.RC.mergeCells(smergeCell, emergeCell, true);
  284. json.content = smergeCell.innerHTML;
  285. });
  286. var _data = {
  287. start: _startNum, //第几行开始
  288. end: _endNum, //第几行结束
  289. lineNum: _rmNum, //删除的行数
  290. mergeArr: _mergeArr
  291. };
  292. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("delLine", _data), req);
  293. };
  294. /**
  295. * 添加列功能
  296. * checkdCell 被选中的最后一个单元格
  297. * colNums 列数
  298. * req 当为true的时候 不发送send请求
  299. */
  300. U.MD.O.E.RC.addCol = function (checkdCell, colNums, req) {
  301. var _excel = U.MD.O.E,
  302. _cellBox = $(".U_MD_O_E_cellBox")[0], //单元格的最大的包
  303. _cellList = U.UF.C.toArray($(".U_MD_O_E_cell")), //所有的单元格
  304. _rBList = $(".U_MD_O_E_row"), //所有的行板
  305. _cBList = $(".U_MD_O_E_column"), //所有的列板
  306. _cBBox = $(".U_MD_O_E_colBoard")[0], //所有的列版的包
  307. _cellLast = checkdCell, //被选中单元格中的最后一个
  308. _colNum = _cellLast.col, //获取最后一个单元格的所在列数
  309. _cBoardCurrent = $(".U_MD_O_E_column")[_colNum - 1], //获取除了最后一个列版的所以列版
  310. _cBoardNext, //当前单元格下一列所对应的列板
  311. _colNext, //单元格的下一列的所有元素
  312. _cBLen = _cBList.length, //所有列板的长度
  313. _width, //当前单元格的下一列的宽
  314. _left, //当前单元格的下一列的左边距
  315. _frag = $$("frag"), //声明节点DocumentFragment是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。
  316. _newEl, //合并单元格中 最大的元素 的列
  317. _addWidth, //新增的单元格的宽度
  318. _iColCell, //第i列的所有单元格
  319. _mergeChangeArr = [], //声明数组后面用于调用函数
  320. _rowName, //单元格列的属性名
  321. _mergeCellList, //当前选中单元格的行
  322. _mergeId, //当前选中单元格的id
  323. _newCol, //添加列的位置
  324. _newcB, //新的列板
  325. _colRule, //获取的行尺
  326. _colName, //克隆的列
  327. i, //声明变量后面用于for循环
  328. j;
  329. if (_colNum < _cBLen) { //如果选中的行不是最后一行
  330. _cBoardNext = $(".U_MD_O_E_column")[_colNum]; //当前单元格下一列所对应的列板
  331. _colNext = _cellList.filter(function (el) { //当前单元格的下一列的所有元素
  332. return +(el.col) === (_colNum + 1); //返回值
  333. });
  334. _width = _cBoardNext.offsetWidth; //给当前单元格下一列所对应的列板赋值宽
  335. _left = _cBoardNext.offsetLeft; //给当前单元格下一列所对应的列板赋值左边距
  336. } else {
  337. _cBoardNext = _cBoardCurrent //给当前单元格下一列所对应的列板
  338. _colNext = _cellList.filter(function (el) { //当前单元格的下一列的所有元素
  339. return +(el.col) === (_colNum); //返回值
  340. });
  341. _width = _cBoardCurrent.offsetWidth; //给当前单元格下一列的所有元素赋值宽
  342. _left = _cBoardCurrent.offsetLeft; //给当前单元格下一列的所有元素赋值左边距
  343. }
  344. _addWidth = _width * colNums, //声明宽度
  345. _cBBox.style.width = _cBBox.offsetWidth + _addWidth + "px"; //所有的列版的包赋值宽度
  346. _colNext.forEach(function (el) { //for循环遍历
  347. _rowName = +(el.row);
  348. _colName = +(el.col);
  349. var colLen;
  350. if (_colNum < _cBLen) { //如果选中的行不是最后一行
  351. i = 0;
  352. colLen = colNums; //colNums为添加列的 数量 这里是循环添加 colNums 列
  353. } else {
  354. i = 1;
  355. colLen = colNums + 1; //此处为选中最后一列 时的处理
  356. }
  357. var _newEl = el.cloneNode(),
  358. _mergeArr,
  359. _mergeEl;
  360. if (el.s_mergecol === _colName) { //如果克隆的列 与 合并单元格中 最大的元素 的列 相同
  361. _mergeId = el.s_merge; //最大单元格的id
  362. _newEl.style.display = "block"; //为显示
  363. _newEl.style.width = _width + "px"; //为宽度
  364. _newEl.style.height = _rBList[_rowName - 1].offsetHeight + "px"; //为高度
  365. $(_newEl).eRmAttr("s_mergecol");
  366. $(_newEl).eRmAttr("s_mergerow");
  367. $(_newEl).eRmAttr("e_mergecol");
  368. $(_newEl).eRmAttr("e_mergerow");
  369. $(_newEl).eRmAttr("s_merge");
  370. $(_newEl).eRmAttr("e_merge"); //返回各种参数
  371. }
  372. if (el.s_merge && el.s_merge !== _mergeId) { /*(合并单元格 中间 点击添加列的情况: 此处为将选中的列的 右边的合并列一律修改信息)
  373. 克隆的元素是被合并的单元格 且 不是最大合并单元格 所在的列*/
  374. _mergeId = el.s_merge; //最大单元格的id
  375. _mergeEl = $("#" + _mergeId)[0]; //选择指定的对象
  376. _mergeEl.style.width = _mergeEl.offsetWidth + _addWidth + "px"; //修改最大合并 单元格的宽度
  377. _mergeArr = _cellList.filter(function (el) { //此处为将筛选 选中的列的 右边的合并列一律修改信息)
  378. return el.s_merge === _mergeId; //返回值
  379. })
  380. _mergeArr.forEach(function (el) { //for循环遍历选中的列的
  381. $(el).eAttr("e_mergecol", el.e_mergecol + colNums);
  382. $(el).eAttr("e_merge", "POS_" + el.e_mergecol + "_" + el.e_mergerow);
  383. });
  384. var temp = { //声明数组
  385. col: el.s_mergecol,
  386. row: el.s_mergerow
  387. };
  388. _mergeChangeArr.push(temp);
  389. }
  390. for (; i < colLen; i++) { //此处为添加新的行榜
  391. _newEl = _newEl.cloneNode();
  392. if (el.s_mergecol && el.s_mergecol !== _colName) { //如果克隆的是非最大单元格的元素
  393. $(_newEl).eAttr("s_merge", el.s_merge);
  394. $(_newEl).eAttr("s_mergerow", el.s_mergerow);
  395. $(_newEl).eAttr("s_mergecol", el.s_mergecol);
  396. $(_newEl).eAttr("e_mergerow", el.e_mergerow);
  397. $(_newEl).eAttr("e_mergecol", el.e_mergecol);
  398. $(_newEl).eAttr("e_merge", "POS_" + _newEl.e_mergecol + "_" + _newEl.e_mergerow);
  399. }
  400. _newEl.style.left = _left + _width * i + "px"; //赋值对象的左边距
  401. _newCol = _colName + i; //添加列的位置 为当前列的位置 + i;
  402. $(_newEl).eAttr("col", _newCol);
  403. _newEl.row = el.row;
  404. _newEl.id = "POS_" + _newCol + "_" + _rowName;
  405. U.MD.O.E.BC.Focus(_newEl); //添加单元格聚焦事件
  406. U.MD.O.E.BC.dragCheckd(_newEl); //添加拖拽选中事件
  407. _frag.appendChild(_newEl);
  408. }
  409. });
  410. for (i = 0; i < colNums; i++) { //此处为添加新的列榜
  411. _newcB = _cBoardNext.cloneNode(true);
  412. _colName = +(_cBoardCurrent.colname);
  413. _newcB.firstChild.textContent = _excel.fromCharCode(_colName + 1);
  414. $(_newcB).eAttr("colname", _colName + 1);
  415. _colRule = $(_newcB).find(".U_MD_O_E_colRule");
  416. U.MD.O.E.BC.colExpanding(_colRule);
  417. U.MD.O.E.BC.cBoardChecked(_newcB); //添加点击 拖拽功能
  418. _excel.After(_cBoardCurrent, _newcB);
  419. _cBoardCurrent = _newcB;
  420. };
  421. for (i = _colNum + 1; i <= _cBLen; i++) { //此处是操作单元格的
  422. _cBList[i - 1].firstChild.textContent = _excel.fromCharCode(i + colNums);
  423. $(_cBList[i - 1]).eAttr("colname", i + colNums)
  424. _iColCell = _cellList.filter(function (el) {
  425. return (+(el.col) === i) && el.parentNode.nodeType !== 11;
  426. })
  427. _left = _cBList[i - 1].offsetLeft;
  428. _iColCell.forEach(function (el) {
  429. _frag.appendChild(el);
  430. el.style.left = _left + "px";
  431. _rowName = el.row;
  432. _newCol = +(i + colNums);
  433. el.id = "POS_" + _newCol + "_" + _rowName;
  434. $(el).eAttr("col", _newCol);
  435. })
  436. }
  437. _cellBox.appendChild(_frag);
  438. _mergeCellList = _cellList.filter(function (el) { //获取当前单元格以下的所有合并的单元格
  439. return +(el.s_mergecol) > _colNum;
  440. });
  441. _mergeCellList.forEach(function (el) { /*此处为 修改该行下的 所有合并 单元格的 信息*/
  442. $(el).eAttr("s_mergecol", el.s_mergecol + colNums);
  443. $(el).eAttr("e_mergecol", el.e_mergecol + colNums);
  444. $(el).eAttr("s_merge", "POS_" + el.s_mergecol + "_" + el.s_mergerow);
  445. $(el).eAttr("e_merge", "POS_" + el.e_mergecol + "_" + el.e_mergerow);
  446. });
  447. var _data = {
  448. start: _colNum, //第几行开始添加 列
  449. colNums: colNums, //添加几列
  450. sizeChange: (_cBoardNext.offsetWidth === U.MD.O.E.colBoardWidth ? false : _cBoardNext.offsetWidth), //如果高度等于单元格初始化宽度(200) 则为false 否则将宽度存起来
  451. mergeArr: _mergeChangeArr //需要修改被合并单元格的元素 的 信息
  452. };
  453. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("addCol", _data), req);
  454. }
  455. /**
  456. * 删除列功能
  457. * startCell 选中的第一个单元格
  458. * endCell 选中的最后一个单元格
  459. * req 当为true时不发送send请求
  460. */
  461. U.MD.O.E.RC.removeCol = function (startCell, endCell, req) { //传入参数
  462. var _excel = U.MD.O.E,
  463. _cellList = U.UF.C.toArray($(".U_MD_O_E_cell")), //所有的单元格
  464. _cBList = $(".U_MD_O_E_column"), //所有的列板
  465. _cBBox = $(".U_MD_O_E_colBoard")[0], //列板的父元素
  466. _cBLen = _cBList.length, //列板的总个数
  467. _startNum = +(startCell.col), //获取第一个单元格的所在列数
  468. _endNum = +(endCell.col), //获取最后一个单元格的所在列数
  469. _rmNum = _endNum - _startNum + 1, //所删除的列的个数
  470. _rmWidth = 0, //所需要删除的宽度
  471. _cellList, //该列的所有单元格
  472. _cBEl, //列板的元素
  473. _newColNum, //新的元素的移动
  474. _iColCell, //第 i 列 所有单元格
  475. _mergeId, //获取的id
  476. _mergeCellList, //当前的所有单元格
  477. _mergeArr = [], //声明数组
  478. _rowName,
  479. _left, //单元格的左边距
  480. i;
  481. for (i = _startNum; i <= _endNum; i++) { //此处为删除要删的列(单元格) 包括 对应的列板
  482. _rmWidth += _cBList[i - 1].offsetWidth; //获取所需要删除的宽度
  483. _cBList[i - 1].remove(); //删除该列对应的列板
  484. _iColCell = _cellList.filter(function (el) { //获取该列的所有单元格
  485. return +(el.col) === i; //返回值
  486. });
  487. _iColCell.forEach(function (el) {
  488. if (el.s_merge && (_mergeId !== el.s_merge)) { //如果是合并单元格的元素
  489. _mergeId = el.s_merge;
  490. s_mergerow = el.s_mergerow;
  491. e_mergerow = el.e_mergerow;
  492. s_mergecol = el.s_mergecol;
  493. e_mergecol = el.e_mergecol;
  494. if (_startNum <= s_mergecol && _endNum >= e_mergecol) { //选择区域大于单元格区域时 非截取合并单元格情况
  495. el.remove(); //删除单元格
  496. return;
  497. }
  498. //这三种情况表示则 截取合并单元格删除的情况
  499. if ((_startNum <= s_mergecol && _endNum >= s_mergecol)) { //截取左半部分的情况
  500. _mergeNum = _endNum - s_mergecol + 1 //从头开始 被删除的单元格个数
  501. s_mergecol = s_mergecol + _mergeNum - _rmNum; //重新设置合并单元格的开头
  502. e_mergecol = e_mergecol - _rmNum; //重新设置合并单元格的结尾
  503. _mergeInfo = { //生成数组
  504. smergeId: "POS_" + s_mergecol + "_" + s_mergerow, //定义参数
  505. emergeId: "POS_" + e_mergecol + "_" + e_mergerow,
  506. row: s_mergerow,
  507. col: s_mergecol,
  508. endRow: e_mergerow,
  509. endCol: e_mergecol
  510. };
  511. _mergeArr.push(_mergeInfo);
  512. console.log(1);
  513. } else if (_startNum <= e_mergecol && _endNum >= e_mergecol) { //截取下半部分的情况
  514. _mergeNum = e_mergecol - _startNum + 1; //从尾开始 被删除的单元格个数
  515. e_mergecol = e_mergecol - _mergeNum; //重新设置合并单元格的结尾
  516. _mergeInfo = {
  517. smergeId: "POS_" + s_mergecol + "_" + s_mergerow,
  518. emergeId: "POS_" + e_mergecol + "_" + e_mergerow,
  519. row: s_mergerow,
  520. col: s_mergecol,
  521. endRow: e_mergerow,
  522. endCol: e_mergecol
  523. };
  524. _mergeArr.push(_mergeInfo);
  525. console.log(2);
  526. } else if (_startNum > s_mergecol && _endNum < e_mergecol) { //截取中间部分的情况
  527. e_mergecol = e_mergecol - _rmNum; //重新设置合并单元格的结尾
  528. _mergeInfo = { //生成数组
  529. smergeId: "POS_" + s_mergecol + "_" + s_mergerow,
  530. emergeId: "POS_" + e_mergecol + "_" + e_mergerow,
  531. row: s_mergerow,
  532. col: s_mergecol,
  533. endRow: e_mergerow,
  534. endCol: e_mergecol
  535. };
  536. _mergeArr.push(_mergeInfo);
  537. console.log(3);
  538. }
  539. var _splitCells = $("#" + _mergeId)[0];
  540. _excel.RC.splitCells(_splitCells, true); //拆分单元格
  541. }
  542. el.remove(); //删除不必要的参数
  543. });
  544. }
  545. for (i = _endNum + 1; i <= _cBLen; i++) { //此处为 被删列后的所有元素的移动 和信息 修改
  546. _cBEl = _cBList[i - 1]; //列板元素
  547. _newColNum = +(_cBEl.colname) - _rmNum;
  548. _cBEl.firstChild.textContent = _excel.fromCharCode(_newColNum);
  549. $(_cBEl).eAttr("colname", _newColNum);
  550. _iColCell = _cellList.filter(function (el) {//获取该列的所有单元格
  551. return +(el.col) === i;
  552. });
  553. _left = _cBEl.offsetLeft;
  554. _iColCell.forEach(function (el) { //for循环被删列后的所有元素
  555. el.style.left = _left + "px"; //制造左边距
  556. $(el).eAttr("col", _newColNum);
  557. _rowName = el.row; //调整参数
  558. el.id = "POS_" + _newColNum + "_" + _rowName;
  559. });
  560. }
  561. _cBBox.style.width = _cBBox.offsetWidth - _rmWidth + "px"; //赋值列板的父元素的宽度
  562. _mergeCellList = _cellList.filter(function (el) { //获取当前单元格以下的所有合并的单元格
  563. return +(el.s_mergecol) > _startNum;
  564. });
  565. _mergeCellList.forEach(function (el) { /*此处为 修改该列下的 所有合并 单元格的 信息*/
  566. $(el).eAttr("s_mergecol", el.s_mergecol - _rmNum);
  567. $(el).eAttr("e_mergecol", el.e_mergecol - _rmNum);
  568. $(el).eAttr("s_merge", "POS_" + el.s_mergecol + "_" + el.s_mergerow);
  569. $(el).eAttr("e_merge", "POS_" + el.e_mergecol + "_" + el.e_mergerow);
  570. });
  571. var smergeCell, //生成遍历
  572. emergeCell;
  573. _mergeArr.forEach(function (json) { //for循环遍历json数组
  574. smergeCell = $("#" + json.smergeId)[0];
  575. emergeCell = $("#" + json.emergeId)[0];//赋值json数组的参数
  576. _excel.RC.mergeCells(smergeCell, emergeCell, true);
  577. json.content = smergeCell.innerHTML;
  578. })
  579. var _data = {
  580. start: _startNum, //第几列开始,
  581. end: _endNum, //第几列结束
  582. colNums: _rmNum, //删除的列数
  583. mergeArr: _mergeArr
  584. };
  585. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("delCol", _data), req);
  586. }
  587. /**
  588. * 拆分单元格功能
  589. * cell 需要拆分的单元格
  590. * dataChange 如果存在 则不修改data的后台数据
  591. * req 当为true时不发送send请求
  592. */
  593. U.MD.O.E.RC.splitCells = function (cell, dataChange, req) {
  594. if (!(cell.s_merge)) return;
  595. var _excel = U.MD.O.E,
  596. _cellList = U.UF.C.toArray($(".U_MD_O_E_cell")), //所有的单元格
  597. _startX = +(cell.col), //单元格 列
  598. _startY = +(cell.row), //单元格 行
  599. _endX = +(cell.e_mergecol), //获取最后一个单元格的所在列数
  600. _endY = +(cell.e_mergerow), //获取最后一个单元格的所在行数
  601. _width = $(".U_MD_O_E_column")[_startX - 1].offsetWidth,//单元格列的宽度
  602. _height = $(".U_MD_O_E_row")[_startY - 1].offsetHeight, //单元格行的高度
  603. _id,
  604. _cell,
  605. i,
  606. j;
  607. cell.edited = true;
  608. for (i = _startX; i <= _endX; i++) { /*此处是 将被隐藏的单元格 display改为block*/
  609. for (j = _startY; j <= _endY; j++) { //for循环嵌套获取所有的单元格
  610. _id = "POS_" + i + "_" + j;
  611. _cell = $("#" + _id)[0];
  612. _cell.style.display = "block";
  613. $(_cell).eRmAttr("s_mergecol");
  614. $(_cell).eRmAttr("s_mergerow");
  615. $(_cell).eRmAttr("e_mergecol");
  616. $(_cell).eRmAttr("e_mergerow");
  617. $(_cell).eRmAttr("s_merge");
  618. $(_cell).eRmAttr("e_merge");
  619. }
  620. }
  621. cell.style.width = _width + "px"; //给所有单元格赋值宽度
  622. cell.style.height = _height + "px"; //给所有单元格赋值高度
  623. if (dataChange) return;
  624. var _data = { //生成数组
  625. col: _startX,
  626. row: _startY
  627. };
  628. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("splitCells", _data), req); //合并时 保存数据
  629. };
  630. /**
  631. * 合并单元格功能
  632. * startCell 选中的第一个单元格
  633. * endCell 选中的最后一个单元格
  634. * dataChange 如果存在 则不修改data的后台数据
  635. * req 如果存在 则不发送send请求
  636. */
  637. U.MD.O.E.RC.mergeCells = function (startCell, endCell, dataChange, req) {
  638. var _excel = U.MD.O.E;
  639. if (!startCell || !endCell || endCell === startCell) return;
  640. var _startCell = startCell, //选中的第一个单元格
  641. _startcol = _startCell.col, //开始x坐标
  642. _startrow = +(_startCell.row), //开始y坐标
  643. _endCell = endCell, //选中的最后一个单元格
  644. _endcol = +(_endCell.col), //结束x坐标
  645. _endrow = +(_endCell.row), //结束y坐标
  646. _mergeWidth = 0, //合并后的总宽度
  647. _mergeHeight = 0, //合并后的总高度
  648. _crossCol = _endcol - _startcol + 1, //所跨越的列
  649. _crossRow = _endrow - _startrow + 1, //所跨越的行
  650. _cellList = U.UF.C.toArray($(".U_MD_O_E_cell")), //所有的单元格
  651. _checkCellList,
  652. _cBList = $(".U_MD_O_E_column"), //所有的列板
  653. _rBList = $(".U_MD_O_E_row"), //所有的行板
  654. _cell,
  655. i,
  656. _cellcol, //第 i 列 所有单元格
  657. _cellrow, //第 i 行 所有单元格
  658. len = _cellList.length;
  659. _startCell.edited = true;
  660. for (i = _startcol; i <= _endcol; i++) { //此处计算合并后单元格的宽
  661. _mergeWidth += _cBList[i - 1].offsetWidth;
  662. }
  663. for (i = _startrow; i <= _endrow; i++) { //此处计算合并后单元格的高
  664. _mergeHeight += _rBList[i - 1].offsetHeight;
  665. }
  666. _checkCellList = _cellList.filter(function (el) { //此处相当于 获取 被选中元素 (这里不用class获取是因为 要考虑 互联)
  667. _cellcol = +(el.col);
  668. _cellrow = +(el.row);
  669. return (_cellcol >= _startcol && _cellcol <= _endcol) && (_cellrow >= _startrow && _cellrow <= _endrow);
  670. })
  671. if (_startCell.s_merge) return;
  672. _checkCellList.forEach(function (el) { //for循环遍历获取每一个选中的元素(单元格)
  673. el.style.display = "none"; //让他隐藏
  674. $(el).eAttr("s_merge", "POS_" + _startcol + "_" + _startrow);
  675. $(el).eAttr("e_merge", "POS_" + _endcol + "_" + _endrow);
  676. $(el).eAttr("s_mergeCol", _startcol);
  677. $(el).eAttr("e_mergeCol", _endcol);
  678. $(el).eAttr("s_mergeRow", _startrow);
  679. $(el).eAttr("e_mergeRow", _endrow);//返回值
  680. if (_startCell.innerText) return; //判断文本内容后返回值
  681. _startCell.innerText = el.innerText;
  682. })
  683. _startCell.style.width = _mergeWidth + "px"; //赋值选中的第一个单元格的宽度
  684. _startCell.style.height = _mergeHeight + "px"; //赋值选中的第一个单元格的高度
  685. _startCell.style.display = "block"; //赋值选中的第一个单元格的显示
  686. if (dataChange) return;
  687. var _data = { //生成数组
  688. row: _startrow,
  689. col: _startcol,
  690. content: startCell.innerHTML,
  691. cssText: startCell.style.cssText,
  692. endRow: _endrow,
  693. endCol: _endcol
  694. };
  695. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("merge", _data), req); //合并时 保存数据
  696. };
  697. /*
  698. * 任务栏重命名
  699. * task 选中的工作表
  700. */
  701. U.MD.O.E.RC.taskRename = function (task) {
  702. var _task = task, //获取任务栏
  703. _text = task.firstChild.textContent, //获取任务栏的名字
  704. _input;
  705. // _name = _task.innerHTML;
  706. $(_task).addClass('U_MD_O_E_task_renameing'); //修改该工作表的定位模式
  707. $$('input',
  708. { 'type': 'text', 'id': 'rename', 'value': _text,
  709. 'style': { 'cssText': 'width:109px;height:38px;position: absolute;left:0;top:0;text-align: center;font-size: 16px;line-height:38px;' }
  710. }, //在任务栏生成按钮,赋样式属性
  711. _task);
  712. _input = $('#rename')[0]; //获取input
  713. _input.focus() //获取焦点//获取光标
  714. _input.onblur = function (e) {
  715. U.UF.EV.stopBubble(e); //阻止冒泡
  716. _task.innerHTML = _input.value;
  717. $(_task).removeClass('U_MD_O_E_task_renameing'); //完成修改后移除input
  718. var _data = { //声明数组
  719. name: _input.value,
  720. id: _task.id
  721. }
  722. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("reNameTask", _data));//修改时 保存数据
  723. }
  724. $(_input).bind('keypress', function (e) {
  725. U.UF.EV.stopBubble(e); //阻止冒泡
  726. });
  727. $(_input).bind('keydown', function (e) {
  728. U.UF.EV.stopBubble(e); //阻止冒泡
  729. });
  730. $(_input).bind('keyup', function (e) {
  731. U.UF.EV.stopBubble(e); //阻止冒泡
  732. });
  733. $(_input).bind('dblclick', function (e) {
  734. U.UF.EV.stopBubble(e); //阻止冒泡
  735. })
  736. }
  737. /*
  738. * 任务栏删除
  739. * req如果存在 则不像后台发送请求
  740. */
  741. U.MD.O.E.RC.taskDelete = function (task, req) {
  742. var _task = task, //获取任务栏
  743. _id = _task.id, //声明ID
  744. _switchTask,
  745. _data = { //声明数组
  746. id: _id
  747. };
  748. if ($(".U_MD_O_E_task ").length === 3) {//只有一个工作表是不能删除
  749. U.Alert("至少要有一个工作表!"); //弹窗
  750. } else if (_id === U.MD.O.E.taskId) { //如果要删除的工作表等于当前选中工作表
  751. _switchTask = _task.nextElementSibling || _task.previousElementSibling; //获取下一个工作表元素 如果不存在 则切换为上一个工作表元素
  752. $(_switchTask).addClass("U_MD_O_E_taskCheck");
  753. U.MD.O.E.taskId = _switchTask.id; //重新赋值ID
  754. U.MD.O.E.rePrintExcel(); //重新打印工作表
  755. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("deleteTask", _data), req); //删除时保存数据,req如果存在 则不像后台发送请求
  756. _task.remove();
  757. } else {
  758. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("deleteTask", _data), req); //删除时保存数据,req如果存在 则不像后台发送请求
  759. _task.remove();
  760. }
  761. }
  762. /*
  763. * 任务栏复制
  764. * task 选中的工作表
  765. */
  766. U.MD.O.E.RC.taskCopy = function (task) {
  767. var _task = task; //获取任务栏
  768. U.MD.O.E.taskCopyId = _task.id;//赋值id
  769. U.MD.O.E.addTask(); //复制任务栏
  770. }
  771. /*
  772. * 单元格复制
  773. */
  774. U.MD.O.E.RC.cellCopy = function () {
  775. var _focusBox = $("#U_MD_O_E_focusBox")[0],
  776. _editorBox = $("#U_MD_O_E_editorBox")[0],
  777. _cellList = U.UF.C.toArray($(".U_MD_O_E_cellCheckd")); //获取单元格
  778. if (!_cellList.length) return;
  779. U.MD.O.E.RC.cellTaste.copyContent = _cellList; //复制单元格
  780. return true;
  781. }
  782. /*
  783. * 单元格粘贴
  784. */
  785. U.MD.O.E.RC.cellTaste = function (_arrjson, _arrcontent) {
  786. var _copycontent = U.MD.O.E.RC.cellTaste.copyContent, //复制选中的单元格
  787. _cutcontent = U.MD.O.E.RC.cellTaste.cutContent, //剪切选中的单元格
  788. _leftCorner = U.UF.C.toArray($(".U_MD_O_E_cellCheckd"))[0]; //粘贴选中的左上角单元格
  789. if (_cutcontent) { //如果是剪切有内容
  790. var _cutCellColfirst = _cutcontent[0].col, //要剪切的选中的第一个单元格的列
  791. _cutCellRowfirst = _cutcontent[0].row; //要剪切的选中的第一个单元格的行
  792. _filterCutContent = _cutcontent.filter(function (e) { //过滤给隐藏的div
  793. return e.style.display != "none"; //返回值过滤给隐藏的div
  794. });
  795. for (var i = 0; i < _filterCutContent.length; i++) { //for循环遍历过滤给隐藏的div
  796. _cute_col = _filterCutContent[i].e_mergecol - _filterCutContent[i].s_mergecol, //合并单元格col头和尾的差值
  797. _cute_row = _filterCutContent[i].e_mergerow - _filterCutContent[i].s_mergerow; //合并单元格row头和尾的差值
  798. _cutCellCol = _filterCutContent[i].col; //指定单元格的行板
  799. _cutCellRow = _filterCutContent[i].row; //指定单元格的列板
  800. _cutCellColDifference = _cutCellCol - _cutCellColfirst;
  801. _cutCellRowDifference = _cutCellRow - _cutCellRowfirst;
  802. _leftCol = _leftCorner.col;
  803. _leftRow = _leftCorner.row;
  804. _cutColDifference = _leftCol + _cutCellColDifference; //相差的列数
  805. _cutRowDifference = _leftRow + _cutCellRowDifference; //相差的行数
  806. if (_cute_col) { //调用合并单元格的接口
  807. U.MD.O.E.RC.mergeCells($("#POS_" + _cutColDifference + "_" + _cutRowDifference)[0], $("#POS_" + (_cutColDifference + _cute_col) + "_" + (_cutRowDifference + _cute_row))[0]);
  808. }
  809. _cutNewCell = $("#POS_" + _cutColDifference + "_" + _cutRowDifference)[0];
  810. _cutNewCell.innerHTML = _filterCutContent[i].innerHTML;
  811. _filterCutContent[i].innerHTML = "";
  812. U.MD.O.E.RC.cellTaste._filterCutContent = null;
  813. }
  814. } else if (_copycontent) { //如果是粘贴有内容
  815. var _cellColfirst = _copycontent[0].col, //要复制的选中的第一个单元格的列
  816. _cellRowfirst = _copycontent[0].row, //要复制的选中的第一个单元格的行
  817. _copydata = [];
  818. _filterCopyContent = _copycontent.filter(function (e) {//过滤给隐藏的div
  819. return e.style.display != "none";
  820. });
  821. for (var i = 0; i < _filterCopyContent.length; i++) {
  822. _cellCol = _filterCopyContent[i].col;
  823. _cellRow = _filterCopyContent[i].row;
  824. _cellColDifference = _cellCol - _cellColfirst;
  825. _cellRowDifference = _cellRow - _cellRowfirst;
  826. _leftCol = _leftCorner.col;
  827. _leftRow = _leftCorner.row;
  828. _colDifference = _leftCol + _cellColDifference; //相差的列数
  829. _rowDifference = _leftRow + _cellRowDifference; //相差的行数
  830. _e_col = _filterCopyContent[i].e_mergecol - _filterCopyContent[i].s_mergecol, //合并单元格col头和尾的差值
  831. _e_row = _filterCopyContent[i].e_mergerow - _filterCopyContent[i].s_mergerow; //合并单元格row头和尾的差值
  832. if (_e_col) {//调用合并单元格的接口
  833. U.MD.O.E.RC.mergeCells($("#POS_" + _colDifference + "_" + _rowDifference)[0], $("#POS_" + (_colDifference + _e_col) + "_" + (_rowDifference + _e_row))[0]);
  834. }
  835. _newCell = $("#POS_" + _colDifference + "_" + _rowDifference)[0];
  836. _newCell.innerHTML = _filterCopyContent[i].innerHTML;
  837. var _data = {
  838. row: _newCell.row,
  839. col: _newCell.col,
  840. content: _newCell.innerHTML,
  841. innerText: _newCell.innerText //之所以要发innerText 是因为要用来判断data数据里单元格的内容如果被改为空 则删除掉该单元格的数据
  842. }; //讲内容打包给后台
  843. _copydata.push(_data);
  844. }
  845. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("blur", _copydata));
  846. } else if (_arrjson) {
  847. var _cellColDifference = 0;
  848. var _cellRowDifference = 0;
  849. var _copydata = [];
  850. for (var i = 0; i < _arrjson.td; i++) {
  851. _leftCol = _leftCorner.col;
  852. _leftRow = _leftCorner.row;
  853. _maxcol = _leftCol + (_arrjson.age - 1);
  854. _maxrow = _leftRow + (_arrjson.tr - 1);
  855. if ((_leftCol + _cellColDifference) > _maxcol) {
  856. _cellColDifference = 0;
  857. _cellRowDifference += 1;
  858. }
  859. _newCell = $("#POS_" + (_leftCol + _cellColDifference) + "_" + (_leftRow + _cellRowDifference))[0];
  860. _cellColDifference += 1;
  861. _newCell.innerHTML = _arrcontent[i];
  862. var _data = {
  863. row: _newCell.row,
  864. col: _newCell.col,
  865. content: _newCell.innerHTML,
  866. innerText: _newCell.innerText //之所以要发innerText 是因为要用来判断data数据里单元格的内容如果被改为空 则删除掉该单元格的数据
  867. }; //讲内容打包给后台
  868. _copydata.push(_data);
  869. }
  870. }
  871. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("blur", _copydata));
  872. }
  873. /*
  874. * 单元格剪切
  875. */
  876. U.MD.O.E.RC.cellCut = function () {
  877. var _focusBox = $("#U_MD_O_E_focusBox")[0],
  878. _editorBox = $("#U_MD_O_E_editorBox")[0],
  879. _cellList = U.UF.C.toArray($(".U_MD_O_E_cellCheckd")); //选中的div
  880. if (!_cellList.length) return;
  881. U.MD.O.E.RC.cellTaste.cutContent = _cellList;
  882. }
  883. /*
  884. * 删除A链接
  885. */
  886. U.MD.O.E.RC.clearAContent = function () {
  887. var _editorBox = $("#U_MD_O_E_editorBox")[0], //选择A连接的包
  888. _cellList = U.UF.C.toArray($(".U_MD_O_E_cellCheckd"));
  889. _a = $('a', _editorBox.focusEl)[0]; //获取选区中的第一个a标签
  890. $$("div", {}, _cellList[0]); //创建一个div
  891. _cellList[0].children[1].innerText = _a.innerText; //赋值给创建的div
  892. _cellList[0].removeChild(_a); //删除第一个a标签
  893. var _data = { //生成数组
  894. row: _cellList[0].row,
  895. col: _cellList[0].col,
  896. content: _cellList[0].innerHTML
  897. }
  898. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("clearAContent", _data));//删除时 保存数据
  899. };
  900. /*
  901. * 插入链接
  902. * cell 单元格
  903. */
  904. U.MD.O.E.RC.insertLink = function (cell) {
  905. U.UF.E.excelAddHref();
  906. }
  907. /*-------------------------------------------------------------------------- 以下右键待开发--------------------------------------------------------------------------*/
  908. /*
  909. * 插入图片
  910. * cell 单元格
  911. */
  912. U.MD.O.E.RC.insertImg = function (cell) {
  913. U.Alert("暂未开发!");
  914. }
  915. /*
  916. * 清除样式
  917. * cellList 单元格集合
  918. */
  919. U.MD.O.E.RC.clearStyle = function (cellList) {
  920. var _eiditorBox = $("#U_MD_O_E_editorBox")[0], //获取单元格的父元素
  921. _cellCheckd = $(".U_MD_O_E_cellCheckd"); //获取单元格
  922. for (var i = 0; i < _cellCheckd.length; i++) { //for循环遍历单元格
  923. _cellCheckd[i].style.fontWeight = "";
  924. _cellCheckd[i].style.fontStyle = "";
  925. _cellCheckd[i].style.textDecoration = "";
  926. _cellCheckd[i].style.textAlign = "";
  927. _cellCheckd[i].style.verticalAlign = "";
  928. _cellCheckd[i].style.display = ""; //单元格清除样式
  929. if (_cellCheckd[i].children[0]) //这边判断为第一个子元素
  930. _cellCheckd[i].children[0].style.verticalAlign = "";
  931. _cellCheckd[i].style.color = "";
  932. _cellCheckd[i].style.backgroundColor = "";
  933. _cellCheckd[i].style.fontFamily = "";
  934. _cellCheckd[i].style.fontSize = ""; //清除第一个子元素的样式
  935. }
  936. _eiditorBox.style.fontWeight = "";
  937. _eiditorBox.style.fontStyle = "";
  938. _eiditorBox.style.textDecoration = "";
  939. _eiditorBox.style.textAlign = "";
  940. _eiditorBox.style.verticalAlign = "";
  941. _eiditorBox.style.color = "";
  942. _eiditorBox.style.fontFamily = "";
  943. _eiditorBox.style.fontSize = ""; //清除单元格父元素的样式
  944. }
  945. /*
  946. * 清除内容
  947. * cellList 单元格集合
  948. */
  949. U.MD.O.E.RC.clearContent = function (cellList) {
  950. var _cellList = U.UF.C.toArray($(".U_MD_O_E_cellCheckd")), //选中的div
  951. _dataArr = []; //声明一个数组
  952. for (var i = 0; i < _cellList.length; i++) { //for循环遍历选中的单元格
  953. if (_cellList[i].innerText) { //判断选中单元格的内容
  954. _cellList[i].innerText = ""; //清除内容
  955. var _data = {
  956. row: _cellList[i].row,
  957. col: _cellList[i].col,
  958. content: _cellList[i].innerHTML,
  959. innerText: _cellList[i].innerText //之所以要发innerText 是因为要用来判断data数据里单元格的内容如果被改为空 则删除掉该单元格的数据
  960. }; //将内容打包给后台
  961. _dataArr.push(_data);
  962. }
  963. }
  964. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("blur", _dataArr)); //聚焦时 保存数据
  965. }
  966. /*
  967. * 设置列宽
  968. * startCol 开始列
  969. * endCol 结束列
  970. * colWidth 列宽
  971. */
  972. U.MD.O.E.RC.cBoardsetWidth = function (startCol, endCol, colWidth) {
  973. var _cBoardList = U.UF.C.toArray($(".U_MD_O_E_column")), //声明变量为表格列
  974. _setcBArr = _cBoardList.filter(function (el) {
  975. return el.colname >= startCol && el.colname <= endCol && el.offsetWidth !== (+colWidth);
  976. }), //创建一个包含新数组,测试开始列到结束列的列宽,通过时放入数组
  977. _dataArr = [],
  978. _colBoard = $(".U_MD_O_E_colBoard")[0];
  979. _setcBArr.forEach(function (el) { //for循环遍历列板
  980. _moveDis = colWidth - el.offsetWidth;
  981. var data = { //声明数组
  982. initWidth: el.offsetWidth,
  983. colName: el.colname,
  984. moveDis: _moveDis
  985. }
  986. el.style.width = colWidth + "px";
  987. _colBoard.style.width = _colBoard.offsetWidth + _moveDis + "px"; //设置列宽
  988. _dataArr.push(data);
  989. });
  990. U.MD.O.E.BC.colExpandingEnd(_dataArr);
  991. }
  992. /*
  993. * 隐藏列
  994. * startCol 开始列
  995. * endCol 结束列
  996. */
  997. U.MD.O.E.RC.cBoardHide = function (startCol, endCol) {
  998. U.Alert("暂未开发!");
  999. }
  1000. /*
  1001. * 取消隐藏列
  1002. * startCol 开始列
  1003. * endCol 结束列
  1004. */
  1005. U.MD.O.E.RC.cBoardCancelHide = function (startCol, endCol) {
  1006. U.Alert("暂未开发!");
  1007. }
  1008. /*
  1009. * 设置行高
  1010. * startRow 开始行
  1011. * endRow 结束行
  1012. * rowHeight 行高
  1013. */
  1014. U.MD.O.E.RC.rBoardsetHeight = function (startRow, endRow, rowHeight) {
  1015. var _rBoardList = U.UF.C.toArray($(".U_MD_O_E_row")), //声明变量为表格列
  1016. _setrBArr = _rBoardList.filter(function (el) {
  1017. return el.rowname >= startRow && el.rowname <= endRow && el.offsetHeight !== (+rowHeight);
  1018. }), //创建一个包含新数组,测试开始列到结束列的列宽,通过时放入数组
  1019. _dataArr = [],
  1020. _rowBoard = $(".U_MD_O_E_rowBoard")[0];
  1021. _setrBArr.forEach(function (el) {
  1022. _moveDis = rowHeight - el.offsetHeight;
  1023. var data = {//声明数组
  1024. initHeight: el.offsetHeight,
  1025. rowName: el.rowname,
  1026. moveDis: _moveDis
  1027. }
  1028. el.style.height = rowHeight + "px";
  1029. _rowBoard.style.height = _rowBoard.offsetHeight + _moveDis + "px"; //设置列宽
  1030. _dataArr.push(data);
  1031. });
  1032. U.MD.O.E.BC.rowExpandingEnd(_dataArr);
  1033. }
  1034. /*
  1035. * 隐藏行
  1036. * startRow 开始行
  1037. * endRow 结束行
  1038. */
  1039. U.MD.O.E.RC.rBoardHide = function (startRow, endRow) {
  1040. U.Alert("暂未开发!");
  1041. }
  1042. /*
  1043. * 隐藏行
  1044. * startRow 开始行
  1045. * endRow 结束行
  1046. */
  1047. U.MD.O.E.RC.rBoardCancelHide = function (startRow, endRow) {
  1048. U.Alert("暂未开发!");
  1049. }