⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcrep.js

📁 一个完整的
💻 JS
📖 第 1 页 / 共 5 页
字号:
					if(jjj>=t.rows(i+1).cells.length) break
					
					var c=parseInt(t.rows(i+1).cells(jjj).colSpan)
					if (isNaN(c)) c=1
					addCols=addCols+c-1
				}
				
				//if (i==2) alert("j="+j+" "+addCols)
				curAddCell=t.rows(i+1).insertCell(j-addCols)
				//生成的单元格应保存初始合并单元格的td row,col
				curAddCell.setAttribute("tdRow",td_row)
				curAddCell.setAttribute("tdCol",td_col)
				//curAddCell.innerText="R="+td_row+" C="+td_col
				curAddCell.innerText=curTD.innerText
				
				curAddCell.colSpan=lngCols
				curAddCell.rowSpan=lngRows-1
				//curAddCell.innerText="A"
				
				
			}
		}	//列循环结束
	}	//行循环结束

//	var d=new Date()
//	var t1=d.getTime()
//	alert(t1-t2)
}
//*****************************************************************************************
//处理合并 end
//*****************************************************************************************

function show(val) {
	txt1.style.display ="block"
	txt1.style.zIndex =2
	txt1.value =val
}
function CellPoint(curTD,v) {
//向单元格给值时处理小数位数
//curTD为要处理的单元格,	v为要给的值
	
	var v1=parseFloat(v)
	if(isNaN(v1)==false){
		//小数位数
		var s1=curTD.getAttribute("pointnum")
		if(s1!=null){
			s1=parseInt(s1)
			curTD.innerText=ContDec(v1,s1)
		}
		else {
			curTD.innerText=v
		}
	}
	else {
		curTD.innerText=v
	}	
}
//*****************************************************************************************
//处理grid事件
//*****************************************************************************************
function grid_onVscroll() {
	if(tc.style.display=="block"){
		//show(sCol+" "+sRow+"  "+eCol+"  "+eRow)
		//此处暂时用物理位置,到时要变成逻辑位置
		var arr=PhyToLog(sRow,sCol)
		var arr1=PhyToLog(eRow,eCol)
		var tdStart=t.rows(arr[0]).cells(arr[1])
		var tdEnd=t.rows(arr1[0]).cells(arr1[1])

		//sLeft=tdStart.offsetLeft
		sTop=tdStart.offsetTop
		//sWidth=tdStart.offsetWidth
		sHeight=tdStart.offsetHeight

		//eLeft=tdEnd.offsetLeft
		eTop=tdEnd.offsetTop
		//eWidth=tdEnd.offsetWidth
		eHeight=tdEnd.offsetHeight
	
		//alert(sLeft+"=="+eLeft+"  "+sTop+"=="+eTop)

		showBlueRect()
	}
}
function grid_onHscroll() {
	if(tc.style.display=="block"){
		//show(sCol+" "+sRow+"  "+eCol+"  "+eRow)
		//此处暂时用物理位置,到时要变成逻辑位置
		var arr=PhyToLog(sRow,sCol)
		var arr1=PhyToLog(eRow,eCol)
		var tdStart=t.rows(arr[0]).cells(arr[1])
		var tdEnd=t.rows(arr1[0]).cells(arr1[1])
		sLeft=tdStart.offsetLeft
		//sTop=tdStart.offsetTop
		sWidth=tdStart.offsetWidth
		//sHeight=tdStart.offsetHeight
		eLeft=tdEnd.offsetLeft
		//eTop=tdEnd.offsetTop
		eWidth=tdEnd.offsetWidth
		//eHeight=tdEnd.offsetHeight
		showBlueRect()
	}
}
//*****************************************************************************************
//处理grid事件 end
//*****************************************************************************************


