复件 fcRep.js
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:128k
源码类别:

OA系统

开发平台:

Java

  1. //检查是否有复制的数据
  2. //if (blockObjAry.length<=0 ){
  3. clipboard=window.clipboardData.getData("Text")
  4. if (clipboard=="" || clipboard==null ) {
  5. alert("您还未做区域数据的复制,先复制数据,然后再做粘贴!")
  6. }
  7. else
  8. {
  9. SaveoUndoOneRecord()
  10. //从外部复制来的数据
  11. var arrRow,arrCol
  12. arrRow=clipboard.split("n")
  13. for (var i=0 ;i<arrRow.length;i++) {
  14. arrCol=arrRow[i].split("t")
  15. for (var j=0;j<arrCol.length;j++) {
  16. var arr=PhyToLog(i+sRowSort,j+sColSort)
  17. var curTD=t.rows(arr[0]).cells(arr[1])
  18. //var logCol=physicalToLogic(i+sRow,j+sCol)
  19. try {
  20. curTD.innerText=arrCol[j]
  21. }
  22. catch (e) {}
  23. }
  24. }
  25. SaveoRedoOneRecord()
  26. clearBlueScale()
  27. }
  28. return
  29. //}
  30. //如果是选定单个单元格则用平铺的方法粘贴
  31. var blnBlockTile=false//块平铺
  32. var lngStatus=SelStatus(sRow,sCol,eRow,eCol)
  33. if (lngStatus==1){
  34. blnBlockTile=true
  35. }
  36. else{
  37. //检查区域是否匹配
  38. if ((eRowSort-sRowSort+1)*(eColSort-sColSort+1)!=(blockObjAry.length-2) || (eRowSort-sRowSort)!=blockObjAry[0] || (eColSort-sColSort)!=blockObjAry[1]){
  39. alert("复制的区域与粘贴的区域形状不同,不能完成粘贴,请选定一区域使该区域与源区域的大小和形状一致,再粘贴!")
  40. return
  41. }
  42. }
  43. //检查粘贴的区域中是否有合并的单元格
  44. /*
  45. if (oRect.documentElement.xml.length>13)
  46. {
  47. var eRowno,eColno
  48. if (blnBlockTile==false)
  49. eRowno=eRow
  50. else
  51. eRowno=sRow+blockObjAry[0]
  52. if (blnBlockTile==false)
  53. eColno=eCol
  54. else
  55. eColno=sCol+blockObjAry[1]
  56. var oSel=oRect.documentElement.selectSingleNode("//record[row0='" + sRow + "' and col0='" + sCol+ "' and row1='" + eRowno + "' and col1='" + eColno+ "']")
  57. if (oSel!=null)
  58. {
  59. //alert("重合拆分")
  60. //处理重合,拆分的情况,选中一个合并后的大格
  61. alert("粘贴的区域中有合并单元格,不能完成粘贴,请选定一区域使该区域与源区域的大小和形状一致,再粘贴!")
  62. return
  63. }
  64. else
  65. {
  66. for (i=0;i<=oRect.documentElement.childNodes.length-1;i++)
  67. {
  68. var oChild=oRect.documentElement.childNodes.item(i)
  69. if (parseInt(oChild.childNodes.item(0).text)>eRowno||parseInt(oChild.childNodes.item(1).text)>eColno||parseInt(oChild.childNodes.item(2).text)<sRow||parseInt(oChild.childNodes.item(3).text)<sCol) 
  70. {//没有相交
  71. }
  72. else
  73. {//有相交
  74. alert("粘贴的区域中有合并单元格,不能完成粘贴,请选定一区域使该区域与源区域的大小和形状一致,再粘贴!")
  75. return
  76. }
  77. }
  78. }
  79. }
  80. */
  81. //块粘贴
  82. SaveoUndoOneRecord()//在改变之前保存住位置,备undo时装入
  83. var i,j
  84. var inx=2
  85. var sColno,eColno
  86. var eRowno//结束行
  87. if (blnBlockTile==false)
  88. eRowno=eRowSort
  89. else
  90. eRowno=sRowSort+blockObjAry[0]
  91. for (i=sRowSort;i<=eRowno;i++){
  92. if (i>=t.rows.length)
  93. break
  94. sColno=sColSort
  95. if (blnBlockTile==false)
  96. eColno=eColSort
  97. else
  98. eColno=sColSort+blockObjAry[1]
  99. /*
  100. var osFind=oCoor.documentElement.selectNodes("//record[row='" + i + "' and col='" +sCol +"']")
  101. if (osFind.length>=1)
  102. sColno=parseInt(osFind.item(0).childNodes.item(2).text)
  103. var osFind=oCoor.documentElement.selectNodes("//record[row='" + i + "' and col='" +eColno +"']")
  104. if (osFind.length>=1)
  105. eColno=parseInt(osFind.item(0).childNodes.item(2).text)
  106. */
  107. for (j=sColno;j<=eColno;j++){
  108. var arr=PhyToLog(i,j)
  109. var curTD=t.rows(arr[0]).cells(arr[1])
  110. if (j>=t.rows(0).cells.length){
  111. inx=inx+sColno+blockObjAry[1]-j
  112. break
  113. }
  114. curTD.innerText=blockObjAry[inx]
  115. //curTD.replaceNode(blockObjAry[inx])
  116. //将粘贴的单元格的行高与列宽修改成本单元格的行高与列宽
  117. inx=inx+1
  118. }
  119. }
  120. //块删除
  121. blockObjAry=new Array()
  122. SaveoRedoOneRecord()//在改变之后保存住位置,备redo时装入
  123. //将选择单元的值给文本框tdtotxt
  124. /* var arr=PhyToLog(sRow,sCol)
  125. var curTD=t.rows(arr[0]).cells(arr[1])
  126. txtMyGrid.value=curTD.innerText
  127. ExitMe()
  128. */
  129. clearBlueScale()
  130. txtMyGrid.style.display="none"
  131. }
  132. /**
  133. *工具栏上的格式刷按钮的点击事件
  134. **/
  135. function cmdFormatBrush() {
  136. if(blnRunMode)return
  137. if (cmdBrush.getAttribute("fcDown")=="1") {
  138. cmdBrush.setAttribute("fcDown","0")
  139. cmdBrush.className="tblclassup"
  140. }
  141. else {
  142. cmdCopyFormat()
  143. cmdBrush.setAttribute("fcDown","1")
  144. cmdBrush.className="divmenutrue"
  145. }
  146. }
  147. /**
  148. *工具栏上的复制按钮的点击事件
  149. **/
  150. function cmdCopyFormat() {
  151. if (tc.style.display =="none")
  152. return
  153. // if (lngStatus==3 || lngStatus==4 ){
  154. // alert("选择的区域内有合并单元格,不能做块复制!")
  155. // return
  156. // }
  157. FormatRow=sRow
  158. FormatCol=sCol
  159. }
  160. /**
  161. *工具栏上的粘贴按钮的点击事件
  162. **/
  163. function cmdPasteFormat() {
  164. SaveoUndoOneRecord()
  165. var arrFormat=PhyToLog(FormatRow,FormatCol)
  166. var i,j
  167. for (i=sRowSort;i<=eRowSort;i++)
  168. {
  169. for (j=sColSort;j<=eColSort;j++) {
  170. var arr=PhyToLog(i,j)
  171. var curTD=t.rows(arr[0]).cells(arr[1])
  172. var gNodeTD=t.rows(arrFormat[0]).cells(arrFormat[1]).cloneNode(true)
  173. gNodeTD.rowSpan=curTD.rowSpan
  174. gNodeTD.colSpan=curTD.colSpan
  175. var sTmp=curTD.innerText
  176. curTD.replaceNode(gNodeTD)
  177. t.rows(arr[0]).cells(arr[1]).innerText=sTmp
  178. }
  179. }
  180. SaveoRedoOneRecord()
  181. }
  182. /**
  183. *删除所有的oUndo与oRedo对象中的节点
  184. **/
  185. function initoUndooRedo(){
  186. lngUndo=-1//childNodes.item(0)从0开始
  187. lngRedo=-1
  188. cmdUndo.disabled =true
  189. cmdRedo.disabled =true
  190. oUndo.loadXML("<root></root>")
  191. oRedo.loadXML("<root></root>")
  192. }
  193. /**
  194. *增加一行oRedo对象的记录,按先进先出的规则,保持只有8条记录
  195. **/
  196. function SaveoRedoOneRecord(){
  197. var root = oRedo.documentElement
  198. var newNode = oRedo.createNode (1, "record", "")
  199. root.appendChild(newNode)
  200. var newElem = oRedo.createElement("cell") //表格
  201. newNode.appendChild(newElem)
  202. newNode.lastChild.text = escape(t.outerHTML )
  203. var newElem = oRedo.createElement("cellcopy") //表格Copy
  204. newNode.appendChild(newElem)
  205. newNode.lastChild.text = escape(tCopy.outerHTML )
  206. var newElem = oRedo.createElement("oFormula")
  207. newNode.appendChild(newElem)
  208. newNode.lastChild.text = escape(oFormula.documentElement.xml)
  209. if (oRedo.documentElement.childNodes.length >8) {
  210. DeleteoRedoOneRecord(0)
  211. }
  212. }
  213. /**
  214. *增加一行oUndo对象的记录,按先进先出的规则,保持只有8条记录
  215. **/
  216. function SaveoUndoOneRecord(){
  217. var root = oUndo.documentElement
  218. var newNode = oUndo.createNode (1, "record", "")
  219. root.appendChild(newNode)
  220. var newElem = oUndo.createElement("cell") //表格
  221. newNode.appendChild(newElem)
  222. newNode.lastChild.text = escape(t.outerHTML )
  223. var newElem = oUndo.createElement("cellcopy") //表格
  224. newNode.appendChild(newElem)
  225. newNode.lastChild.text = escape(tCopy.outerHTML )
  226. var newElem = oUndo.createElement("oFormula")
  227. newNode.appendChild(newElem)
  228. newNode.lastChild.text = escape(oFormula.documentElement.xml)
  229. lngUndo=lngUndo+1
  230. cmdUndo.disabled =false//可以undo
  231. if (oUndo.documentElement.childNodes.length >8) {
  232. DeleteoUndoOneRecord(0)
  233. lngUndo=7//从0-7
  234. }
  235. }
  236. /**
  237. *读出一行oUndo对象的记录
  238. **/
  239. function ReadoRedoOneRecord(lngKey){
  240. t.outerHTML=unescape(oRedo.documentElement.childNodes.item(lngKey).childNodes.item(0).childNodes.item(0).xml)
  241. grid.reload(t.outerHTML)
  242. tCopy.outerHTML=unescape(oRedo.documentElement.childNodes.item(lngKey).childNodes.item(1).childNodes.item(0).xml)
  243. oFormula.loadXML (unescape(oRedo.documentElement.childNodes.item(lngKey).childNodes.item(2).childNodes.item(0).xml))
  244. }
  245. /**
  246. *读出一行oUndo对象的记录
  247. **/
  248. function ReadoUndoOneRecord(lngKey){
  249. t.outerHTML=unescape(oUndo.documentElement.childNodes.item(lngKey).childNodes.item(0).childNodes.item(0).xml)
  250. grid.reload(t.outerHTML)
  251. tCopy.outerHTML=unescape(oUndo.documentElement.childNodes.item(lngKey).childNodes.item(1).childNodes.item(0).xml)
  252. oFormula.loadXML (unescape(oUndo.documentElement.childNodes.item(lngKey).childNodes.item(2).childNodes.item(0).xml))
  253. }
  254. /**
  255. *删除Redo一行记录,按先进先删的规则,保持只有8条记录
  256. * intR=0删除第一个节点
  257. **/
  258. function DeleteoRedoOneRecord(intR){
  259. oRedo.documentElement.removeChild(oRedo.documentElement.childNodes.item(intR))
  260. }
  261. /**
  262. *删除Undo一行记录,按先进先删的规则,保持只有8条记录
  263. * intR=0删除第一个节点
  264. **/
  265. function DeleteoUndoOneRecord(intR){
  266. oUndo.documentElement.removeChild(oUndo.documentElement.childNodes.item(intR))
  267. }
  268. /**
  269. *工具栏上的Redo按钮的点击事件
  270. **/
  271. function cmdRedo(){
  272. var intMaxR=oRedo.documentElement.childNodes.length - 1//当前oRedo对象中的最大记录数
  273. if (lngRedo>=0 && lngRedo<=intMaxR){
  274. ReadoRedoOneRecord(lngRedo)//读出当前undo对应的值
  275. lngUndo=lngRedo
  276. lngRedo=lngRedo+1
  277. cmdUndo.disabled =false//做了一步redo则undo肯定可以做
  278. //强制表格宽高同步
  279. if(grid.autosize){
  280. grid.autosize=true
  281. }
  282. //clearBlueScale()
  283. }
  284. if (lngRedo>intMaxR && lngRedo<0){
  285. cmdRedo.disabled =true //肯定不能做redo的功能
  286. }
  287. }
  288. /**
  289. *工具栏上的Undo按钮的点击事件
  290. **/
  291. function cmdUndo(){
  292. var intMaxR=oUndo.documentElement.childNodes.length - 1//当前oRedo对象中的最大记录数
  293. if (lngUndo>=0 && lngUndo<=intMaxR){
  294. ReadoUndoOneRecord(lngUndo)
  295. lngRedo=lngUndo
  296. lngUndo=lngUndo - 1
  297. cmdRedo.disabled =true//做了一步undo则redo肯定可以做
  298. //强制表格宽高同步
  299. if(grid.autosize){
  300. grid.autosize=true
  301. }
  302. //clearBlueScale()
  303. }
  304. if (lngUndo<=0 && lngUndo>intMaxR){
  305. cmdUndo.disabled =true//undo肯定不可以做
  306. }
  307. if (lngUndo>=intMaxR && lngUndo<0){
  308. cmdRedo.disabled =true//redo肯定不可以做
  309. }
  310. }
  311. /**
  312. *公式处理
  313. *预处理公式,将公式中的B5 等标记变成GetCell(5,2)
  314. *公式中的SUM(A2:F8)等展开成一个个单元格的形式.
  315. *getcell(row(),2)之类的公式,将它的坐标中的公式值计算出来
  316. **/
  317. function replaceFormula(strFormula){
  318. var r
  319. var re
  320. var strSearch//
  321. var strReplace
  322. var lngPrePos
  323. var j
  324. var blnEnd=false
  325. //下面这行先不变大写20020627
  326. //strFormula=strFormula.toUpperCase()
  327. //下面将公式中的SUM(A2:F8)等展开成一个个单元格的形式.
  328. strFormula=getFunctionValue(strFormula)
  329. //------------------
  330. //getcell(row(),2)之类的公式,将它的坐标中的公式值计算出来
  331. //ROW() COL() + - * / 只支持前面这些操作符
  332. /*
  333. var sExp=/GETCELL((ROW()|COL()|d|+|-|*|/)*,(ROW()|COL()|d|+|-|*|/)*[,|)]/ig  //new RegExp("S","ig")
  334. var re=strFormula.match(sExp)
  335. if (re!=null) {
  336. for (var i=0;i<=re.length-1;i++){
  337. var s1=re[i]
  338. var endS=s1.substring(s1.length-1,s1.length)
  339. s1=s1.substring(8,s1.length-1)
  340. var arr=s1.split(",")
  341. s1="GETCELL("+eval(arr[0])+","+eval(arr[1])+endS
  342. strFormula=strFormula.replace(re[i],s1)
  343. //alert(strFormula)
  344. // alert("length:"+re.length+"   "+re[0]+"   "+re[1])
  345. }
  346. }
  347. */
  348. //-------------------
  349. strFormula=" " +strFormula+" "
  350. re=/(([a-z]|[A-Z])|([a-z]|[A-Z])([a-z]|[A-Z]))([1-9]|([1-9][0-9])|([1-9][0-9][0-9]))[^0-9]/ig
  351. r=strFormula.match(re)
  352. if(r!=null){
  353. var lngPrePos=0
  354. var lngPrePos1=0
  355. var strRet=""  //返回公式
  356. //加此循环是为了替代一个公式中的多个A2
  357. for (var i=0;i<=r.length-1;i++){
  358. strSearch=trim(r[i].substring(0,r[i].length-1))//取出的一个标志符
  359. var strChar,strInt
  360. var iLength=strSearch.length-1
  361. var sCurRow,sCurCol
  362. var lngA
  363. for (var ii=0;ii<=iLength;ii++){
  364. lngA=parseInt(strSearch.charCodeAt(ii))
  365. if (lngA>=49 && lngA<=57){
  366. var strChar=strSearch.substring(0,ii)
  367. var strInt=strSearch.substring(ii,iLength+1)
  368. break;
  369. }
  370. }
  371. //由B5==>行和列数
  372. sCurRow=strInt
  373. sCurCol=LblToInt(strChar)
  374. //-----------
  375. //将GetCellValue函数用getCell取代
  376. strReplace="GETCELL("+sCurRow+","+sCurCol+")"
  377. lngPrePos1=strFormula.indexOf(strSearch,lngPrePos)
  378. if (lngPrePos1>0){
  379. //替换字符
  380. strRet=strRet+strFormula.substring(lngPrePos,lngPrePos1)+strReplace
  381. lngPrePos=lngPrePos1+strSearch.length
  382. }
  383. else {
  384. //此行可能无用
  385. strRet=strRet+strFormula.substring(lngPrePos,strFormula.length-1)
  386. }
  387. }
  388. strRet=strRet+strFormula.substring(lngPrePos,strFormula.length-1)
  389. return trim(strRet)
  390. }
  391. return trim(strFormula)
  392. }
  393. /**
  394. *找本表页的单元格的值
  395. **/
  396. function GETCELL(iRow,iCol) {
  397. return GetCellData(iRow,iCol)
  398. }
  399. /**
  400. *设置单元值
  401. *@param iRow 物理行值
  402. *@param iCol 列值
  403. *@param vData 要设置单元值
  404. **/
  405. function SetCellData(iRow,iCol,vData) {
  406. //先计算出逻辑列,因逻辑行和物理行相同
  407. var arr=PhyToLog(iRow,iCol)
  408. var curObj1=t.rows(arr[0]).cells(arr[1])
  409. //给值时做小数位处理
  410. CellPoint(curObj1,vData)
  411. /*
  412. if (isSpace(curObj1.getAttribute("dec"))==false)
  413. curObj1.innerText=ContDec(vData,curObj1.getAttribute("dec"))
  414. else
  415. curObj1.innerText=vData
  416. */
  417. }
  418. /**
  419. *取得单元值
  420. *@param iRow 物理行值
  421. *@param iCol 列值
  422. *@return 单元值
  423. **/
  424. function GetCellData(iRow,iCol) {
  425. //先计算出逻辑列,因逻辑行和物理行相同
  426. var arr=PhyToLog(iRow,iCol)
  427. var s1=t.rows(arr[0]).cells(arr[1]).innerText
  428. //alert(s1)
  429. //让返回null是为了计算公式时""会使数值变成字符
  430. if(s1=="") return null
  431. //-----------
  432. if (isNaN(parseFloat(s1)))
  433. return s1
  434. else
  435. return parseFloat(s1)
  436. }
  437. /**
  438. //求出自定义公式的值
  439. **/
  440. function getFunctionValue(strFormula,strLblSelf){
  441. //strFormula=computeFunctionValue(strFormula,"getreportcell")//求表间取数
  442. strFormula=computeFunctionValue(strFormula,"sum")//求和
  443. strFormula=computeFunctionValue(strFormula,"avg")//求平均
  444. strFormula=computeFunctionValue(strFormula,"max")//求最大值
  445. strFormula=computeFunctionValue(strFormula,"min")//求最小值
  446. return strFormula
  447. }
  448. /**
  449. //求出自定义公式的值
  450. **/
  451. function computeFunctionValue(strFormula,strKey){
  452. //最大最小值未处理2001.12.21
  453. var i,j
  454. strKey=trim(strKey.toUpperCase())
  455. //if (strKey=="GETREPORTCELL")
  456. // var re=new RegExp(strKey+".([1-9]|([1-9][0-9])|([1-9][0-9][0-9])|([1-9][0-9][0-9][0-9]))"+","+"(([a-z]|[A-Z])|([a-z]|[A-Z])([a-z]|[A-Z]))([1-9]|([1-9][0-9])|([1-9][0-9][0-9]))[^0-9]","ig")
  457. //else
  458. var re=new RegExp(strKey+".(([a-z]|[A-Z])|([a-z]|[A-Z])([a-z]|[A-Z]))([1-9]|([1-9][0-9])|([1-9][0-9][0-9])):(([a-z]|[A-Z])|([a-z]|[A-Z])([a-z]|[A-Z]))([1-9]|([1-9][0-9])|([1-9][0-9][0-9]))[^0-9]","ig")
  459. var r=strFormula.match(re)
  460. if (r==null) 
  461. return strFormula
  462. var dblSum=""
  463. switch (strKey){
  464. /*case "GETREPORTCELL":
  465. for (i=0;i<=r.length-1;i++){
  466. var strQuote=r[i].substring(0,14)+"'"+r[i].substring(14,r[i].length -1) + "')" //插入单引号
  467. var strExpr=replaceString(r[i],r[i],strQuote)
  468. var dblCellValue=DealPoint(strExpr)
  469. //var dblCellValue=eval(strExpr)
  470. strFormula=replaceString(strFormula,r[i],dblCellValue)
  471. }
  472. break;*/
  473. case "SUM":
  474. for (i=0;i<=r.length-1;i++){
  475. var retAry=getAllLabelAry(r[i])//得到所有标签的公式的数组
  476. dblSum="("
  477. for (j=0;j<retAry.length;j++ ){
  478. // dblSum=dblSum+parseFloat(retAry[j])
  479. dblSum=dblSum+retAry[j]+"+"
  480. }
  481. dblSum=dblSum+"0)"
  482. strFormula=replaceString(strFormula,r[i],dblSum)
  483. }
  484. break;
  485. case "AVG":
  486. for (i=0;i<=r.length-1;i++){
  487. var retAry=getAllLabelAry(r[i])//得到所有标签的值的数组
  488. dblSum="(("
  489. for (j=0;j<retAry.length;j++ ){
  490. dblSum=dblSum+retAry[j]+"+"
  491. }
  492. var dblAvg=dblSum+"0)/"+retAry.length+")"
  493. strFormula=replaceString(strFormula,r[i],dblAvg)
  494. }
  495. break;
  496. case "MAX":
  497. for (i=0;i<=r.length-1;i++){
  498. var retAry=getAllLabelAry(r[i])//得到所有标签的值的数组
  499. if (retAry.length==1){
  500. strFormula=replaceString(strFormula,r[i],retAry[0])
  501. break;
  502. }
  503. for (j=1;j<retAry.length;j++ ){
  504. if (parseFloat(retAry[j-1])>parseFloat(retAry[j])){
  505. retAry[j]=retAry[j-1]
  506. }
  507. }
  508. var dblMax=retAry[j-1]
  509. strFormula=replaceString(strFormula,r[i],dblMax)
  510. }
  511. break;
  512. case "MIN":
  513. for (i=0;i<=r.length-1;i++){
  514. var retAry=getAllLabelAry(r[i])//得到所有标签的值的数组
  515. if (retAry.length==1){
  516. strFormula=replaceString(strFormula,r[i],retAry[0])
  517. break;
  518. }
  519. for (j=1;j<retAry.length;j++ ){
  520. if (parseFloat(retAry[j-1])<parseFloat(retAry[j])){
  521. retAry[j]=retAry[j-1]
  522. }
  523. }
  524. var dblMin=retAry[j-1]
  525. strFormula=replaceString(strFormula,r[i],dblMin)
  526. }
  527. break;
  528. }
  529. return strFormula
  530. }
  531. /**
  532. //返回取得所有标签公式的数组
  533. **/
  534. function getAllLabelAry(strExp){
  535. //strExp="Sum(A1:C2)"
  536. var ReturnArr=new Array()
  537. var strF,lngA,strL
  538. strExp=" " +strExp+" "
  539. var re=/(([a-z]|[A-Z])|([a-z]|[A-Z])([a-z]|[A-Z]))([1-9]|([1-9][0-9])|([1-9][0-9][0-9]))[^0-9]/ig
  540. var r=strExp.match(re)
  541. if (r==null) 
  542. return 
  543. strF=trim(r[0].substring(0,r[0].length-1))//取出第一个标志符
  544. var iLength=strF.length
  545. for (var i=0;i<iLength;i++){
  546. lngA=parseInt(strF.charCodeAt(i))
  547. if (lngA>=49 && lngA<=57){
  548. var strFChar=strF.substring(0,i)
  549. var strFInt=parseInt(strF.substring(i,iLength+1))
  550. break;
  551. }
  552. }
  553. strL=trim(r[1].substring(0,r[1].length-1))//取出第二个标志符
  554. iLength=strL.length
  555. for (var i=0;i<iLength;i++){
  556. lngA=parseInt(strL.charCodeAt(i))
  557. if (lngA>=49 && lngA<=57){
  558. var strLChar=strL.substring(0,i)
  559. var strLInt=parseInt(strL.substring(i,iLength+1))
  560. break;
  561. }
  562. }
  563. var iIndex=0
  564. for (var j=LblToInt(strFChar);j<=LblToInt(strLChar);j++){
  565. for (var i=strFInt;i<=strLInt;i++){
  566. var strCol=IntToLbl(j)
  567. var strSearch=trim(strCol)+i
  568. var strRe=new RegExp(strSearch,"i")
  569. //-----------将getCellValue函数的内容插入此
  570. var strChar1,strInt1
  571. var iLength1=strSearch.length-1
  572. var sCurRow,sCurCol
  573. var lngA1
  574. for (var ii=0;ii<=iLength1;ii++){
  575. lngA1=parseInt(strSearch.charCodeAt(ii))
  576. if (lngA1>=49 && lngA1<=57){
  577. var strChar1=strSearch.substring(0,ii)
  578. var strInt1=strSearch.substring(ii,iLength1+1)
  579. break;
  580. }
  581. }
  582. sCurRow=strInt1
  583. sCurCol=LblToInt(strChar1)
  584. //-----------
  585. //将GetCellValue函数用getCell取代
  586. strReplace="GETCELL("+sCurRow+","+sCurCol+")"
  587. //var strReplace="getCellValue('"+strSearch+"')"
  588. var retR=strSearch.replace(strRe,strReplace)
  589. //var retValue=DealPoint(retR)
  590. //改为返回GETCELL()样的公式,而不是值
  591. ReturnArr[iIndex]=retR//retValue
  592. iIndex=iIndex+1
  593. }
  594. }
  595. return ReturnArr
  596. }
  597. /**
  598. //处理小数点
  599. **/
  600. function DealPoint(strExpress){
  601. var dblResult
  602. //try{
  603. strExpress=trim(strExpress)
  604. dblResult=eval(strExpress)
  605. //}
  606. //catch (exception)
  607. //{
  608. // dblResult="#无效值"
  609. //}
  610. return dblResult
  611. }
  612. /**
  613. *宏函数
  614. **/
  615. function IF(strExpr,strTrue,strFalse) {
  616. if (strExpr)
  617. return strTrue
  618. else
  619. return strFalse
  620. }
  621. /**
  622. //sGetcell为要计算的单元串GETCELL(2,3)
  623. //计算GETCELL(2,3)此单元改动后的级联计算
  624. **/
  625. function SumOneCell(sGetcell) {
  626. var oFind=oFormula.documentElement.selectNodes("//record")
  627. for (var i=0;i<oFind.length;i++){
  628. var strRow=oFind.item(i).childNodes.item(0).text
  629. var strCol=oFind.item(i).childNodes.item(1).text
  630. var strPos="GETCELL("+trim(strRow)+","+trim(strCol)+")"
  631. bCheckFormula=false
  632. arrCheckFormula.length=0
  633. var sFor=ExpandFormula(strPos)
  634. if(bCheckFormula==true && arrCheckFormula.length>0){
  635. var s1=""
  636. for(var i=0;i<arrCheckFormula.length;i++){
  637. s1=s1+arrCheckFormula[i].RC+"="+arrCheckFormula[i].sFormula+" "
  638. }
  639. alert("公式循环调用:"+s1)
  640. break
  641. }
  642. if (sFor.indexOf(sGetcell)>-1) {
  643. // alert(sFor+" "+sGetcell)
  644. SetCellData(parseInt(strRow),parseInt(strCol),DealPoint(sFor))
  645. }
  646. }
  647. }
  648. /**
  649. //返回此单元r,c的展开后的公式串.
  650. **/
  651. function ExpandFormula(sGetcell) {
  652. //sGetcell="GETCELL(2,3)"
  653. var r,c
  654. var i=sGetcell.indexOf(",")
  655. if (i>0) {
  656. r=sGetcell.substring(8,i)
  657. c=sGetcell.substring(i+1,sGetcell.length-1)
  658. }
  659. //上面是将"GETCELL(2,3)"===>2 3
  660. var strFormula,initFormula
  661. var oFind=oFormula.documentElement.selectNodes("//record[row='" + r + "' and col='" + c + "']")
  662. if (oFind.length>0){
  663. //找到2 3单元的公式
  664. strFormula=oFind.item(0).childNodes.item(2).text
  665. initFormula=oFind.item(0).childNodes.item(4).text
  666. }
  667. else {
  668. //如无公式则返回"GETCELL(2,3)"
  669. return sGetcell
  670. }
  671. //查找公式中是否有GETCELL(x,y)
  672. var strR=strFormula
  673. var sExp=new RegExp("GETCELL.([1-9][0-9]*"+","+"[1-9][0-9]*).","ig")
  674. var re=strFormula.match(sExp)
  675. //如没有则返回"GETCELL(2,3)"
  676. if (re==null) return sGetcell
  677. for (var i=0;i<=re.length-1;i++){
  678. //先找此单元在数组中是否存在,不存在的话才加入
  679. var mRC=IntToLbl(c)+r
  680. var bFind=false
  681. for(var j=0;j<arrCheckFormula.length;j++){
  682. if(arrCheckFormula[j].RC==mRC){
  683. bFind=true
  684. }
  685. }
  686. if(bFind==false)
  687. arrCheckFormula[arrCheckFormula.length]=new ErrorFormula(sGetcell,initFormula,mRC)
  688. //---------------------
  689. for(var j=0;j<arrCheckFormula.length;j++){
  690. if (re[i]==arrCheckFormula[j].sGetcell ) {
  691. //自己调用自己
  692. bCheckFormula=true
  693. return ""
  694. }
  695. }
  696. //当单元串不等于最开始的单元串时才处理,以解决当改动的单元本身就是一个调用了其它单元的公式单元时的情况
  697. //利用递归找到公式中的GETCELL公式进行展开后的公式串
  698. var strReplace=ExpandFormula(re[i])
  699. //替代源串.
  700. strR=replaceString(strR,re[i],"("+strReplace+")")
  701. }
  702. return strR
  703. }
  704. /**
  705. //全表重算时检查公式是否有第归的情况
  706. //返回真表示可以进行公式计算
  707. **/
  708. function checkFormula(){
  709. if (oFormula.documentElement.childNodes.length <=0) 
  710. return false;
  711. var oFind=oFormula.documentElement.selectNodes("//record")
  712. for (var i=0;i<oFind.length;i++){
  713. var strRow=oFind.item(i).childNodes.item(0).text
  714. var strCol=oFind.item(i).childNodes.item(1).text
  715. var strPos="GETCELL("+trim(strRow)+","+trim(strCol)+")"
  716. bCheckFormula=false
  717. arrCheckFormula.length=0
  718. var sFor=ExpandFormula(strPos)
  719. if(bCheckFormula==true && arrCheckFormula.length>0){
  720. var s1=""
  721. for(var i=0;i<arrCheckFormula.length;i++){
  722. s1=s1+arrCheckFormula[i].RC+"="+arrCheckFormula[i].sFormula+" "
  723. }
  724. alert("公式循环调用:"+s1)
  725. return false
  726. }
  727. }
  728. return true
  729. }
  730. /**
  731. //将选中格的每行的起始列和结束列号位置增加到oPos中
  732. //strFormula为原始输入的公式
  733. //preFormula为预处理过后的公式
  734. **/
  735. function addoFormulaNodes(rowno,colno,preFormula,strFormula)
  736. {
  737. //删除保存在oFormula中的公式
  738. var oFind=oFormula.documentElement.selectNodes("//record[row='" + rowno + "' and col='" + colno + "']")
  739. if (oFind.length==1)
  740. oFormula.documentElement.removeChild(oFind.item(0))//删除找到的节点
  741. var root = oFormula.documentElement
  742. var newNode = oFormula.createNode (1, "record", "")
  743. root.appendChild(newNode)
  744. var newElem = oFormula.createElement("row") //物理行
  745. newNode.appendChild(newElem)
  746. newNode.lastChild.text = rowno
  747. var newElem = oFormula.createElement("col") //物理行
  748. newNode.appendChild(newElem)
  749. newNode.lastChild.text = colno
  750. var newElem = oFormula.createElement("formula") //物理行
  751. newNode.appendChild(newElem)
  752. newNode.lastChild.text = preFormula
  753. var newElem = oFormula.createElement("level") //重算的级别数
  754. newNode.appendChild(newElem)
  755. newNode.lastChild.text = "1"
  756. var newElem = oFormula.createElement("source") //处理前的公式
  757. newNode.appendChild(newElem)
  758. newNode.lastChild.text = strFormula
  759. }
  760. /**
  761. //装入所有的公式到oFormula对象
  762. **/
  763. function LoadAllFormula() {
  764. var sFormula="<root>"
  765. for(var i=1;i<t.rows.length;i++){
  766. for(var j=1;j<t.rows(0).cells.length;j++){
  767. var arr=PhyToLog(i,j)
  768. var s1=t.rows(arr[0]).cells(arr[1]).getAttribute("formula")
  769. if(s1!=null){
  770. var preFormula=replaceFormula(s1)
  771. sFormula=sFormula+"<record><row>"+i+"</row><col>"
  772. +j+"</col><formula>"+preFormula
  773. +"</formula><level></level><source>"
  774. +s1+"</source></record>"
  775. }
  776. }
  777. }
  778. sFormula=sFormula+"</root>"
  779. //装入DOM
  780.     oFormula=new ActiveXObject("Microsoft.XMLDOM")
  781.     oFormula.async ="false";
  782.     oFormula.loadXML(sFormula)
  783. }
  784. /**
  785. *全表重算的按钮的点击事件
  786. //公式计算的工作:1 全表重算,2 当改动一个单元格的值时自动执行调用此单元的公式
  787. //(即设置为自动重算时要做的工作).3 三级以上级联公式的处理.
  788. //重算
  789. **/
  790. function cmdCompute(){
  791. // if (SetReadOnly()) return
  792. var i,j,iLevel
  793. var strFormula
  794. if (checkFormula()==false){
  795. return;
  796. }
  797. window.status="正在重算整个表,请稍候..."
  798. // SaveoUndoOneRecord()
  799. //将上一当前行列保存进来以便恢复
  800. // curFormulaRow=presRow
  801. // curFormulaCol=presCol
  802. //先让所有的水平都为1
  803. for(i=0;i<oFormula.documentElement.childNodes.length;i++){
  804. oFormula.documentElement.childNodes(i).childNodes(3).text=1
  805. }
  806. //alert(oFormula.documentElement.xml)
  807. iLevel=1
  808. var oFind=oFormula.documentElement.selectNodes("//record[level='" + iLevel + "']") //
  809. while (oFind.length>0){
  810. for (i=0;i<oFind.length;i++){
  811. strFormula=oFind.item(i).childNodes.item(2).text
  812. for (j=0;j<oFind.length;j++){
  813. var strRow=oFind.item(j).childNodes.item(0).text
  814. var strCol=oFind.item(j).childNodes.item(1).text
  815. //注COL在前
  816. var strPos="GETCELL("+trim(strRow)+","+trim(strCol)+")"
  817. //查找公式中是否有GETCELL()之类的,如有则表示级别应加大.
  818. //查找公式中是否有B5之类的,如有则表示级别应加大.
  819. if (strFormula.indexOf(strPos)>-1){
  820. oFind.item(i).childNodes.item(3).text=parseInt(iLevel)+1
  821. break;
  822. }
  823. }
  824. }
  825. iLevel=iLevel+1
  826. var oFind=oFormula.documentElement.selectNodes("//record[level='" + iLevel + "']")
  827. //再在高一级的公式中查找更高一级的.
  828. }
  829. var colno
  830. //按oFormula对象中的层次关系由最低层的开始计算
  831. iLevel=1
  832. oFind=oFormula.documentElement.selectNodes("//record[level='" + iLevel + "']")
  833. while (oFind.length>0){
  834. for (i=0;i<oFind.length;i++){
  835. var strRow=oFind.item(i).childNodes.item(0).text
  836. var strCol=oFind.item(i).childNodes.item(1).text
  837. var strLblSelf=trim(IntToLbl(strCol))+trim(strRow)
  838. strFormula=oFind.item(i).childNodes.item(2).text
  839. //if (NotIsInRect(parseInt(strRow),parseInt(strCol))==true)//false在矩形之内的无对应td值的单元格;true不在矩形之内
  840. //{
  841. //带模版的公式的当前行列用此两个变量跟踪
  842. presRow=parseInt(strRow)
  843. presCol=parseInt(strCol)
  844. SetCellData(parseInt(strRow),parseInt(strCol),DealPoint(strFormula))
  845. //}
  846. oFind.item(i).childNodes.item(3).text="1"
  847. }
  848. iLevel=iLevel+1
  849. oFind=oFormula.documentElement.selectNodes("//record[level='" + iLevel + "']")
  850. }
  851. blnChange=true
  852. //将上一当前行列恢复
  853. //presRow=curFormulaRow
  854. //presCol=curFormulaCol
  855. //SaveoRedoOneRecord()
  856. window.status="计算完成!"
  857. }
  858. /**
  859. //增删列时要移动公式相对引用的
  860. **/
  861. function MoveFormula(startCol,iCols,iTag){
  862. var strFormula
  863. for (var k=0;k<oFormula.documentElement.childNodes.length;k++){
  864. strFormula=trim(oFormula.documentElement.childNodes(k).childNodes(4).text)
  865. strFormula=" " +strFormula+" "
  866. re=/(([a-z]|[A-Z])|([a-z]|[A-Z])([a-z]|[A-Z]))([1-9]|([1-9][0-9])|([1-9][0-9][0-9]))[^0-9]/ig
  867. r=strFormula.match(re)
  868. if(r!=null){
  869. var lngPrePos=0
  870. var lngPrePos1=0
  871. var strRet=""  //返回公式
  872. //加此循环是为了替代一个公式中的多个A2
  873. for (var i=0;i<=r.length-1;i++){
  874. strSearch=trim(r[i].substring(0,r[i].length-1))//取出的一个标志符
  875. //alert(strSearch)
  876. var strChar,strInt
  877. var iLength=strSearch.length-1
  878. var sCurRow,sCurCol
  879. var lngA
  880. for (var ii=0;ii<=iLength;ii++){
  881. lngA=parseInt(strSearch.charCodeAt(ii))
  882. if (lngA>=49 && lngA<=57){
  883. var strChar=strSearch.substring(0,ii)
  884. var strInt=strSearch.substring(ii,iLength+1)
  885. break;
  886. }
  887. }
  888. //由B5==>行和列数
  889. sCurRow=parseInt(strInt)
  890. sCurCol=LblToInt(strChar)
  891. if(sCurCol>startCol) {
  892. //=1表示移行,否则移动列
  893. if(iTag==1)
  894. sCurRow=sCurRow+iCols
  895. else
  896. sCurCol=sCurCol+iCols
  897. //-----------替代  B5===>F5
  898. strReplace=IntToLbl(sCurCol)+sCurRow
  899. //alert(strReplace)
  900. lngPrePos1=strFormula.indexOf(strSearch,lngPrePos)
  901. if (lngPrePos1>0){
  902. //替换字符
  903. strRet=strRet+strFormula.substring(lngPrePos,lngPrePos1)+strReplace
  904. lngPrePos=lngPrePos1+strSearch.length
  905. }
  906. else {
  907. strRet=strRet+strFormula.substring(lngPrePos,strFormula.length-1)
  908. }
  909. //alert(i+":"+strRet)
  910. }
  911. }
  912. //alert(strRet)
  913. var iRow=parseInt(trim(oFormula.documentElement.childNodes(k).childNodes(0).text))
  914. var iCol=parseInt(trim(oFormula.documentElement.childNodes(k).childNodes(1).text))
  915. var arr=PhyToLog(iRow,iCol)
  916. t.rows(arr[0]).cells(arr[1]).setAttribute("formula",trim(strRet))
  917. }
  918. }
  919. }
  920. //表函数
  921. /**
  922. *表函数,取当前列号
  923. **/
  924. function COL() {
  925. return sCol
  926. }
  927. /**
  928. *表函数,取当前行号
  929. **/
  930. function ROW() {
  931. return sRow
  932. }
  933. /**
  934. *表函数,取总列数
  935. **/
  936. function COLS() {
  937. return t.rows(0).cells.length
  938. }
  939. /**
  940. *表函数,取总行数
  941. **/
  942. function ROWS() {
  943. return t.rows.length
  944. }
  945. function col() {
  946. return COL()
  947. }
  948. function cols() {
  949. return COLS()
  950. }
  951. function row() {
  952. return ROW()
  953. }
  954. function rows() {
  955. return ROWS()
  956. }
  957. /**
  958. *表函数,取SQL语句的返回值
  959. **/
  960. function getdb(strConnection,strSql){
  961. return GETDB(strConnection,strSql)
  962. }
  963. /**
  964. *输入公式按扭的点击事件
  965. **/
  966. function cmdFormula(){
  967. //输入公式
  968. var arySend=new Array()
  969. arySend[0]=IntToLbl(sCol)+sRow //当前单元格的位置
  970. var arr=PhyToLog(sRow,sCol)
  971. arySend[1]=t.rows(arr[0]).cells(arr[1]).getAttribute("formula") //公式串
  972. if(arySend[1]==null)arySend[1]=""
  973. var strReturn=window.showModalDialog("dsnsetformula.htm",arySend,"status:no;dialogHeight:265px;dialogWidth:405px;dialogTop:200;dialogLeft:150px") 
  974. if (isSpace(strReturn)==false){
  975. txtMyGrid.value ="="+strReturn//返回的公式串
  976. grid.txtTotd()
  977. blnChange=true
  978. }
  979. }
  980. //*****************************************************************************************
  981. //公式处理 end
  982. //*****************************************************************************************
  983. /**
  984. //设置固定行列
  985. **/
  986. function FixRowsCols() {
  987. var arr=new Array()
  988. arr[0]=grid.FixRows
  989. arr[1]=grid.FixCols
  990. arr[2]=t.getAttribute("queryorder")
  991. if(arr[2]==null)arr[2]="0"
  992. var sRet=window.showModalDialog("fixrowscols.htm",arr,"status:no;dialogHeight:180px;dialogWidth:300px;dialogTop:180;dialogLeft:250px") 
  993. grid.FixRows=sRet[0]
  994. grid.FixCols=sRet[1]
  995. //存入表格属性中
  996. t.setAttribute("fixrows",sRet[0])
  997. t.setAttribute("fixcols",sRet[1])
  998. t.setAttribute("queryorder",sRet[2])
  999. blnChange=true
  1000. }
  1001. /**
  1002. *调用设置事件的页面
  1003. **/
  1004. function InputRunPara() {
  1005. //输入报表运行时设置的参数
  1006. var sRet=window.showModalDialog("setevent.htm",t,"status:no;scroll:no;dialogHeight:270px;dialogWidth:300px;center:yes;") 
  1007. blnChange=true
  1008. return
  1009. var arySend=t.getAttribute("runpara")
  1010. if(arySend==null)arySend=""
  1011. var sRet=window.showModalDialog("dsninputrunpara.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1012. if(sRet!=""){
  1013. t.setAttribute("runpara",sRet)
  1014. blnChange=true
  1015. }
  1016. }
  1017. function AfterRunSql() {
  1018. //设置运行查询之后要运行的命令
  1019. var arySend=t.getAttribute("afterrunsql")
  1020. if(arySend==null)arySend=""
  1021. var sRet=window.showModalDialog("dsnafterrunsql.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1022. if(sRet!=""){
  1023. t.setAttribute("afterrunsql",sRet)
  1024. blnChange=true
  1025. }
  1026. }
  1027. function PageRun() {
  1028. //输入报表翻页时运行的命令
  1029. var arySend=t.getAttribute("pagerun")
  1030. if(arySend==null)arySend=""
  1031. var sRet=window.showModalDialog("dsnpagerun.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1032. if(sRet!=""){
  1033. t.setAttribute("pagerun",sRet)
  1034. blnChange=true
  1035. }
  1036. }
  1037. function AddLineRun() {
  1038. //输入自动加行后要运行的命令
  1039. var arySend=t.getAttribute("addlinerun")
  1040. if(arySend==null)arySend=""
  1041. var sRet=window.showModalDialog("dsnaddlinerun.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1042. if(sRet!=""){
  1043. t.setAttribute("addlinerun",sRet)
  1044. blnChange=true
  1045. }
  1046. }
  1047. function SetReportUserData() {
  1048. //输入报表的用户数据
  1049. var arySend=t.getAttribute("userdata")
  1050. if(arySend==null)arySend=""
  1051. arySend=unescape(arySend)
  1052. var sRet=window.showModalDialog("dsnuserdata.htm",arySend,"status:no;scroll:no;dialogHeight:200px;dialogWidth:280px;dialogTop:20;dialogLeft:20px") 
  1053. if(isSpace(sRet)==false && typeof sRet!="undefined"){
  1054. t.setAttribute("userdata",escape(sRet))
  1055. blnChange=true
  1056. }
  1057. }
  1058. /**
  1059. *设置单元格只读或可写
  1060. //设置按回车键后进入哪个单元格
  1061. **/
  1062. function PressEnter() {
  1063. if(tc.style.display=="none") return
  1064. var arr=PhyToLog(sRow,sCol)
  1065. var curTD=t.rows(arr[0]).cells(arr[1])
  1066. var s1=curTD.getAttribute("pressenter")
  1067. if(s1==null)s1=""
  1068. var s2=curTD.getAttribute("cellreadonly")
  1069. if(s2==null)s2=""
  1070. //alert(s1+" : "+s2)
  1071. var arr1=new Array()
  1072. arr1[0]=s1
  1073. arr1[1]=s2
  1074. var sRet=window.showModalDialog("dsnsetenter.htm",arr1,"status:no;dialogHeight:160px;dialogWidth:400px;dialogTop:180;dialogLeft:100px") 
  1075. if(sRet!=null){
  1076. if(isSpace(sRet[0])==false)
  1077. curTD.setAttribute("pressenter",sRet[0])
  1078. else
  1079. curTD.removeAttribute("pressenter")
  1080. if(sRet[1]==1)
  1081. curTD.setAttribute("cellreadonly",sRet[1])
  1082. else
  1083. curTD.removeAttribute("cellreadonly")
  1084.            
  1085.            blnChange=true
  1086.         }
  1087. }
  1088. /**
  1089. //设置小数位数
  1090. **/
  1091. function SetPointNum() {
  1092. if(tc.style.display=="none") return
  1093. SaveoUndoOneRecord()
  1094. var arr=PhyToLog(sRow,sCol)
  1095. var curTD=t.rows(arr[0]).cells(arr[1])
  1096. var s1=curTD.getAttribute("pointnum")
  1097. if(s1==null)s1=""
  1098. var sRet=window.showModalDialog("dsnpointnum.htm",s1,"status:no;dialogHeight:110px;dialogWidth:250px;dialogTop:180;dialogLeft:250px") 
  1099. for(var i=sRowSort;i<=eRowSort;i++){
  1100. for(var j=sColSort;j<=eColSort;j++){
  1101. arr=PhyToLog(i,j)
  1102. curTD=t.rows(arr[0]).cells(arr[1])
  1103. if(isSpace(sRet)==false){
  1104. curTD.setAttribute("pointnum",sRet)
  1105. curTD.innerText=ContDec(curTD.innerText,sRet)
  1106. }
  1107. else {
  1108. curTD.removeAttribute("pointnum")
  1109. }
  1110. }
  1111. }
  1112. hideTxt()
  1113. SaveoRedoOneRecord()
  1114. blnChange=true
  1115. }
  1116. /**
  1117. //设置超级链接
  1118. **/
  1119. function SetHref() {
  1120. if(tc.style.display=="none") return
  1121. var arr=PhyToLog(sRow,sCol)
  1122. var curTD=t.rows(arr[0]).cells(arr[1])
  1123. var s1=curTD.getAttribute("sethref")
  1124. if(s1==null)s1=""
  1125. var sRet=window.showModalDialog("dsnhref.htm",s1,"status:no;dialogHeight:110px;dialogWidth:350px;dialogTop:180;dialogLeft:250px") 
  1126. if(typeof sRet=="undefined") return
  1127. SaveoUndoOneRecord()
  1128. if(isSpace(sRet)==false){
  1129. //alert(sRet)
  1130. curTD.setAttribute("sethref",sRet)
  1131. curTD.innerHTML="<a href="+sRet+">"+curTD.innerText+"</a>"
  1132. }
  1133. else {
  1134. curTD.removeAttribute("sethref")
  1135. curTD.innerHTML=""
  1136. }
  1137. alert(curTD.innerHTML)
  1138. SaveoRedoOneRecord()
  1139. blnChange=true
  1140. }
  1141. /**
  1142. //输入数据装入的Sql条件
  1143. **/
  1144. function ShowSetSql() {
  1145. var arySend=new Array()
  1146. arySend[0]=t.getAttribute("buttonxml")
  1147. if(arySend[0]==null)
  1148. arySend[0]=""
  1149. else
  1150. arySend[0]=unescape(arySend[0])
  1151. arySend[1]=t.getAttribute("initwhere")
  1152. if(arySend[1]==null)
  1153. arySend[1]=""
  1154. else
  1155. arySend[1]=unescape(arySend[1])
  1156. arySend[2]=t.getAttribute("recordsetxml")
  1157. if(arySend[2]==null)
  1158. arySend[2]=""
  1159. else
  1160. arySend[2]=unescape(arySend[2])
  1161. var sRet=window.showModalDialog("dsnsetsql.htm",arySend,"status:no;scroll:no;dialogHeight:450px;dialogWidth:600px;dialogTop:20;dialogLeft:20px") 
  1162. if(sRet!=""){
  1163. var arr=sRet.split(";")
  1164. t.setAttribute("buttonxml",arr[0])
  1165. t.setAttribute("initwhere",arr[1])
  1166. t.setAttribute("recordsetxml",arr[2])
  1167. blnChange=true
  1168. }
  1169. }
  1170. /**
  1171. //装入HTML表格
  1172. **/
  1173. function LoadHtml() {
  1174. var sRet=window.showModalDialog("dsnloadhtml.htm","","status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1175. if(sRet!=""){ //下面的内容和newreport类似
  1176. //先检查是否要保存当前报表
  1177. CheckReportChange()
  1178. var sTab=sRet
  1179. t.outerHTML=sTab
  1180. CopytHtml()
  1181. document.title=""
  1182. grid.reload(sTab)
  1183. initoUndooRedo()
  1184. oFormula=new ActiveXObject("Microsoft.XMLDOM")
  1185. oFormula.async ="false";
  1186. oFormula.loadXML("<root></root>")
  1187. oGraph=new ActiveXObject("Microsoft.XMLDOM")
  1188. oGraph.async ="false";
  1189. oGraph.loadXML("<root></root>")
  1190. blnChange=false
  1191. //另加,内有滚动条的处理
  1192. grid.initGrid()
  1193. }
  1194. }
  1195. function InputCheck() {
  1196. //输入检查条件
  1197. var arySend=t.getAttribute("check")
  1198. if(arySend==null)arySend=""
  1199. var sRet=window.showModalDialog("dsninputcheck.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1200. if(sRet!=""){
  1201. t.setAttribute("check",sRet)
  1202. blnChange=true
  1203. }
  1204. }
  1205. /**
  1206. //执行检查条件
  1207. **/
  1208. function ExecCheck() {
  1209. var arySend=t.getAttribute("check")
  1210. if(arySend==null) {
  1211. alert("无检查条件!")
  1212. return
  1213. }
  1214. else {
  1215. eval(unescape(arySend))
  1216. }
  1217. }
  1218. /**
  1219. //重算此表的所有图形
  1220. **/
  1221. function setAllGraph(){
  1222.    for(var i=1;i<t.rows.length;i++){
  1223.     for(var j=1;j<t.rows(i).cells.length;j++){
  1224.         var curTD=t.rows(i).cells(j)
  1225.         var s1=curTD.getAttribute("graph")
  1226.         if(isSpace(s1)==false){
  1227.            setGraph(1,s1)
  1228.         }
  1229.     }
  1230.    }
  1231. }
  1232. /**
  1233. //设置新的图形  
  1234. //iRun==1表示不出现对话框,重算此表的所有图形
  1235. //iRun==0表示出现对话框,
  1236. //生成的图形自动放到当前TD中
  1237. //取值范围,标签范围只能采用命令来写,且应存入TD的属性中.其它用属性窗的方式.将所有的属性拼成一个XML串存在TD的属性中.
  1238. //然后由此XML串得到一个图形串.
  1239. //有一个可扩充的参数,将它插入到</applet>前面.
  1240. //参数: samplevalues:B1:B5,samplelabels:B1:B5,graphposition:C4,width:100,height:200,
  1241. //TD:graphxml:
  1242.    <root>
  1243.       <type>直方图</type>
  1244.       <samplevalues>B1:B5</samplevalues>
  1245.       <samplelabels>B1:B5</samplelabels>
  1246.       <graphposition>C4</graphposition>
  1247.       <width>100</width>
  1248.       <height>200</height>
  1249.       <other></other>   //其它属性,要先escape
  1250.       <opt>行</opt> //填行/列两个值,用于控制循环拼数时是先行后列还是先列后行
  1251.    </root>
  1252. **/
  1253. function setGraph(iRun,sGraphAttribute) {
  1254.    var sXml=sGraphAttribute
  1255.    if(iRun==0) {
  1256. if(tc.style.display=="none") return
  1257. var arr=PhyToLog(sRow,sCol)
  1258. var curTD=t.rows(arr[0]).cells(arr[1])
  1259. var arySend=curTD.getAttribute("graph")
  1260. if(arySend==null)arySend=""
  1261.         sXml=window.showModalDialog("dsnsetgraph.htm",arySend,"status:no;scroll:no;dialogHeight:500px;dialogWidth:700px;dialogTop:20;dialogLeft:20px") 
  1262.         if(sXml==null || sXml=="") return
  1263.     } 
  1264.     //alert(sXml)
  1265.     var oXml=new ActiveXObject("Microsoft.XMLDOM")
  1266.     oXml.async="false";
  1267.     oXml.loadXML(sXml)
  1268. //-----------------------------------------------------------------------------------
  1269. //计算放图的TD
  1270.     var iPosRow,iPosCol //放图形的单元的行列
  1271.    
  1272.     var arr1=TransAto1(oXml.documentElement.childNodes(3).text)  //C3,放图的单元格
  1273.     iPosRow=arr1[0]
  1274.     iPosCol=arr1[1]
  1275.     var arr=PhyToLog(iPosRow,iPosCol)
  1276.     var curTD=t.rows(arr[0]).cells(arr[1])
  1277. //-----------------------------------------------------------------------------------
  1278. //计算samplevalues串和samplelabels串
  1279. var sRowTmp,sColTmp,eRowTmp,eColTmp //放数据的起止单元
  1280. var sData=oXml.documentElement.childNodes(1).text //A1:C2
  1281. var s1=""
  1282. if(isSpace(sData)==false){
  1283. var arrData=sData.split(":")
  1284. var arrS=TransAto1(arrData[0])
  1285. sRowTmp=parseInt(arrS[0])
  1286. sColTmp=parseInt(arrS[1])
  1287. var arrE=TransAto1(arrData[1])
  1288. eRowTmp=parseInt(arrE[0])
  1289. eColTmp=parseInt(arrE[1])
  1290.    
  1291. var iRows=eRowTmp-sRowTmp+1
  1292. var iCols=eColTmp-sColTmp+1
  1293. var ssamplevalue="sampleValues"
  1294. var ss1='<param name="'
  1295. var ii=0
  1296. s1=''
  1297. if(oXml.documentElement.childNodes(7).text=="行"){
  1298. if(sColTmp<eColTmp){
  1299. ssamplevalue="sampleValues_0"
  1300. //多列时加上列数属性
  1301. //s1+='<param name=seriesCount value="'+(eRowTmp-sRowTmp+1)+'">'
  1302. }
  1303. for (var j=sColTmp;j<=eColTmp;j++) {
  1304. s1+='<param name="'+ssamplevalue+'" value=" '
  1305. for (var i=sRowTmp;i<=eRowTmp ;i++) {
  1306. var arr3=PhyToLog(i,j)
  1307. s1+=t.rows(arr3[0]).cells(arr3[1]).innerText+ ","
  1308. }
  1309. s1=s1.substring(0,s1.length-1);   //去掉最后的,号  
  1310. s1+='">'
  1311. ii++;
  1312. ssamplevalue="sampleValues_"+ii;
  1313. }
  1314. }else{
  1315. if(sRowTmp<eRowTmp){
  1316. ssamplevalue="sampleValues_0"
  1317. //多列时加上列数属性
  1318. //s1+='<param name=seriesCount value="'+(eColTmp-sColTmp+1)+'">'
  1319. }
  1320. for (var i=sRowTmp;i<=eRowTmp ;i++) {
  1321. s1+='<param name="'+ssamplevalue+'" value=" '
  1322. for (var j=sColTmp;j<=eColTmp;j++) {
  1323. var arr3=PhyToLog(i,j)
  1324. s1+=t.rows(arr3[0]).cells(arr3[1]).innerText+ ","
  1325. }
  1326. s1=s1.substring(0,s1.length-1);   //去掉最后的,号  
  1327. s1+='">'
  1328. ii++;
  1329. ssamplevalue="sampleValues_"+ii;
  1330. }
  1331. }
  1332. //计算samplelabels
  1333. var s2=""
  1334. var sData=oXml.documentElement.childNodes(2).text //A1:C2
  1335. if(isSpace(sData)==false){
  1336. var arrData=sData.split(":")
  1337. var arrS=TransAto1(arrData[0])
  1338. sRowTmp=parseInt(arrS[0])
  1339. sColTmp=parseInt(arrS[1])
  1340. var arrE=TransAto1(arrData[1])
  1341. eRowTmp=parseInt(arrE[0])
  1342. eColTmp=parseInt(arrE[1])
  1343.    
  1344. var iRows=eRowTmp-sRowTmp+1
  1345. var iCols=eColTmp-sColTmp+1
  1346. s2='<param name="sampleLabels" value=" '
  1347. for (var i=sRowTmp;i<=eRowTmp ;i++) {
  1348. for (var j=sColTmp;j<=eColTmp;j++) {
  1349. var arr3=PhyToLog(i,j)
  1350. s2+=t.rows(arr3[0]).cells(arr3[1]).innerText+ ","
  1351. }
  1352. }
  1353. s2=s2.substring(0,s2.length-1)    
  1354. s2+='">'
  1355. }
  1356. //-----------------------------------------------------------------------------------
  1357. var sType=""
  1358. switch (oXml.documentElement.childNodes(0).text)  {
  1359.    case "折线图" :
  1360.        sType=" code=cn.com.fcsoft.chart.LineChartApplet "
  1361.        break;
  1362.    case "圆饼图" :
  1363.        sType=" code=cn.com.fcsoft.chart.PieChartApplet "
  1364.        break;
  1365.    default :
  1366.        sType=" code=cn.com.fcsoft.chart.BarChartApplet "
  1367. }
  1368. var sAll='<Applet archive=chart.jar '
  1369. if(isSpace(oXml.documentElement.childNodes(4).text)==false)
  1370. sAll+=" width=" +oXml.documentElement.childNodes(4).text+" "
  1371. if(isSpace(oXml.documentElement.childNodes(5).text)==false)
  1372. sAll+=" height=" +oXml.documentElement.childNodes(5).text+" "
  1373. sAll+=sType
  1374. sAll+=' >'
  1375. sAll+=s1+s2
  1376. sAll+=unescape(oXml.documentElement.childNodes(6).text) //其它属性
  1377. sAll+='</Applet>'
  1378. curTD.setAttribute("graph",sXml)
  1379. //alert(sAll)
  1380. curTD.innerHTML=sAll
  1381. //t.rows(3).cells(2).innerHTML='<applet code=cn.com.fcsoft.chart.BarChartApplet archive=chart.jar width=200 height=140><param name=sampleValues value="'+t.rows(3).cells(1).innerText+',20,30,40,50"><param name=chartTitle value="chart title"><param name=titleFont value="Courier, bold, 20"></Applet>'
  1382. return
  1383. }
  1384. //--------------------------------------------------------------------------------------  
  1385. function showGraph(strGraph,iRun) {
  1386. setGraph(0,"")
  1387. return
  1388. //sRet为选择对话框后的返回值 0:标题 1:图形类型 2:放图的单元格 3 为0表示垂直方向
  1389.  //graph.Labeltext="车间名称";//X轴标题的内容  
  1390.  //type=4
  1391.  
  1392.  graph.top="1"
  1393.  graph.left="1"
  1394.  graph.ArcLeft=100
  1395.  graph.ArcTop=150
  1396.  graph.ArcRadius=50
  1397.  graph.ImgWidth=450
  1398.  graph.ImgHeight=300
  1399.  graph.ImgMargin=40  
  1400. var hostname=location.hostname
  1401. //显示设置界面
  1402. var ary=""
  1403. if(arguments.length>0)
  1404. ary=strGraph
  1405. if(arguments.length==2)
  1406. var strReturn=strGraph //直接运行
  1407. else
  1408. var strReturn=window.showModalDialog("dsngraph.htm",ary,"status:no;scroll:no;dialogHeight:365px;dialogWidth:405px;dialogTop:100;dialogLeft:150px") 
  1409. if (isSpace(strReturn)) return
  1410. if (strReturn=="del"){
  1411. //删除当前图形
  1412. if(arguments.length==0) return
  1413. //从表格的双击事件进入
  1414. var o=event.srcElement 
  1415. if(o.tagName=="IMG"){
  1416. o=o.parentNode
  1417. if(o.tagName=="TD"){
  1418. o.removeAttribute("graph")
  1419. o.innerHTML=""
  1420. }
  1421. }
  1422. return
  1423. }
  1424. var arrWin=strReturn.split(";")
  1425. var sTitle=arrWin[0] //graph title
  1426. var iType=parseInt(arrWin[1])// graph type
  1427. if (isNaN(iType)) iType=1
  1428. var sRowTmp,sColTmp,eRowTmp,eColTmp //放数据的起止单元
  1429. var sData=arrWin[6] //A1:C2
  1430. var arrData=sData.split(":")
  1431. var arrS=TransAto1(arrData[0])
  1432. sRowTmp=parseInt(arrS[0])
  1433. sColTmp=parseInt(arrS[1])
  1434. var arrE=TransAto1(arrData[1])
  1435. eRowTmp=parseInt(arrE[0])
  1436. eColTmp=parseInt(arrE[1])
  1437. //alert(sRowTmp+" "+sColTmp+" "+eRowTmp+" "+eColTmp)      
  1438.     var iPosRow,iPosCol //放图形的单元的行列
  1439.    
  1440.     var arr1=TransAto1(arrWin[2])
  1441.     iPosRow=arr1[0]
  1442.     iPosCol=arr1[1]
  1443.     var arr=PhyToLog(iPosRow,iPosCol)
  1444.     var curTD=t.rows(arr[0]).cells(arr[1])
  1445. graph.imgWidth=curTD.offsetWidth //-20
  1446. if (graph.imgWidth<10)graph.imgWidth=10
  1447. graph.imgHeight=curTD.offsetHeight //-20
  1448. if (graph.imgHeight<10)graph.imgHeight=10
  1449. var s1="<r>"
  1450. if (arrWin[3]=="0") {
  1451. //垂直方向
  1452. var iCols=eRowTmp-sRowTmp+1
  1453. var iRows=eColTmp-sColTmp+1
  1454. for (var j=sColTmp;j<=eColTmp ;j++) {
  1455. s1=s1+"<a" + j + ">"
  1456. for (var i=sRowTmp;i<=eRowTmp;i++) {
  1457. var arr3=PhyToLog(i,j)
  1458. s1=s1+"<a" + j+""+i  + ">"+t.rows(arr3[0]).cells(arr3[1]).innerText+"</a" + j+""+i  + ">"
  1459. }
  1460. s1=s1+"</a" + j + ">"
  1461. }
  1462. }
  1463. else {
  1464. var iRows=eRowTmp-sRowTmp+1
  1465. var iCols=eColTmp-sColTmp+1
  1466. for (var i=sRowTmp;i<=eRowTmp ;i++) {
  1467. s1=s1+"<a" + i + ">"
  1468. for (var j=sColTmp;j<=eColTmp;j++) {
  1469. var arr3=PhyToLog(i,j)
  1470. s1=s1+"<a" + i+""+j  + ">"+t.rows(arr3[0]).cells(arr3[1]).innerText+"</a" + i+""+j  + ">"
  1471. }
  1472. s1=s1+"</a" + i + ">"
  1473. }
  1474. }
  1475. s1=s1+"</r>"
  1476. //建IMG标记
  1477. curTD.innerHTML="<IMG></IMG>"
  1478. var img1=curTD.childNodes.item(0)
  1479. img1.style.width=graph.imgWidth
  1480. img1.style.height=graph.imgHeight
  1481. img1.src=graph.ShowGraphXml(img1,s1,iType,sTitle,iRows,iCols)
  1482. //将画图参数保存
  1483. curTD.setAttribute("graph",strReturn)
  1484. addoGraph(iPosRow,iPosCol,strReturn)
  1485. blnChange=true
  1486. }
  1487. /**
  1488. //将选中格的每行的起始列和结束列号位置增加到oPos中
  1489. //strFormula为原始输入的公式
  1490. //preFormula为预处理过后的公式
  1491. **/
  1492. function addoGraph(rowno,colno,strGraph)
  1493. {
  1494. //删除保存在oFormula中的公式
  1495. var oFind=oGraph.documentElement.selectNodes("//record[row='" + rowno + "' and col='" + colno + "']")
  1496. if (oFind.length==1)
  1497. oGraph.documentElement.removeChild(oFind.item(0))//删除找到的节点
  1498. var root = oGraph.documentElement
  1499. var newNode = oGraph.createNode (1, "record", "")
  1500. root.appendChild(newNode)
  1501. var newElem = oGraph.createElement("row") //物理行
  1502. newNode.appendChild(newElem)
  1503. newNode.lastChild.text = rowno
  1504. var newElem = oGraph.createElement("col") //物理行
  1505. newNode.appendChild(newElem)
  1506. newNode.lastChild.text = colno
  1507. var newElem = oGraph.createElement("graph") //物理行
  1508. newNode.appendChild(newElem)
  1509. newNode.lastChild.text = strGraph
  1510. }
  1511. /**
  1512. //装入显示图形
  1513. **/
  1514. function LoadGraph(iTag){
  1515. if(iTag==1){ //装入报表时装入
  1516. var sGraph=t.getAttribute("graph")
  1517. if(sGraph==null )return
  1518. oGraph.loadXML(unescape(sGraph))
  1519. }
  1520. for(var i=0;i<oGraph.documentElement.childNodes.length;i++){
  1521. var s1=oGraph.documentElement.childNodes(i).childNodes(2).text
  1522. showGraph(s1,1) //1为一个标志,表示不出现对话框
  1523. return  //暂时这样
  1524. //延时
  1525. //for(var j=0;j<100000;j++){
  1526. // var s="s";
  1527. //}
  1528. }
  1529. }
  1530. /**
  1531. //用于拖动修改行高时删除图形
  1532. **/
  1533. function DelAllGraphTag(){
  1534. for(var i=0;i<oGraph.documentElement.childNodes.length;i++){
  1535. var sRowTmp=oGraph.documentElement.childNodes(i).childNodes(0).text
  1536. var sColTmp=oGraph.documentElement.childNodes(i).childNodes(1).text
  1537. var arr=PhyToLog(parseInt(sRowTmp),parseInt(sColTmp))
  1538. t.rows(arr[0]).cells(arr[1]).innerHTML=""
  1539. }
  1540. }
  1541. function SetCondition() {
  1542. //设置查询窗口的条件串
  1543. var arySend=t.getAttribute("condition")
  1544. if(arySend==null)arySend=""
  1545. var sRet=window.showModalDialog("dsnsetcondition.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1546. if(sRet!=""){
  1547. t.setAttribute("condition",sRet)
  1548. blnChange=true
  1549. }
  1550. }
  1551. function SetConditionAct() {
  1552. //设置查询条件的处理方式
  1553. var arySend=t.getAttribute("conditionact")
  1554. if(arySend==null)arySend=""
  1555. var sRet=window.showModalDialog("dsnsetconditionact.htm",arySend,"status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  1556. if(sRet!=""){
  1557. t.setAttribute("conditionact",sRet)
  1558. blnChange=true
  1559. }
  1560. }
  1561. /**
  1562. *装入查询条件对话框
  1563. **/
  1564. function fc_getwhere() {
  1565. var arr=new Array()
  1566. // arr[0]=t.getAttribute("condition")
  1567. arr[0]=t.getAttribute("filter")
  1568. if(isSpace(arr[0])){
  1569. alert("请设置条件对话框!")
  1570. return
  1571. }
  1572. if(arr[0]!=null)
  1573. arr[0]=unescape(arr[0])
  1574. else
  1575. arr[0]=""
  1576. arr[1]=fc_wherexml
  1577. //得到此表的条件串
  1578. var sRet=window.showModalDialog("fc_condition.htm",arr,"status:no;dialogHeight:330px;dialogWidth:655px;dialogTop:50;dialogLeft:50px") 
  1579. if (sRet!=null) {
  1580. // alert(sRet)
  1581. fc_wherexml=sRet //保存到全局变量中
  1582. //fc_wherexml的节点格式为:字段中文名,值1,值2
  1583. fc_curpage=1
  1584. fc_executesql(1,sRet)//1 为页号,sRet为条件数据的XML串
  1585. }
  1586. }
  1587. // no use
  1588. function LoadWhereToSql() {
  1589. //用于打开统计表时,需要装入缺省条件进行查询
  1590. if(isSpace(t.getAttribute("initwhere")))
  1591. fc_wherexml=""
  1592. else 
  1593. fc_wherexml=t.getAttribute("initwhere")
  1594. fc_wherexml=unescape(fc_wherexml)
  1595. fc_curpage=1
  1596. fc_executesql(1,fc_wherexml)//1 为页号,fc_wherexml为条件数据的XML串
  1597. }
  1598. /**
  1599. //下一页
  1600. **/
  1601. function fc_nextpage() {
  1602. if(fc_curpage<fc_allpages) {
  1603. fc_curpage++
  1604. fc_executesql(fc_curpage,fc_wherexml)
  1605. var arySend=t.getAttribute("pagerun")
  1606. if(arySend!=null){
  1607. eval(unescape(arySend))
  1608. }
  1609. }
  1610. }
  1611. /**
  1612. //下一页0,最后一页
  1613. **/
  1614. function fc_nextpage0() {
  1615. if(fc_allpages>0) {
  1616. fc_curpage=fc_allpages
  1617. fc_executesql(fc_curpage,fc_wherexml)
  1618. var arySend=t.getAttribute("pagerun")
  1619. if(arySend!=null){
  1620. eval(unescape(arySend))
  1621. }
  1622. }
  1623. }
  1624. /**
  1625. //上一页
  1626. **/
  1627. function fc_prevpage() {
  1628. if(fc_curpage>1) {
  1629. fc_curpage--
  1630. fc_executesql(fc_curpage,fc_wherexml)
  1631. var arySend=t.getAttribute("pagerun")
  1632. if(arySend!=null){
  1633. eval(unescape(arySend))
  1634. }
  1635. }
  1636. }
  1637. /**
  1638. //上一页
  1639. **/
  1640. function fc_prevpage0() {
  1641. if(fc_curpage>0) {
  1642. fc_curpage=1
  1643. fc_executesql(fc_curpage,fc_wherexml)
  1644. var arySend=t.getAttribute("pagerun")
  1645. if(arySend!=null){
  1646. eval(unescape(arySend))
  1647. }
  1648. }
  1649. }
  1650. /**
  1651. //保存用户报表
  1652. **/
  1653. function SaveUserReport() {
  1654. t.setAttribute("initwhere",escape(fc_wherexml)) //在打开用户报表时应将"initwhere"属性值给变量fc_wherexml
  1655. SaveAsReport()
  1656. }
  1657. /**
  1658. *执行SQL语句查询
  1659. //将表属性中的结果集串一个个取出来运行.
  1660. //PageNo当前要显示的数据页号,=-1表示要显示所有数据页
  1661. //curWhereXml当前条件框中生成的条件XML节点串,不含根节点
  1662. **/
  1663. function fc_executesql(PageNo,curWhereXml) {
  1664. //加上根节点
  1665. curWhereXml="<root>"+curWhereXml+"</root>"
  1666.     
  1667.     hideTxt()
  1668. //用于保存条件对话窗中的三种条件。
  1669. var sSql2000=""
  1670. var sSql2001=""
  1671. var sSql2002=""
  1672. var sXml=t.getAttribute("recordsetxml")
  1673. if (isSpace(sXml)) return
  1674. sXml=unescape(sXml)
  1675.     var oData=new ActiveXObject("Microsoft.XMLDOM")
  1676.     oData.async="false";
  1677.     oData.loadXML("<root>"+sXml+"</root>")
  1678.     
  1679.     
  1680. //--------------------------------------------------------------
  1681.     //取节点名为record的节点:表格记录
  1682. var oRec=oData.documentElement.selectNodes("//record")
  1683.     for (var iii=0;iii<oRec.length;iii++) {
  1684.      var curNode=oRec.item(iii)
  1685.      //alert(curNode.xml)
  1686.      var curRow=curNode.childNodes.item(0).text
  1687.      var curCol=curNode.childNodes.item(1).text
  1688.      var oGroup=curNode.selectNodes("group")
  1689. //fcnull表示此XML节点为空,因为直接空会影响JAVA节点取数
  1690. var curGroup1="fcnull"
  1691. var curGroupField1="fcnull"
  1692. var curGroup2="fcnull"
  1693. var curGroupField2="fcnull"
  1694. if(oGroup.length>0){
  1695. curGroup1=oGroup.item(0).childNodes(0).text
  1696. curGroupField1=oGroup.item(0).childNodes(1).text
  1697. }
  1698. if(oGroup.length>1){
  1699. curGroup2=oGroup.item(1).childNodes(0).text
  1700. curGroupField2=oGroup.item(1).childNodes(1).text
  1701. }
  1702. //     var curSql=curNode.childNodes.item(5).childNodes(0).text
  1703.      var oMain=curNode.selectNodes("mainsql")
  1704.      var curSql=oMain.item(0).childNodes(0).text
  1705.      //3 为页尺寸 4 为在字段值--->表格中的值之间的转换的节点
  1706.      //暂时注释,等做小计行时再做
  1707.      /*if (curNode.childNodes.length>4 && curNode.childNodes.item(4).tagName=="events" ) {
  1708.      var oEvent=curNode.childNodes.item(4)
  1709.      if (oEvent.childNodes.length>0) {
  1710.      var iFieldNo=oEvent.childNodes(0).text
  1711.      var iFieldNo=oEvent.childNodes(1).text
  1712.      }
  1713.      }*/
  1714.      //----------------------
  1715. /*
  1716.     //找到curSql的表名
  1717. var sExp=/s(from|join)s+[A-Za-z0-9]+s*  /ig
  1718. var re=curSql.match(sExp)
  1719. if (re!=null) {
  1720. var arrTab=new Array()//保存表名的数组
  1721. for (var i=0;i<=re.length-1;i++){
  1722. var s1=re[i]
  1723. arrTab[i]=trim(s1.substring(5,s1.length))
  1724. //alert(arrTab[i])
  1725. }
  1726. }
  1727. else {
  1728. //Sql语句中无表名,有错,待处理
  1729. }
  1730. //curWhereXml为保存对话框中条件的XML串
  1731. if (curWhereXml!="" && curWhereXml!="<root></root>") {
  1732.      //如条件中有2000=2000 则要替代成条件框中生成的条件
  1733.     var newWhere=""//保存结果SQL串
  1734.     var oX=new ActiveXObject("Microsoft.XMLDOM")
  1735.     oX.async="false";
  1736.     oX.loadXML(curWhereXml)
  1737.     for (var ii=0;ii<oX.documentElement.childNodes.length;ii++) {
  1738. var sField=oX.documentElement.childNodes.item(ii).childNodes.item(0).text
  1739. for (var jj=0;jj<arrTab.length;jj++) {
  1740. if (fc_FieldInTable(sField,arrTab[jj])=="") {
  1741. //多次用带表名的字段名替代条件串中的字段名
  1742. var sAfterReplace=fc_RepStr(oX.documentElement.childNodes.item(ii).childNodes.item(1).text,sField,arrTab[jj]+"."+trim(sField))
  1743. newWhere=newWhere+" and "+sAfterReplace
  1744. break
  1745. }
  1746. }
  1747. }
  1748. //去掉前面的" and "
  1749. if (newWhere.length>6)
  1750. newWhere =newWhere.substring(5,newWhere.length)
  1751.      //如条件中有fcsoft=fcsoft 则要替代成条件框中生成的条件
  1752.     curSql=fc_RepStr(curSql,"2000=2000",newWhere)
  1753.     }
  1754.     */
  1755. if (curWhereXml!="" && curWhereXml!="<root></root>") {
  1756.      //如条件中有2000=2000 则要替代成条件框中生成的条件
  1757.     var newWhere=""//保存结果SQL串
  1758. //给输入参数的值
  1759. //alert(curWhereXml)
  1760. sActFieldIn=curWhereXml
  1761. ConditionAct()
  1762. //var sActField=t.getAttribute("conditionact")
  1763. //if(sActField!=null)
  1764. // sActField=unescape(sActField)
  1765. //else
  1766. // sActField=""
  1767. //运行用户定义的字段拼条件的方式,参数为sActFieldIn,将结果放入sActFieldOut变量中
  1768. //eval(sActField)
  1769. //alert(sActFieldOut)
  1770.     var oX=new ActiveXObject("Microsoft.XMLDOM")
  1771.     oX.async="false";
  1772.     oX.loadXML("<root>"+sActFieldOut+"</root>")
  1773.     newWhere=unescape(oX.documentElement.childNodes(0).text)
  1774. if(isSpace(newWhere)==false){
  1775. var tmp1=newWhere
  1776. sSql2000=tmp1
  1777. //alert(sSql2000+curSql)
  1778. curSql=fc_RepStr(curSql,"2000=2000",tmp1)
  1779. //alert("qqq"+curSql)
  1780. curGroup1=fc_RepStr(curGroup1,"2000=2000",tmp1)
  1781. curGroup2=fc_RepStr(curGroup2,"2000=2000",tmp1)
  1782. }
  1783.     newWhere=unescape(oX.documentElement.childNodes(1).text)
  1784. if(isSpace(newWhere)==false){
  1785. var tmp1=newWhere
  1786. sSql2001=tmp1
  1787. curSql=fc_RepStr(curSql,"2001=2001",tmp1)
  1788. curGroup1=fc_RepStr(curGroup1,"2001=2001",tmp1)
  1789. curGroup2=fc_RepStr(curGroup2,"2001=2001",tmp1)
  1790. }
  1791.     newWhere=unescape(oX.documentElement.childNodes(2).text)
  1792. if(isSpace(newWhere)==false){
  1793. var tmp1=newWhere
  1794. sSql2002=tmp1
  1795. //alert(sSql2002)
  1796. curSql=fc_RepStr(curSql,"2002=2002",tmp1)
  1797. curGroup1=fc_RepStr(curGroup1,"2002=2002",tmp1)
  1798. curGroup2=fc_RepStr(curGroup2,"2002=2002",tmp1)
  1799. }
  1800. }
  1801. //show(curSql+"OOOOOOOO"+curGroup1+"oooooooo"+curGroup2)    
  1802.     //alert("ddd:"+curSql)
  1803.      //----------------------
  1804.      if(PageNo==-1){
  1805.      var blnNoPages=true  //分页标志,供后使用
  1806.      var curPageSize=99999999 //表示不分页,尽可能最大值
  1807.      PageNo=1
  1808.      //设置的页尺寸要供后使用
  1809.      var curPageSizeOld=parseInt(curNode.childNodes.item(2).text)
  1810.      if (isNaN(curPageSizeOld) || curPageSizeOld==0)
  1811.      curPageSizeOld=10  //如页尺寸不合法则置为10
  1812.      }
  1813.      else {
  1814.      var blnNoPages=false
  1815.      var curPageSize=parseInt(curNode.childNodes.item(2).text)
  1816.      if (isNaN(curPageSize) || curPageSize==0)
  1817.      curPageSize=10  //如页尺寸不合法则置为10
  1818. }
  1819.      if(curGroup1=="fcnull") {
  1820.      //无分组
  1821.      //此XML串的SQL节点顺序决定返回数据的顺序
  1822.      var allXml="<page><pageno>"+PageNo+"</pageno><pagesize>"+curPageSize+"</pagesize></page>"
  1823. allXml+="<source><datasource>webgrid</datasource><username>sa</username><password></password></source>"     
  1824. //找开始的SQL语句,
  1825. //<mainsql><sql>...</sql>...<start>...<sql>...</sql><sql>...</sql></start></mainsql>
  1826.      var oEnd=oMain.item(0).selectNodes("start")
  1827.      if (oEnd.length>0){
  1828.      var oEndSql=oEnd.item(0).selectNodes("sql")
  1829.      if(oEndSql.length>0){
  1830.      for(var iEndSql=0;iEndSql<oEndSql.length;iEndSql++){
  1831. var sEndSql=oEndSql.item(iEndSql).text
  1832. if(isSpace(sSql2000)==false)
  1833. sEndSql=fc_RepStr(sEndSql,"2000=2000",sSql2000)
  1834. if(isSpace(sSql2001)==false)
  1835. sEndSql=fc_RepStr(sEndSql,"2001=2001",sSql2001)
  1836. if(isSpace(sSql2002)==false)
  1837. sEndSql=fc_RepStr(sEndSql,"2002=2002",sSql2002)
  1838.      allXml=allXml+"<sql>"+TransXml(sEndSql)+"</sql>"
  1839.      }
  1840.      }
  1841.      }
  1842.      allXml=allXml+"<sql>"+TransXml(curSql)+"</sql>"
  1843. //找结束的SQL语句,
  1844. //<mainsql><sql>...</sql>...<end>...<sql>...</sql><sql>...</sql></end></mainsql>
  1845.      var oEnd=oMain.item(0).selectNodes("end")
  1846.      if (oEnd.length>0){
  1847.      var oEndSql=oEnd.item(0).selectNodes("sql")
  1848.      if(oEndSql.length>0){
  1849.      for(var iEndSql=0;iEndSql<oEndSql.length;iEndSql++){
  1850. var sEndSql=oEndSql.item(iEndSql).text
  1851. if(isSpace(sSql2000)==false)
  1852. sEndSql=fc_RepStr(sEndSql,"2000=2000",sSql2000)
  1853. if(isSpace(sSql2001)==false)
  1854. sEndSql=fc_RepStr(sEndSql,"2001=2001",sSql2001)
  1855. if(isSpace(sSql2002)==false)
  1856. sEndSql=fc_RepStr(sEndSql,"2002=2002",sSql2002)
  1857.      allXml=allXml+"<sql>"+TransXml(sEndSql)+"</sql>"
  1858.      }
  1859.      }
  1860.      }
  1861.      //alert(allXml)
  1862.      var curDataXml=fc_select1(allXml)
  1863.      //alert(curDataXml)
  1864.      //var curDataXml=fc_select(curSql,PageNo,curPageSize)
  1865. }
  1866. else {
  1867. //有分组
  1868.      var allXml="<page><pageno>"+PageNo+"</pageno><pagesize>"+curPageSize+"</pagesize></page>"
  1869. allXml+="<source><datasource>webgrid</datasource><username>sa</username><password></password></source>"     
  1870.      allXml+="<mainsql><sql>"+TransXml(curSql)+"</sql>"
  1871. //找开始的SQL语句,
  1872. //<mainsql><sql>...</sql>...<start>...<sql>...</sql><sql>...</sql></start></mainsql>
  1873.      allXml+="<start>"
  1874.      var oEnd=oMain.item(0).selectNodes("start")
  1875.      if (oEnd.length>0){
  1876.      var oEndSql=oEnd.item(0).selectNodes("sql")
  1877.      if(oEndSql.length>0){
  1878.      for(var iEndSql=0;iEndSql<oEndSql.length;iEndSql++){
  1879. var sEndSql=oEndSql.item(iEndSql).text
  1880. if(isSpace(sSql2000)==false)
  1881. sEndSql=fc_RepStr(sEndSql,"2000=2000",sSql2000)
  1882. if(isSpace(sSql2001)==false)
  1883. sEndSql=fc_RepStr(sEndSql,"2001=2001",sSql2001)
  1884. if(isSpace(sSql2002)==false)
  1885. sEndSql=fc_RepStr(sEndSql,"2002=2002",sSql2002)
  1886.      allXml=allXml+"<sql>"+TransXml(sEndSql)+"</sql>"
  1887.      }
  1888.      }
  1889.      }
  1890.      allXml+="</start>"
  1891. //找结束的SQL语句,
  1892. //<mainsql><sql>...</sql>...<start>...<sql>...</sql><sql>...</sql></start></mainsql>
  1893.      allXml+="<end>"
  1894.      var oEnd=oMain.item(0).selectNodes("end")
  1895.      if (oEnd.length>0){
  1896.      var oEndSql=oEnd.item(0).selectNodes("sql")
  1897.      if(oEndSql.length>0){
  1898.      for(var iEndSql=0;iEndSql<oEndSql.length;iEndSql++){
  1899. var sEndSql=oEndSql.item(iEndSql).text
  1900. if(isSpace(sSql2000)==false)
  1901. sEndSql=fc_RepStr(sEndSql,"2000=2000",sSql2000)
  1902. if(isSpace(sSql2001)==false)
  1903. sEndSql=fc_RepStr(sEndSql,"2001=2001",sSql2001)
  1904. if(isSpace(sSql2002)==false)
  1905. sEndSql=fc_RepStr(sEndSql,"2002=2002",sSql2002)
  1906.      allXml=allXml+"<sql>"+TransXml(sEndSql)+"</sql>"
  1907.      }
  1908.      }
  1909.      }
  1910.      allXml+="</end>"
  1911.     
  1912.      allXml+="</mainsql>"
  1913.      allXml+="<group><sql>"+TransXml(curGroup1)+"</sql><groupfield>"
  1914.      +curGroupField1+"</groupfield></group>"
  1915.      allXml=allXml+"<group><sql>"+TransXml(curGroup2)+"</sql><groupfield>"
  1916.      +curGroupField2+"</groupfield></group>"
  1917.      //alert(allXml)
  1918.      var curDataXml=fc_select2(allXml)
  1919. }
  1920.     
  1921. if(curDataXml=="<root></root>") {
  1922. alert("无符合条件的记录!")
  1923. return
  1924. }
  1925. //alert(curDataXml)
  1926. //在换页时将表格的界面恢复,注意:全局变量没恢复
  1927. //div1.innerHTML=LoadDiv1Html()
  1928. //----------------------
  1929. //将数据给表格中
  1930.     var oD=new ActiveXObject("Microsoft.XMLDOM")
  1931.     oD.async="false";
  1932.     oD.loadXML(curDataXml)
  1933.     var allRows=parseInt(oD.documentElement.childNodes.item(oD.documentElement.childNodes.length-1).text)
  1934.     var intCols=oD.documentElement.childNodes(0).childNodes.length
  1935.     if(blnNoPages){ //不分页显示,一次把数据都显示出来
  1936.      //curPageSizeOld
  1937.     var blnInsertRow=false
  1938.     for (var j=0;j<oD.documentElement.childNodes.length-1;j++) {
  1939. if(j>=curPageSizeOld && blnInsertRow==false){
  1940. //插入空行
  1941. AutoAddLines=oD.documentElement.childNodes.length-1-curPageSizeOld
  1942. for(var kk=0;kk<AutoAddLines;kk++){
  1943. grid.InsertRow(parseInt(curRow)+j)
  1944. }
  1945. CopytHtml()
  1946. //运行外部设置的命令
  1947. //AutoAddLines为此命令的参数
  1948. var arySend=t.getAttribute("addlinerun")
  1949. if(arySend!=null){
  1950. eval(unescape(arySend))
  1951. }
  1952. //---------------
  1953. blnInsertRow=true
  1954. }
  1955. if(j<curPageSizeOld)
  1956.      SetRowbgColor(parseInt(curRow)+j,parseInt(curCol),intCols,"")
  1957.      var curO=oD.documentElement.childNodes.item(j)
  1958. //如当前行为汇总行,则给底色
  1959. if(curO.tagName=="recordsum1"){
  1960. SetRowbgColor(parseInt(curRow)+j,parseInt(curCol),intCols,"yellow")
  1961. }
  1962. else if(curO.tagName=="recordsum2"){
  1963. SetRowbgColor(parseInt(curRow)+j,parseInt(curCol),intCols,"gray")
  1964. }
  1965.     for (var k=0;k<oD.documentElement.childNodes.item(0).childNodes.length;k++) {
  1966. //如标记名为fcnull,则此列不能给值
  1967.      if (curO.childNodes.item(k).tagName!="fcnull") {
  1968. //从XML串中往界面上给值
  1969. SetCellData(parseInt(curRow)+j,parseInt(curCol)+k,curO.childNodes.item(k).text)
  1970. }
  1971. }
  1972.      } //for end
  1973.      //
  1974. var arySend=t.getAttribute("pagerun")
  1975. if(arySend!=null){
  1976. eval(unescape(arySend))
  1977. }
  1978.     
  1979.     }
  1980.     else { //分页显示
  1981.     if (isNaN(allRows))
  1982.      fc_allpages=0
  1983.     else 
  1984.      fc_allpages=Math.ceil(allRows/curPageSize) //给页尺寸
  1985. //加上当前页和总页数的显示,如1/3
  1986. fcPage.childNodes(2).value=fc_curpage+"/"+fc_allpages
  1987. //------------
  1988.     //最后一个子节点为行数
  1989.     for (var j=0;j<curPageSize;j++) {
  1990.      SetRowbgColor(parseInt(curRow)+j,parseInt(curCol),intCols,"")
  1991. if(j<oD.documentElement.childNodes.length-1){
  1992.      var curO=oD.documentElement.childNodes.item(j)
  1993. //如当前行为汇总行,则给底色
  1994. if(curO.tagName=="recordsum1"){
  1995. SetRowbgColor(parseInt(curRow)+j,parseInt(curCol),intCols,"yellow")
  1996. }
  1997. else if(curO.tagName=="recordsum2"){
  1998. SetRowbgColor(parseInt(curRow)+j,parseInt(curCol),intCols,"gray")
  1999. }
  2000.     for (var k=0;k<oD.documentElement.childNodes.item(0).childNodes.length;k++) {
  2001. //如标记名为fcnull,则此列不能给值
  2002.      if (curO.childNodes.item(k).tagName!="fcnull") {
  2003. //从XML串中往界面上给值
  2004. SetCellData(parseInt(curRow)+j,parseInt(curCol)+k,curO.childNodes.item(k).text)
  2005. }
  2006. }
  2007. }
  2008. else { //清空,以免数据重叠
  2009.     for (var k=0;k<oD.documentElement.childNodes.item(0).childNodes.length;k++) {
  2010. //如标记名为fcnull,则此列不能给值
  2011.      if (curO.childNodes.item(k).tagName!="fcnull") {
  2012. //从XML串中往界面上给值
  2013. SetCellData(parseInt(curRow)+j,parseInt(curCol)+k,"")
  2014. }
  2015. }
  2016. }
  2017.      } //for end
  2018. } //分页显示if end
  2019.     } //record node for end
  2020. //--------------------------------------------------------------
  2021. //alert(fc_wherexml)
  2022. var arySend=t.getAttribute("afterrunsql")
  2023. if(arySend!=null){
  2024. eval(unescape(arySend))
  2025. }
  2026. }
  2027. /**
  2028. //点显示全部页数据的自定义按钮时运行此
  2029. **/
  2030. function fc_ShowAll() {
  2031. fc_executesql(-1,fc_wherexml)
  2032. }
  2033. /**
  2034. //装入用于开发的一排按钮
  2035. **/
  2036. function LoadButton() {
  2037. var sR='<table border=1 id=queryToolbar bordercolordark="#ffe5d5" bordercolorlight="#808080" style="display:none;LEFT: 5px; POSITION: absolute; TOP: 3px" cellpadding=0 cellspacing=0><tr>'
  2038. sR=sR+'<td style="display:none" id=fcPage >'
  2039. sR=sR+'<INPUT class="buttonpage" type=button value="|<" onclick=fc_prevpage0()>'
  2040. sR=sR+'<INPUT class="buttonpage" type=button value="<" onclick=fc_prevpage()>'
  2041. sR=sR+'<INPUT class="buttonpageno" disabled  style="width:40" value="">'
  2042. sR=sR+'<INPUT class="buttonpage" type=button value=">" onclick=fc_nextpage()>'
  2043. sR=sR+'<INPUT class="buttonpage" type=button value=">|" onclick=fc_nextpage0()>'
  2044. sR=sR+'</td>'
  2045. sR=sR+'<td style="display:none" id=fcShowAll><INPUT class="button" type=button value="显示全部" onclick=fc_ShowAll() ></td>'
  2046. var s1='<td><INPUT id=fcButton class="button" style="display:none" type=button ></td>'
  2047. for(var i=0;i<5;i++) {sR=sR+s1}
  2048. sR=sR+'</tr></table>'
  2049. document.write(sR)
  2050. }
  2051. /**
  2052. //初始化功能按钮
  2053. **/
  2054. function initButton() {
  2055. var s1=t.getAttribute("buttonxml")
  2056. if(isSpace(s1)==false) {
  2057. var ii=0
  2058. s1=unescape(s1)
  2059.     var oXml=new ActiveXObject("Microsoft.XMLDOM")
  2060.     oXml.async="false";
  2061. oXml.loadXML(s1)
  2062. for(var i=0;i<oXml.documentElement.childNodes.length;i++) {
  2063. if (oXml.documentElement.childNodes(i).childNodes(0).text=="fcpage"){
  2064. fcPage.style.display="block"
  2065. }
  2066. else if (oXml.documentElement.childNodes(i).childNodes(0).text=="fcshowall"){
  2067. fcShowAll.style.display="block"
  2068. }
  2069. else {
  2070. fcButton[ii].outerHTML='<INPUT id=fcButton class="button" type=button '
  2071. +' onclick='+oXml.documentElement.childNodes(i).childNodes(1).text
  2072. +' value='+oXml.documentElement.childNodes(i).childNodes(0).text+'>'
  2073. ii++
  2074. }
  2075. }
  2076. }
  2077. }
  2078. /**
  2079. //设行背景色
  2080. **/
  2081. function SetRowbgColor(iRow,iCol,intCols,vColor) {
  2082. for(var i=0;i<intCols;i++){
  2083. t.rows(iRow).cells(i+iCol).bgColor=vColor
  2084. }
  2085. }
  2086. /**
  2087. //直接运行输入的命令,可用于设置表格背景等功能
  2088. **/
  2089. function RunCommand() {
  2090. var sRet=window.showModalDialog("dsncommand.htm","","status:no;scroll:no;dialogHeight:340px;dialogWidth:695px;dialogTop:20;dialogLeft:20px") 
  2091. if(sRet!=""){
  2092. eval(sRet)
  2093. blnChange=true
  2094. }
  2095. }
  2096. /**
  2097. //检查报表是否变化了,提示保存
  2098. **/
  2099. function CheckReportChange() {
  2100. if(blnRunMode)return
  2101. if(blnChange){
  2102. var ret = window.confirm("报表内容已改变,需要保存吗?");
  2103. if (ret) {
  2104. SaveReport()
  2105. }
  2106. else {
  2107. blnChange=false
  2108. }
  2109. }
  2110. }
  2111. /**
  2112. //从fcRep.htm中移过来的
  2113. *表格的cellchange事件
  2114. **/
  2115. function grid_onCellChange() {
  2116. var curTD=event.oldTD //当前修改的TD
  2117. var newValue=curTD.innerText
  2118. var strV=trim(newValue)
  2119. if(curTD.innerText==event.BeforeChangeText && trim(strV.substring(0,1))!="=") return
  2120. curTD.innerText=event.BeforeChangeText
  2121. SaveoUndoOneRecord()
  2122. curTD.innerText=newValue
  2123. //检查左边是否有"="
  2124. var strFormula
  2125. var curRow,curCol
  2126. if (trim(strV.substring(0,1))=="="){
  2127. //计算公式的结果和保存公式至oFormula对象中
  2128. strFormula=strV.substring(1,strV.length)
  2129. //保存公式
  2130. curTD.setAttribute("formula",strFormula)
  2131. //preFormula为预处理过后的公式
  2132. var preFormula=trim(replaceFormula(strFormula))
  2133. addoFormulaNodes(curTD.parentNode.rowIndex,curTD.cellIndex,preFormula,strFormula)
  2134. var v=DealPoint(preFormula)
  2135. CellPoint(curTD,v)
  2136. }
  2137. else {
  2138. //清空公式
  2139. curTD.removeAttribute("formula")
  2140. //删除保存在oFormula中的公式
  2141. var oFind=oFormula.documentElement.selectNodes("//record[row='" + curTD.parentNode.rowIndex + "' and col='" + curTD.cellIndex + "']")
  2142. if (oFind.length==1)
  2143. oFormula.documentElement.removeChild(oFind.item(0))//删除找到的节点
  2144. }
  2145. //将调用此单元的所有单元格重算一遍
  2146. SumOneCell("GETCELL("+curTD.parentNode.rowIndex+","+LogToPhy(curTD.parentNode.rowIndex,curTD.cellIndex)+")")
  2147. SaveoRedoOneRecord()
  2148. blnChange=true
  2149. }
  2150. /**
  2151. *查询条件的处理函数,将curWhereXml中的条件串,根据字段表达式拼成SQL语句
  2152. *@date 2003-06-06
  2153. *@param sActFieldIn 输入参数,条件串, =curWhereXml
  2154. *@return sActFieldOut 输出参数,
  2155. **/
  2156. function ConditionAct(){
  2157. var sFilter=t.getAttribute("filter")
  2158. if(isSpace(sFilter)) return
  2159. sFilter=unescape(sFilter)
  2160. //alert(sFilter)
  2161. var oFilter=new ActiveXObject("Microsoft.XMLDOM");
  2162. oFilter.async ="false";
  2163. oFilter.loadXML("<root>"+sFilter+"</root>");
  2164. var sRet="";
  2165. var sRet2000="";
  2166. var sRet2001="";
  2167. var sRet2002="";
  2168. // var s1=" format(fintYear,'0000')+'.'+format(fintPeriod,'00') ";
  2169. oXml=new ActiveXObject("Microsoft.XMLDOM");
  2170. oXml.async ="false";
  2171. oXml.loadXML(sActFieldIn);
  2172. for (var i=0;i<oXml.documentElement.childNodes.length;i++) {
  2173. var sValue1=oXml.documentElement.childNodes(i).childNodes(1).text;
  2174. var sValue2=oXml.documentElement.childNodes(i).childNodes(2).text;
  2175. if (isSpace(sValue1)==false || isSpace(sValue2)==false) {
  2176. for (var j=0;j<oFilter.documentElement.childNodes.length;j++) {
  2177. //名称相同
  2178. if(oFilter.documentElement.childNodes(j).childNodes(0).text == oXml.documentElement.childNodes(i).childNodes(0).text ) {
  2179. var oField =oFilter.documentElement.childNodes(j).childNodes(2)  //字段表达式节点
  2180. if(oField.childNodes(0).childNodes(0).text=="否" || isSpace(sValue1)==false ){
  2181. var sF=" and "+fc_RepStr(oField.childNodes(0).childNodes(1).text,":get_value1",sValue1)
  2182. for(var k=0;k<oField.childNodes(0).childNodes(2).childNodes.length;k++){
  2183. if(oField.childNodes(0).childNodes(2).childNodes(k).text=="2000=2000"){
  2184. sRet2000+=sF
  2185. }
  2186. if(oField.childNodes(0).childNodes(2).childNodes(k).text=="2001=2001"){
  2187. sRet2001+=sF
  2188. }
  2189. if(oField.childNodes(0).childNodes(2).childNodes(k).text=="2002=2002"){
  2190. sRet2002+=sF
  2191. }
  2192. }
  2193. }
  2194. //处理第二个字段表达式
  2195. if(oField.childNodes.length>1){
  2196. if(oField.childNodes(1).childNodes(0).text=="否" || isSpace(sValue2)==false ){
  2197. var sF=" and "+fc_RepStr(oField.childNodes(1).childNodes(1).text,":get_value2",sValue2)
  2198. for(var k=0;k<oField.childNodes(1).childNodes(2).childNodes.length;k++){
  2199. if(oField.childNodes(1).childNodes(2).childNodes(k).text=="2000=2000"){
  2200. sRet2000+=sF
  2201. }
  2202. if(oField.childNodes(1).childNodes(2).childNodes(k).text=="2001=2001"){
  2203. sRet2001+=sF
  2204. }
  2205. if(oField.childNodes(1).childNodes(2).childNodes(k).text=="2002=2002"){
  2206. sRet2002+=sF
  2207. }
  2208. }  // end for k
  2209. }
  2210. }
  2211. break;
  2212. }   //end if
  2213. }  //end for j
  2214. }  //end if
  2215. }  //end for i
  2216. if(sRet2000.length>5){
  2217. sRet2000=sRet2000.substring(5,sRet2000.length);
  2218. }
  2219. if(sRet2001.length>5){
  2220. sRet2001=sRet2001.substring(5,sRet2001.length);
  2221. }
  2222. if(sRet2002.length>5){
  2223. sRet2002=sRet2002.substring(5,sRet2002.length);
  2224. }
  2225. //alert(sRet2000)
  2226. sActFieldOut="<fc>"+escape(sRet2000)+"</fc>"+"<fc>"+escape(sRet2001)+"</fc>"+"<fc>"+escape(sRet2002)+"</fc>";
  2227. }