ExcelTool.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. Namespace.register("U.MD.O.E.TL");
  2. /*excel 的 工具栏功能*/
  3. U.MD.O.E.setStyle = false;
  4. U.MD.O.E.clearStyle = false;
  5. /*
  6. 为选中单元格添加样式
  7. *attr 格式:{样式名:样式值}
  8. * cellArr 单元格数组 可选可不选
  9. * req 如果存在 则不发送send请求
  10. */
  11. U.MD.O.E.TL.setStyle = function (attr, cellArr, req) {
  12. var _attr = attr, //需添加的样式名和值,以json形式
  13. _sname, //添加的样式名字
  14. _scontent, //添加样式的内容
  15. _eiditorBox = $("#U_MD_O_E_editorBox")[0], //获取对象并命名
  16. _cellCheckd = cellArr || $(".U_MD_O_E_cellCheckd"), //获取对象并命名
  17. _dataArr = [], //添加空的数组
  18. _firstAttr = ""; //添加空的变量
  19. for (var key in _attr) {
  20. _sname = key; //键名
  21. _scontent = _attr[key]; //键值
  22. }
  23. for (var i = 0; i < _cellCheckd.length; i++) { //处理字体的循环
  24. _cellCheckd[i].setAttribute("name", "seted"); //给指定的元素添加属性
  25. if (_cellCheckd[i].style.fontWeight == "" && _sname == "fontWeight") { //判断字体是否加粗
  26. _eiditorBox.style[_sname] = _scontent;
  27. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname]; //设置属性字体加粗
  28. }
  29. else if (_cellCheckd[i].style.fontStyle == "" && _sname == "fontStyle") {//判断字体是否斜体
  30. _eiditorBox.style[_sname] = _scontent;
  31. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname]; //设置属性字体斜体
  32. }
  33. else if (_cellCheckd[i].style.textDecoration == "" && _sname == "textDecoration") {//判断字体是否下划线
  34. _eiditorBox.style[_sname] = _scontent;
  35. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname]; //设置属性字体下划线
  36. }
  37. else if (_cellCheckd[i].style.textDecoration == "underline" && _sname == "textDecoration" && _scontent == "line-through") {//删除线
  38. _eiditorBox.style[_sname] = _scontent;
  39. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname];
  40. }
  41. else if (_cellCheckd[i].style.textDecoration == "line-through" && _sname == "textDecoration" && _scontent == "underline") {//删除线切换到下划线
  42. _eiditorBox.style[_sname] = _scontent;
  43. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname];
  44. }
  45. else if ((_cellCheckd[i].style.textAlign == "" || _cellCheckd[i].style.textAlign == "left" || _cellCheckd[i].style.textAlign == "center" || _cellCheckd[i].style.textAlign == "right") && _sname == "textAlign") {//内容水平定位
  46. _eiditorBox.style[_sname] = _scontent;
  47. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname];
  48. }
  49. else if (_sname == "textAlign" && _cellCheckd[i].style.textAlign == _scontent) {//重复添加同一个水平定位样式时的清除
  50. _eiditorBox.style[_sname] = "";
  51. _cellCheckd[i].style[_sname] = "";
  52. }
  53. else if (_sname == "backgroundColor") {//背景色
  54. _cellCheckd[i].style[_sname] = _scontent;
  55. }
  56. else if (_sname == "color") {//字体色
  57. _cellCheckd[i].style[_sname] = _scontent;
  58. }
  59. else if (_sname == "fontFamily") {//字体系列
  60. _eiditorBox.style[_sname] = _scontent;
  61. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname];
  62. }
  63. else if (_sname == "fontSize") {//字体大小
  64. _eiditorBox.style[_sname] = _scontent;
  65. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname];
  66. }
  67. else { //重复选中时的清除
  68. _eiditorBox.style[_sname] = ""; //设置为空清除
  69. _cellCheckd[i].style[_sname] = _eiditorBox.style[_sname];
  70. attr = "";
  71. _scontent = "";
  72. }
  73. if (i == 0) {
  74. _firstAttr = attr;
  75. }
  76. var _info = { //设定数组并且赋值
  77. col: _cellCheckd[i].col,
  78. row: _cellCheckd[i].row,
  79. innerText: _cellCheckd[i].innerText, //为文本的内容
  80. attr: _sname, //属性
  81. value: _scontent
  82. };
  83. _dataArr.push(_info);
  84. }
  85. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("blur", _dataArr), req); //合并时 保存数据
  86. }
  87. /*
  88. * 清除所有样式
  89. * req 如果存在 则不发送send请求
  90. */
  91. U.MD.O.E.TL.clearStyle = function (cellArr, req) { //传入参数
  92. var _eiditorBox = $("#U_MD_O_E_editorBox")[0], //选择对象命名
  93. _cellCheckd = cellArr || $(".U_MD_O_E_cellCheckd"), //选择对象命名
  94. _dataArr = []; //设置空的数组
  95. for (var i = 0; i < _cellCheckd.length; i++) { //for循环指定对象长度
  96. U.MD.O.E.TL.cellClearStyle(_cellCheckd[i]);
  97. var _info = { //设定数组并且赋值
  98. col: _cellCheckd[i].col, //为指定为col 的参数
  99. row: _cellCheckd[i].row, //为指定为row 的参数
  100. innerText: _cellCheckd[i].innerText, //为指定为innerText 的文本内容
  101. clearStyle: true
  102. };
  103. _dataArr.push(_info); //调用函数传入数组
  104. }
  105. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("blur", _dataArr), req); //合并时 保存数据
  106. _eiditorBox.style.fontWeight = ""; //合并时保存数据重置属性fontWeight
  107. _eiditorBox.style.fontStyle = ""; //合并时保存数据重置属性fontStyle
  108. _eiditorBox.style.textDecoration = ""; //合并时保存数据重置属性textDecoration
  109. _eiditorBox.style.textAlign = ""; //合并时保存数据重置属性textAlign
  110. _eiditorBox.style.verticalAlign = ""; //合并时保存数据重置属性verticalAlign
  111. _eiditorBox.style.color = ""; //合并时保存数据重置属性color
  112. _eiditorBox.style.fontFamily = ""; //合并时保存数据重置属性fontFamily
  113. _eiditorBox.style.fontSize = ""; //合并时保存数据重置属性fontSize
  114. }
  115. /*
  116. * 单元格清除所有样式
  117. */
  118. U.MD.O.E.TL.cellClearStyle = function (cell) {
  119. cell.style.fontWeight = ""; //清除cell的样式fontWeight
  120. cell.style.fontStyle = ""; //清除cell的样式fontStyle
  121. cell.style.textDecoration = ""; //清除cell的样式textDecoration
  122. cell.style.textAlign = ""; //清除cell的样式textAlign
  123. cell.style.verticalAlign = ""; //清除cell的样式verticalAlign
  124. cell.endRow ? _cellCheckd[i].style.display = "" : ''; //如果不是合并单元格元素的话 则将display清除
  125. if (cell.children[0])
  126. cell.children[0].style.verticalAlign = "";
  127. cell.style.color = ""; //清除cell的样式color
  128. cell.style.backgroundColor = ""; //清除cell的样式backgroundColor
  129. cell.style.fontFamily = ""; //清除cell的样式fontFamily
  130. cell.style.fontSize = ""; //清除cell的样式fontSize
  131. }
  132. /*
  133. 修改文本垂直定位
  134. *attr 格式:{样式名:样式值}
  135. */
  136. U.MD.O.E.TL.setTextStyle = function (attr, cellArr) {
  137. var _attr = attr, //需添加的样式名和值,以json形式
  138. _sname, //添加的样式名字
  139. _scontent, //添加样式的内容
  140. _eiditorBox = $("#U_MD_O_E_editorBox")[0], //声明变量
  141. _cellCheckd = cellArr||$(".U_MD_O_E_cellCheckd"),//声明变量
  142. _cellArr = []; //声明数组并为空
  143. for (var key in _attr) { //for循环json数组
  144. _sname = key; //键名
  145. _scontent = _attr[key]; //键值
  146. for (var i = 0; i < _cellCheckd.length; i++) { //for循环遍历
  147. _eiditorBox.style[_sname] = _scontent;
  148. _cellCheckd[i].style.display = 'table'; //更改样式
  149. if (_cellCheckd[i].children[0]) //文本子节点
  150. _cellCheckd[i].children[0].style[_sname] = _scontent;
  151. _cellArr.push(_cellCheckd[i].id); //调用函数
  152. }
  153. }
  154. console.log(_cellArr);
  155. console.log(attr);
  156. }
  157. /**
  158. * Excel颜色选择器
  159. * @param el 绑定了事件的元素
  160. * @param event 鼠标事件
  161. */
  162. U.MD.O.E.TL.colorPicker = function (el, event) {
  163. U.MD.O.E.TL.colorPicker.clickEl = el; /*button*/
  164. /*判断是否创建色板*/
  165. if (!U.MD.O.E.TL.colorPicker.ColorPickerEl) { //判断有没有创建色板
  166. U.MD.O.E.TL.colorPicker.ColorPickerEl = U.MD.UI.ColorPicker(U.MD.O.E.TL.colorPicker.ColorPickerEl, U.MD.O.E.TL.changeColor); /*生成色板*/
  167. document.body.appendChild(U.MD.O.E.TL.colorPicker.ColorPickerEl) /*将色板添加到body里面*/
  168. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.position = 'absolute'; /*将绝对定位赋值给色板*/
  169. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.zIndex = '9999' /*层级为2*/
  170. }
  171. if (el.parentNode.className == "BD_BorderPicker") {
  172. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.left = el.parentNode.offsetLeft + 'px'; /*定位色板x位置*/
  173. } else {
  174. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.left = event.target.getBoundingClientRect().left + 'px'; /*定位色板x位置*/
  175. }
  176. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.top = event.target.getBoundingClientRect().top + 30 + (document.documentElement.scrollTop || document.body.scrollTop) + 'px'; /*定位色板y位置*/
  177. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.display = "block"; /*让色板显示出来*/
  178. U.UF.EV.stopBubble(event); //调用停止函数
  179. }
  180. U.MD.O.E.TL.colorPicker.clickEl = null; /*点击按钮*/
  181. U.MD.O.E.TL.colorPicker.ColorPickerEl = null; /*当前颜色div*/
  182. /**
  183. * 改变两个小块的颜色
  184. * @param r 返回颜色值
  185. */
  186. U.MD.O.E.TL.changeColor = function (r) {
  187. var _changeEl = U.MD.O.E.TL.colorPicker.clickEl.querySelector('div[changecolor]'); /*获取自定义属性的元素*/
  188. _changeEl.style.background = r; /*改变小块的颜色*/
  189. console.log(_changeEl);
  190. if (_changeEl && _changeEl.getAttribute('changecolor') == 'font') /*判断自定义属性的内容*/
  191. U.MD.O.E.TL.setStyle({ 'color': U.UF.C.getColorByRGB(r) }); /*设置光标选中的样式*/
  192. else if (_changeEl && _changeEl.getAttribute('changecolor') == 'bdcolor')
  193. ;
  194. else
  195. U.MD.O.E.TL.setStyle({ 'backgroundColor': U.UF.C.getColorByRGB(r) }); /*设置光标选中的样式*/
  196. U.MD.O.E.TL.colorPicker.ColorPickerEl.style.display = "none"; /*选择完后隐藏起来*/
  197. }
  198. /**
  199. * 设置多样式json 的样式
  200. * @param cell 单元格
  201. * @param attr 为{attr:value,attr:value,attr:value}多样式json
  202. */
  203. U.MD.O.E.TL.jsonSetStyle = function (cell, attr) {
  204. for (var i in attr) {
  205. cell.style[i] = attr[i]
  206. }
  207. }
  208. /*
  209. *改变单元格边框样式
  210. *el 边框改变的效果
  211. *attr 格式:{样式名:样式值}
  212. * cellArr 单元格数组 可选可不选
  213. */
  214. U.MD.O.E.TL.setBorderStyle = function (el, attr, cellArr, req) {
  215. $(".BD_BorderPicker")[0].style.display = "none"; //声明对象的元素
  216. var _el = el, //声明变量
  217. _type;
  218. if (typeof (_el) == "string") { //判断变量
  219. _type = _el;
  220. } else {
  221. _type = _el.title;
  222. }
  223. var _color = U.UF.C.getColorByRGB($("#bdcolor")[0].style.background), //声明对象元素
  224. _attr = attr, //需添加的样式名和值,以json形式
  225. _sname, //添加的样式名字
  226. _scontent, //添加样式的内容
  227. _eiditorBox = $("#U_MD_O_E_editorBox")[0],
  228. _cellCheckd = cellArr || $(".U_MD_O_E_cellCheckd"),
  229. _cellLeft, //左边框
  230. _cellTop,
  231. _cellRight,
  232. _cellBottom,
  233. _row = $(".U_MD_O_E_row"),
  234. _col = $(".U_MD_O_E_column"),
  235. _left, //起始x
  236. _top, //起始y
  237. _right, //结束x
  238. _bottom, //结束y
  239. _data
  240. _dataArr = [];//创建数组为空
  241. console.log(_cellCheckd.length);
  242. console.log(_cellCheckd);
  243. for (var key in _attr) {
  244. _sname = key; //键名
  245. _scontent = _attr[key]; //键值
  246. }
  247. if (_type != "无框线" && typeof (_el) == "string") { //判断单元格有无框线
  248. } else if (_type != "无框线") { //判断单元格有无框线
  249. _scontent = _scontent + " " + _color;
  250. }
  251. for (var i = 0; i < _cellCheckd.length; i++) { //for循环遍历
  252. if (i == 0) {
  253. _left = _cellCheckd[i].col; //给予for循环里面的第一个元素赋值
  254. _top = _cellCheckd[i].row;
  255. }
  256. if (i == _cellCheckd.length - 1) { //给予for循环里面的最后一个元素赋值
  257. _right = _cellCheckd[i].col;
  258. _bottom = _cellCheckd[i].row;
  259. }
  260. }
  261. if (_type == "所有边框" || _type == "无框线") {//边框
  262. for (var i = 0; i < _cellCheckd.length; i++) {//for循环遍历
  263. _cellCheckd[i].setAttribute("name", "seted"); //给每一个元素添加属性元素
  264. _cellCheckd[i].style.borderRight = _scontent; //右边框
  265. _cellCheckd[i].style.borderBottom = _scontent; //底部边框
  266. if (_cellCheckd[i].col == 1) {
  267. if (_type == "无框线")
  268. _cellCheckd[i].style.borderLeft = "none"; //左边框
  269. else
  270. _cellCheckd[i].style.borderLeft = _scontent;
  271. _data = { //数组赋值
  272. col: _cellCheckd[i].col, //指定对象的col参数
  273. row: _cellCheckd[i].row, //指定对象的row参数
  274. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  275. attr: _sname, //属性
  276. br: "border-left", //指定元素的br参数
  277. value: _type == "无框线" ? "none" : _scontent, //指定为type内容的value参数
  278. bordertype: _type //指定变量的bordertype参数
  279. };
  280. _dataArr.push(_data); //传入数组调用函数
  281. } else if (_cellCheckd[i].col == _left) {
  282. _cellLeft = $("#POS_" + (_cellCheckd[i].col - 1) + "_" + (_cellCheckd[i].row) + "")[0];
  283. _cellLeft.style.borderRight = _scontent;
  284. _data = {
  285. col: _cellCheckd[i].col - 1, //指定对象的col参数
  286. row: _cellCheckd[i].row, //指定对象的row参数
  287. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  288. attr: _sname, //属性
  289. br: "border-right", //指定元素的br参数
  290. value: _scontent, //指定为_scontent内容的value参数
  291. bordertype: _type
  292. };
  293. _dataArr.push(_data); //传入数组调用函数
  294. }
  295. if (_cellCheckd[i].row == 1) {
  296. if (_type == "无框线") //判断有无框线
  297. _cellCheckd[i].style.borderTop = "none"; //添加对象的样式
  298. else
  299. _cellCheckd[i].style.borderTop = _scontent; //添加对象的样式
  300. _data = { //声明数组
  301. col: _cellCheckd[i].col, //指定对象的col参数
  302. row: _cellCheckd[i].row, //指定对象的row参数
  303. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  304. attr: _sname, //属性
  305. bb: "border-top", //指定元素的br参数
  306. value: _type == "无框线" ? "none" : _scontent, //指定为type内容的value参数
  307. bordertype: _type
  308. };
  309. _dataArr.push(_data);
  310. } else if (_cellCheckd[i].row == _top) {
  311. _cellTop = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row - 1) + "")[0]; //声明变量的内容
  312. _cellTop.style.borderBottom = _scontent; //添加样式
  313. _data = {
  314. col: _cellCheckd[i].col, //指定对象的col参数
  315. row: _cellCheckd[i].row - 1, //指定对象的row参数
  316. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  317. attr: _sname, //属性
  318. bb: "border-bottom", //指定元素的br参数
  319. value: _scontent, //指定为_scontent内容的value参数
  320. bordertype: _type //指定为_type内容的bordertype参数
  321. };
  322. _dataArr.push(_data); //传入数组调用函数
  323. }
  324. _data = {
  325. col: _cellCheckd[i].col, //指定对象的col参数
  326. row: _cellCheckd[i].row, //指定对象的row参数
  327. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  328. attr: _sname, //属性
  329. br: "border-right", //指定元素的br参数
  330. bb: "border-bottom", //指定元素的br参数
  331. value: _scontent, //指定为_scontent内容的value参数
  332. bordertype: _type //指定为_type内容的bordertype参数
  333. };
  334. _dataArr.push(_data); //传入数组调用函数
  335. }
  336. }
  337. else if (_type == "外侧框线") { //判断参数_type是否为外侧框线
  338. for (var i = 0; i < _cellCheckd.length; i++) { //for循环遍历
  339. if (_cellCheckd[i].col == 1) { //变量等于1的时候
  340. _cellCheckd[i].style.borderLeft = _scontent;
  341. _data = { //声明数组
  342. col: _cellCheckd[i].col, //指定对象的col参数
  343. row: _cellCheckd[i].row, //指定对象的row参数
  344. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  345. attr: _sname, //属性
  346. br: "border-left", //指定元素的br参数
  347. value: _scontent, //指定为_scontent内容的value参数
  348. bordertype: _type //指定为_type内容的bordertype参数
  349. };
  350. _dataArr.push(_data); //传入数组调用函数
  351. } else if (_cellCheckd[i].col == _left) {
  352. _cellLeft = $("#POS_" + (_cellCheckd[i].col - 1) + "_" + (_cellCheckd[i].row) + "")[0];
  353. _cellLeft.style.borderRight = _scontent;
  354. _data = { //声明数组
  355. col: _cellCheckd[i].col - 1, //指定对象的col参数
  356. row: _cellCheckd[i].row, //指定对象的row参数
  357. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  358. attr: _sname, //属性
  359. br: "border-right", //指定元素的br参数
  360. value: _scontent, //指定为_scontent内容的value参数
  361. bordertype: _type //指定为_type内容的bordertype参数
  362. };
  363. _dataArr.push(_data); //传入数组调用函数
  364. }
  365. if (_cellCheckd[i].row == 1) {
  366. _cellCheckd[i].style.borderTop = _scontent;
  367. _data = { //声明数组
  368. col: _cellCheckd[i].col, //指定对象的col参数
  369. row: _cellCheckd[i].row, //指定对象的row参数
  370. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  371. attr: _sname, //属性
  372. bb: "border-top", //指定元素的bb参数
  373. value: _scontent, //指定为_scontent内容的value参数
  374. bordertype: _type //指定为_type内容的bordertype参数
  375. };
  376. _dataArr.push(_data); //传入数组调用函数
  377. } else if (_cellCheckd[i].row == _top) {
  378. _cellTop = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row - 1) + "")[0];
  379. _cellTop.style.borderBottom = _scontent;
  380. _data = { //声明数组
  381. col: _cellCheckd[i].col, //指定对象的col参数
  382. row: _cellCheckd[i].row - 1, //指定对象的row参数
  383. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  384. attr: _sname, //属性
  385. bb: "border-bottom", //指定元素的bb参数
  386. value: _scontent, //指定为_scontent内容的value参数
  387. bordertype: _type //指定为_type内容的bordertype参数
  388. };
  389. _dataArr.push(_data); //传入数组调用函数
  390. }
  391. if (_cellCheckd[i].col == _right) { //判断框线的右框线
  392. _cellRight = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row) + "")[0];
  393. _cellRight.style.borderRight = _scontent; //添加变量的样式
  394. _data = { col: _cellRight.col, row: _cellRight.row, innerText: _cellRight.innerText, attr: _sname, br: "border-right", value: _scontent, bordertype: _type };
  395. _dataArr.push(_data); //传入数组调用函数
  396. }
  397. if (_cellCheckd[i].row == _bottom) { //判断框线的底部框线
  398. _cellBottom = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row) + "")[0];
  399. _cellBottom.style.borderBottom = _scontent; //添加变量的样式
  400. _data = { col: _cellBottom.col, row: _cellBottom.row, innerText: _cellBottom.innerText, attr: _sname, bb: "border-bottom", value: _scontent, bordertype: _type };
  401. _dataArr.push(_data); //传入数组调用函数
  402. }
  403. }
  404. }
  405. else if (_type == "上框线") { //判断框线为上框线
  406. for (var i = 0; i < _cellCheckd.length; i++) {
  407. if (_cellCheckd[i].row == 1) {
  408. _cellCheckd[i].style.borderTop = _scontent;
  409. _data = {
  410. col: _cellCheckd[i].col, //指定对象的col参数
  411. row: _cellCheckd[i].row, //指定对象的row参数
  412. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  413. attr: _sname, //属性
  414. bb: "border-top", //指定元素的bb参数
  415. value: _scontent, //指定为_scontent内容的value参数
  416. bordertype: _type //指定为_type内容的bordertype参数
  417. };
  418. _dataArr.push(_data);
  419. } else if (_cellCheckd[i].row == _top) {
  420. _cellTop = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row - 1) + "")[0];
  421. _cellTop.style.borderBottom = _scontent;
  422. _data = {
  423. col: _cellCheckd[i].col, //指定对象的col参数
  424. row: _cellCheckd[i].row - 1, //指定对象的row参数
  425. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  426. attr: _sname, //属性
  427. bb: "border-bottom", //指定元素的bb参数
  428. value: _scontent, //指定为_scontent内容的value参数
  429. bordertype: _type //指定为_type内容的bordertype参数
  430. };
  431. _dataArr.push(_data);
  432. }
  433. }
  434. }
  435. else if (_type == "下框线" || _type == "双底框线") { //判断为双底框线
  436. for (var i = 0; i < _cellCheckd.length; i++) {
  437. if (_cellCheckd[i].row == _bottom) {
  438. _cellBottom = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row) + "")[0];
  439. _cellBottom.style.borderBottom = _scontent; //指定数组的参数
  440. _data = { col: _cellBottom.col, row: _cellBottom.row, innerText: _cellBottom.innerText, attr: _sname, bb: "border-bottom", value: _scontent, bordertype: _type };
  441. _dataArr.push(_data);
  442. }
  443. }
  444. }
  445. else if (_type == "左框线") { //判断指定为左框线
  446. for (var i = 0; i < _cellCheckd.length; i++) {
  447. if (_cellCheckd[i].col == 1) {
  448. _cellCheckd[i].style.borderLeft = _scontent; //添加元素
  449. _data = {
  450. col: _cellCheckd[i].col, //指定对象的col参数
  451. row: _cellCheckd[i].row, //指定对象的row参数
  452. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  453. attr: _sname, //属性
  454. br: "border-left", //指定元素的br参数
  455. value: _scontent, //指定为_scontent内容的value参数
  456. bordertype: _type //指定为_type内容的bordertype参数
  457. };
  458. _dataArr.push(_data);
  459. } else if (_cellCheckd[i].col == _left) {
  460. _cellLeft = $("#POS_" + (_cellCheckd[i].col - 1) + "_" + (_cellCheckd[i].row) + "")[0];
  461. _cellLeft.style.borderRight = _scontent;
  462. _data = {
  463. col: _cellCheckd[i].col - 1, //指定对象的col参数
  464. row: _cellCheckd[i].row, //指定对象的row参数
  465. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  466. attr: _sname, //属性
  467. br: "border-right", //指定元素的br参数
  468. value: _scontent, //指定为_scontent内容的value参数
  469. bordertype: _type //指定为_type内容的bordertype参数
  470. };
  471. _dataArr.push(_data);
  472. }
  473. }
  474. }
  475. else if (_type == "右框线") { //判断为有边框
  476. for (var i = 0; i < _cellCheckd.length; i++) {
  477. if (_cellCheckd[i].col == _right) {
  478. _cellRight = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row) + "")[0];
  479. _cellRight.style.borderRight = _scontent; //指定数组的参数调用函数
  480. _data = { col: _cellRight.col, row: _cellRight.row, innerText: _cellRight.innerText, attr: _sname, br: "border-right", value: _scontent, bordertype: _type };
  481. _dataArr.push(_data);
  482. }
  483. }
  484. }
  485. else if (_type == "上下框线") { //判断为上下框线
  486. for (var i = 0; i < _cellCheckd.length; i++) {
  487. if (_cellCheckd[i].row == 1) {
  488. _cellCheckd[i].style.borderTop = _scontent;
  489. _data = {
  490. col: _cellCheckd[i].col, //指定对象的col参数
  491. row: _cellCheckd[i].row, //指定对象的row参数
  492. innerText: _cellCheckd[i].innerText, //指定对象的文本内容
  493. attr: _sname, //属性
  494. bb: "border-top", //指定元素的br参数
  495. value: _scontent, //指定为_scontent内容的value参数
  496. bordertype: _type //指定为_type内容的bordertype参数
  497. };
  498. _dataArr.push(_data);
  499. } else if (_cellCheckd[i].row == _top) {
  500. _cellTop = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row - 1) + "")[0];
  501. _cellTop.style.borderBottom = _scontent;
  502. _data = {
  503. col: _cellCheckd[i].col, //指定为_type内容的bordertype参数
  504. row: _cellCheckd[i].row - 1, //指定对象的row参数
  505. innerText: _cellCheckd[i].innerText,
  506. attr: _sname, //属性
  507. bb: "border-bottom", //指定元素的br参数
  508. value: _scontent, //指定为_scontent内容的value参数
  509. bordertype: _type //指定为_type内容的bordertype参数
  510. };
  511. _dataArr.push(_data);
  512. }
  513. if (_cellCheckd[i].row == _bottom) { //判断为下边框
  514. _cellBottom = $("#POS_" + (_cellCheckd[i].col) + "_" + (_cellCheckd[i].row) + "")[0];
  515. _cellBottom.style.borderBottom = _scontent; //传入数组赋值,调用函数
  516. _data = { col: _cellBottom.col, row: _cellBottom.row, innerText: _cellBottom.innerText, attr: _sname, bb: "border-bottom", value: _scontent, bordertype: _type };
  517. _dataArr.push(_data);
  518. }
  519. }
  520. }
  521. console.log(_dataArr);
  522. U.MD.O.E.dataChange(U.MD.O.E.excelInfo("setBorder", _dataArr), req); //合并时 保存数据
  523. U.UF.EV.stopBubble(window.event);
  524. }
  525. /**
  526. * 创建边框选区
  527. * 在U.MD.O.E.initExcel里调用
  528. */
  529. U.MD.O.E.TL.borderPicker = function () {
  530. var barelement = $("#bd_Pick")[0];
  531. var div = $$("div", { //创建div赋属性元素的值
  532. datacontent: '',
  533. style: {
  534. width: "120px",
  535. height: "80px",
  536. border: "1px solid #CDCDCD",
  537. backgroundColor: " #FFF",
  538. padding: "10px 10px 10px 5px",
  539. position: "absolute",
  540. left: $(".U_MD_O_E_Editor_head_features_ul_ibtmore")[0].offsetLeft + "px",
  541. display: "none",
  542. zIndex: 1
  543. }
  544. , "className": "BD_BorderPicker" //赋值属性名
  545. }, barelement); //创建外部div对象
  546. $(barelement).bind('click', function (e) { /*绑定事件*/
  547. U.UF.EV.stopBubble(e);
  548. //阻止事件冒泡
  549. });
  550. div.innerHTML = "<div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px 1px;width: 24px; height: 18px' title='所有边框' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -28px;width: 24px; height: 18px' title='外侧框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -57px;width: 24px; height: 18px' title='无框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid #bebebe\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -85px;width: 24px; height: 18px' title='上框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -113px;width: 24px; height: 18px' title='下框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -143px;width: 24px; height: 18px' title='左框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -171px;width: 24px; height: 18px' title='右框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -199px;width: 24px; height: 18px' title='上下框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"1px solid\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibt' style='background-position: 5px -228px;width: 24px; height: 18px' title='双底框线' onmousedown='U.MD.O.E.TL.setBorderStyle(this,{ \"border\": \"3px double\" });'></div><div class='U_MD_O_E_Editor_head_features_ul_ibtcolor' title='边框颜色' onclick = 'U.MD.O.E.TL.colorPicker(this, event)'><div style='float:left;padding-top: 5px;margin-left:6px'><div class='' style='background: url(/img/bordercolor.png) no-repeat;width: 14px; height: 14px;float: none;margin: 2px'></div><div style='width:18px;height: 4px; background: #000;' changecolor='bdcolor' id='bdcolor'></div></div><div class='U_MD_O_E_Editor_head_features_ul_bctext' style='padding-top: 7px;width:96px;height:22px;text-align:left;line-height:22px;float:right'>边框颜色</div>";
  551. }
  552. /*
  553. *边框选择框的显示与隐藏
  554. */
  555. U.MD.O.E.TL.borderPickerShow = function () {
  556. var _el = $(".BD_BorderPicker")[0]; //声明变量
  557. if (_el.style.display == "none") //触发函数时改变display的状态
  558. _el.style.display = "block";
  559. }
  560. U.MD.O.E.TL.hideChange = function (el) {
  561. if (!el.children.length) /*判断是否有子元素*/
  562. return;
  563. el.style.display === 'table-row' ? el.style.display = 'none' : el.style.display = 'table-row'; /*显示隐藏*/
  564. }
  565. /**
  566. * 给工具栏绑定onresize事件
  567. * @param moreareael 存放超出内容的div
  568. */
  569. U.MD.O.E.TL.toolsbind = function (moreareael) {
  570. var _toolsEl = $('#tools')[0];
  571. _toolsEl.onresize = function () { /*给工具栏绑定onresize事件*/
  572. U.MD.O.E.TL.toolbarCheck(_toolsEl, moreareael);
  573. };
  574. U.MD.O.E.TL.toolbarCheck(_toolsEl, moreareael);
  575. }
  576. /**
  577. * 工具栏检测内容区域大小
  578. * @param forms 工具栏div
  579. * @param moreareael 存放超出内容的div
  580. */
  581. U.MD.O.E.TL.toolbarCheck = function (forms, moreareael) {
  582. var _winW = forms.clientWidth; /*获取工具栏可视长*/
  583. var _morealattice = $(".U_MD_O_H_head_mo")[0]; //获取对象
  584. var _partition1 = $('div[partition="1"]')[0];
  585. console.log(_winW);
  586. if (_winW > 1189) { //当大于1189xp将隐藏,当小于时显示
  587. $('#moreButton')[0].style.display = 'none'
  588. } else {
  589. $('#moreButton')[0].style.display = 'block'
  590. }
  591. if (!(_winW > 750)) { //当大于780xp将局左,小于时不居左
  592. moreareael.querySelector('div[partition="1"]').style.float = "";
  593. } else if (_winW > 750) {
  594. _partition1.style.float = "left";
  595. }
  596. if (!(_winW > 849) && !moreareael.querySelector('div[partition="4"]')) { /*当小于732px将第四组工具转移*/
  597. moreareael.insertBefore($('div[partition="4"]')[0], moreareael.firstElementChild) /*将第四组转移*/
  598. } else {
  599. if (_winW > 849 && moreareael.querySelector('div[partition="4"]'))
  600. moreareael.parentNode.insertBefore($('div[partition="4"]')[0], moreareael.previousElementSibling) /*将第四组重新添加到工具栏里*/
  601. }
  602. if (!(_winW > 922) && !moreareael.querySelector('div[partition="3"]')) { /*当小于873px将第三组工具转移*/
  603. moreareael.insertBefore($('div[partition="3"]')[0], moreareael.firstElementChild)/*将第三组转移*/
  604. _morealattice.style.right = "";
  605. _morealattice.style.left = "0px";
  606. } else {
  607. if (_winW > 922 && moreareael.querySelector('div[partition="3"]'))
  608. moreareael.parentNode.insertBefore($('div[partition="3"]')[0], moreareael.previousElementSibling)/*将第三组重新添加到工具栏里*/
  609. if (_winW > 922) {/*当大于922px左右居清空*/
  610. _morealattice.style.right = "0px";
  611. _morealattice.style.left = "";
  612. }
  613. }
  614. if (!(_winW > 1186) && !moreareael.querySelector('div[partition="2"]')) { /*当小于1012px将第二组工具转移*/
  615. moreareael.insertBefore($('div[partition="2"]')[0], moreareael.firstElementChild)/*将第二组转移*/
  616. } else {
  617. if (_winW > 1186 && moreareael.querySelector('div[partition="2"]'))
  618. moreareael.parentNode.insertBefore($('div[partition="2"]')[0], moreareael.previousElementSibling)/*将第二组重新添加到工具栏里*/
  619. }
  620. if (!(_winW > 1189) && !moreareael.querySelector('div[partition="1"]')) { /*当小于1153px将第一组工具转移*/
  621. moreareael.appendChild($('div[partition="1"]')[0]); /*将第一组转移*/
  622. } else {
  623. if (_winW > 1189 && moreareael.querySelector('div[partition="1"]'))
  624. moreareael.parentNode.insertBefore($('div[partition="1"]')[0], moreareael.previousElementSibling)/*将第一组重新添加到工具栏里*/
  625. if (_winW > 1189) {/*当大于1153px将隐藏更多工具栏*/
  626. _morealattice.style.display = "none";
  627. }
  628. }
  629. }