//*****************************************************************************************
//增删行列
//*****************************************************************************************
function InsRow(){
	if(grid.ReadOnly) return
	if (tc.style.display =="none" )	return
	SaveoUndoOneRecord()
	var minRow
	if (sRow>eRow)
		minRow=eRow
	else
		minRow=sRow
		
	var iRows=Math.abs(eRow-sRow)
	MoveFormula(minRow,iRows+1,1)
	for(var i=0;i<=iRows;i++){
//		grid.InsertRow(minRow)
//---------插入行
		var tdCount=0	//记录此行共要插多少个TD
	
		for (j=0;j<=t.rows(0).cells.length-1;j++){
	//i,minCol单元的坐标换成逻辑坐标找到TD,判断
	//如rowspan>1则i=i+rowspan-1,此TD的colspan>1则colspan=colspan-1,
	//如果colspan=1则删除此TD
			var arr=PhyToLog(minRow,j)
			var curTD=t.rows(arr[0]).cells(arr[1])
			
			if(minRow==arr[0] || (curTD.rowSpan==1 && curTD.colSpan==1)){
			//	alert(arr[0]+","+arr[1])
				//t.rows(minRow).insertCell()
				tdCount++
			}
			else { //从合并单元的半中间插入
				if(curTD.colSpan>1){
					j=j+curTD.colSpan-1
				}
	
				if(curTD.rowSpan>1){
					curTD.rowSpan=curTD.rowSpan+1
				}
			}
	
		}
		//按照计算好的TD个数插入行
		var oTr=t.insertRow(minRow)
		oTr.style.height=21
		for(j=0;j<tdCount;j++){
			t.rows(minRow).insertCell();
		}
//---------
	}
	//理顺行标
	for (i=minRow;i<=t.rows.length-1;i++){
		t.rows(i).cells(0).innerText=i
	}	
//	txtMyGrid.style.top=txtMyGrid.style.pixelTop-(iRows+1)*21  //per row height=21
	CopytHtml()

	var arr=PhyToLog(sRow,sCol)
	var moveTD=t.rows(arr[0]).cells(arr[1])
	grid.moveedit(moveTD)
	showBlueScale(sRow,sCol,eRow,eCol)
	
	//从单元属性中将公式及预处理过后的公式装入oFormula中
	LoadAllFormula()
	//强制表格宽高同步
	if(grid.autosize){
		grid.autosize=true
	}

	SaveoRedoOneRecord()
	blnChange=true
}

function DelRow(){
	if(grid.ReadOnly) return
	if (tc.style.display =="none" )	return
	//var lngStatus=SelStatus(sRow,sCol,eRow,eCol)
	//if(lngStatus==2 || lngStatus==5 ) return
	SaveoUndoOneRecord()
	var minRow
	if (sRow>eRow)
		minRow=eRow
	else
		minRow=sRow
	//如选择的兰框在最边上,则删除列后不再显示兰框
	if(eRow==t.rows.length-1 || sRow==t.rows.length-1 ){
		if(minRow==1){
			alert("不能全部删除!")
			return
		}
		
	}
	clearBlueScale()	
	var iRows=Math.abs(eRow-sRow)
	MoveFormula(minRow,-(iRows+1),1)
	for(var i=0;i<=iRows;i++){
//		grid.DeleteRow(minRow)
//---------列删除
//		t.children[0].removeChild(t.children[0].children[minCol])
	//固定行不能删除		
		//if(t.childNodes(0).childNodes.length<=lngFixCols )return
		for (j=t.rows(0).cells.length-1;j>=0;j--){
//i,minCol单元的坐标换成逻辑坐标找到TD,判断
//如rowspan>1则i=i+rowspan-1,此TD的colspan>1则colspan=colspan-1,
//如果colspan=1则删除此TD
			var arr=PhyToLog(minRow,j)
			var curTD=t.rows(arr[0]).cells(arr[1])
			
			if(curTD.rowSpan==1 && curTD.colSpan==1){
			//	
				t.rows(arr[0]).deleteCell(arr[1])
			}
			else {
				if(curTD.colSpan>1){
					j=j-curTD.colSpan+1
				}
	
				if(curTD.rowSpan>1){
					//alert(arr[0]+","+arr[1])	
					//如当前单元是合并单元的主单元格则合并单元下移
					if (arr[0]==minRow){
						var tdNode=t.rows(arr[0]).cells(arr[1]).cloneNode(true)
						var iInsCol=PhyToLogCol(minRow+1,j)
						t.rows(minRow+1).insertCell(iInsCol)
						t.rows(minRow+1).cells(iInsCol).replaceNode(tdNode)
						t.rows(minRow+1).cells(iInsCol).rowSpan=curTD.rowSpan-1
						
						t.rows(arr[0]).deleteCell(arr[1])
					}
					else{
						curTD.rowSpan=curTD.rowSpan-1
					}
					
					
				}
				else if(curTD.rowSpan==1){
					t.rows(arr[0]).deleteCell(arr[1])
				}
			}

		}
		t.deleteRow(minRow)
//-----------------


	}
	//理顺行标
	for (i=minRow;i<=t.rows.length-1;i++){
		t.rows(i).cells(0).innerText=i
	}	
	
	CopytHtml()
	if(tc.style.display=="block"){
		var arr=PhyToLog(sRow,sCol)
		var moveTD=t.rows(arr[0]).cells(arr[1])
		grid.moveedit(moveTD)
		showBlueScale(sRow,sCol,eRow,eCol)
	}
	//从单元属性中将公式及预处理过后的公式装入oFormula中
	LoadAllFormula()
	//强制表格宽高同步
	if(grid.autosize){
		grid.autosize=true
	}

	SaveoRedoOneRecord()
	blnChange=true
}
function InsCol(){
	if(grid.ReadOnly) return
	if (tc.style.display =="none" )	return
	SaveoUndoOneRecord()
	var minCol
	if (sCol>eCol)
		minCol=eCol
	else
		minCol=sCol
		
	var iCols=Math.abs(eCol-sCol)

	MoveFormula(minCol,iCols+1)

	for(var i=0;i<=iCols;i++){
//		grid.InsertCol(minCol)
//---------列插入
		var o=document.createElement("COL")
		o.style.width=70
		var iPos=t.childNodes(0).childNodes.length-1
		if (iPos>minCol)
			iPos=minCol
		t.children[0].insertBefore(o,t.children[0].children[iPos])

	//固定行不能删除		
		//if(t.childNodes(0).childNodes.length<=lngFixCols )return

		for (j=0;j<=t.rows.length-1;j++){
//i,minCol单元的坐标换成逻辑坐标找到TD,判断
//如rowspan>1则i=i+rowspan-1,此TD的colspan>1则colspan=colspan-1,
//如果colspan=1则删除此TD
			var arr=PhyToLog(j,minCol)
			var curTD=t.rows(arr[0]).cells(arr[1])
			
			if(curTD.rowSpan==1 && curTD.colSpan==1){
			//	alert(arr[0]+","+arr[1])
				t.rows(arr[0]).insertCell(arr[1])
			}
			else {
				if(curTD.rowSpan>1){
					j=j+curTD.rowSpan-1
				}
	
				if(curTD.colSpan>1){
					curTD.colSpan=curTD.colSpan+1
				}
				//else if(curTD.colSpan==1){
				//	t.rows(arr[0]).deleteCell(arr[1])
				//}
			}

		}
//-----------------


	}
	//理顺行标
	for (i=minCol;i<=t.rows(0).cells.length-1;i++){
		t.rows(0).cells(i).innerText=IntToLbl(i)
	}	
	
	CopytHtml()

	var arr=PhyToLog(sRow,sCol)
	var moveTD=t.rows(arr[0]).cells(arr[1])
	grid.moveedit(moveTD)
	showBlueScale(sRow,sCol,eRow,eCol)

	//从单元属性中将公式及预处理过后的公式装入oFormula中
	LoadAllFormula()
	//强制表格宽高同步
	if(grid.autosize){
		grid.autosize=true
	}
	
	SaveoRedoOneRecord()
	blnChange=true
}
function DelCol(){
	if(grid.ReadOnly) return
	if (tc.style.display =="none" )	return
	//var lngStatus=SelStatus(1,sCol,t.rows.length-1,eCol)
	//alert(lngStatus)
	//if(lngStatus==2 || lngStatus==5 ) return
	SaveoUndoOneRecord()
	var minCol
	if (sCol>eCol)
		minCol=eCol
	else
		minCol=sCol
	//如选择的兰框在最边上,则删除列后不再显示兰框
	if(eCol==t.rows(0).cells.length-1 || sCol==t.rows(0).cells.length-1 ){
		if(minCol==1){
			alert("不能全部删除!")
			return
		}
		
	}
	clearBlueScale()	
	var iCols=Math.abs(eCol-sCol)
	
	
	
	MoveFormula(minCol,-(iCols+1))
	for(var i=0;i<=iCols;i++){
//		grid.DeleteCol(minCol)
//---------列删除
		t.children[0].removeChild(t.children[0].children[minCol])
	//固定行不能删除		
		//if(t.childNodes(0).childNodes.length<=lngFixCols )return

		for (j=0;j<=t.rows.length-1;j++){
//i,minCol单元的坐标换成逻辑坐标找到TD,判断
//如rowspan>1则i=i+rowspan-1,此TD的colspan>1则colspan=colspan-1,
//如果colspan=1则删除此TD
			var arr=PhyToLog(j,minCol)
			var curTD=t.rows(arr[0]).cells(arr[1])
			
			if(curTD.rowSpan==1 && curTD.colSpan==1){
			//	alert(arr[0]+","+arr[1])
				t.rows(arr[0]).deleteCell(arr[1])
			}
			else {
				if(curTD.rowSpan>1){
					j=j+curTD.rowSpan-1
				}
	
				if(curTD.colSpan>1){
					curTD.colSpan=curTD.colSpan-1
				}
				else if(curTD.colSpan==1){
					t.rows(arr[0]).deleteCell(arr[1])
				}
			}

		}
//-----------------

	}
	//理顺行标
	for (i=minCol;i<=t.rows(0).cells.length-1;i++){
		t.rows(0).cells(i).innerText=IntToLbl(i)
	}	
	
	CopytHtml()
	if(tc.style.display=="block"){
		var arr=PhyToLog(sRow,sCol)
		var moveTD=t.rows(arr[0]).cells(arr[1])
		grid.moveedit(moveTD)
		showBlueScale(sRow,sCol,eRow,eCol)
	}
	//从单元属性中将公式及预处理过后的公式装入oFormula中
	LoadAllFormula()
	//强制表格宽高同步
	if(grid.autosize){
		grid.autosize=true
	}
	
	SaveoRedoOneRecord()
	blnChange=true
}

//*****************************************************************************************
//增删行列 end
//*****************************************************************************************



//*****************************************************************************************
//常用函数
//*****************************************************************************************
function IntToLbl(colno)
{//1--->A由索引号取得字母
	var strLbl="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	var inx=parseInt(colno/26)
	if (inx>26)
		return 
	var strPrefix=strLbl.substring(inx-1,inx)
	var strColLbl=strLbl.substring(colno-inx*26-1,colno-inx*26)				
	return strPrefix+strColLbl	
}
function LblToInt(strC){
//A--->1由字母取得索引号,只支持最大长度为2的strS
	var strLbl="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	var inx=strC.length
	var iCol
	if (inx==1)//一个字母
		iCol=strLbl.indexOf(strC)+1
	else//两个字母
	{
		iCol=(strLbl.indexOf(strC.substring(0,1))+1)*26+strLbl.indexOf(strC.substring(1,2))+1
	}	
	return iCol	
}
function TransAto1(strLbl){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -