📄 sheet.js
字号:
// Copyright (c) iRows.com. All rights reserved. Do not copy.var FM=9var FN=20var FO=100var FP=20var FQ=50var FR="ABCDEFGHIJKLMNOPQRSTUVWXYZ"var FS="+-*/^(=:,"var FT=20var FU='tbpop'var initdone=falsevar modelvar winsizevar isReady=falsevar wrapper=nullvar uiidvar F1={row:0,col:0}var FD=[]var F2={maxRow:0,maxCol:0}var viewArea={fromRow:1,fromCol:1}var F3={row:1,col:1}var F5={fromRow:1,fromCol:1,toRow:1,toCol:1}var F4=0var FK=nullvar F6=truevar F7=0var focusMode=nullvar FA=nullvar currFocusFld=nullvar F9=falsevar F8=falsevar FB=nullvar parser=new FormulaParser()var toolbar=new Toolbar()var FF=[]var FFPos=-1var FFMax=0var itemIndex=[]function canPaste(){return FK!=null}function canUndo(){return FFPos>=0}function canRedo(){return FFPos<FFMax-1}function closePop(){toolbar.close()}function doCopyEvent(action){handleCopyPaste(action)}function doInsertEvent(action){handleChart({selected:action})}function getAddDelArea(){var fr=F5.fromRowvar tr=F5.toRowvar fc=F5.fromCol>0?colLabel(F5.fromCol):nullvar tc=F5.toCol>0?colLabel(F5.toCol):nullvar img=F5.imagevar type=nullif(img)type=img.src.indexOf('chartfiles')>=0?'chart':'image'elseif(F5.fromRow!=F5.toRow||F5.fromCol!=F5.toCol||F5.fromRow==0||F5.fromCol==0)type='cells'return{fr:fr,fc:fc,tr:tr,tc:tc,type:type}}function doAddDelEvent(action){handleAddDel({selected:action})}function doExport(action){selectImportExportOption({selected:action})}function doDelSelection(){delSelection()}function B6(vr,vc){return itemIndex['VR'+vr+'C'+vc]}function B7(vr,vc){if(vr<1||vc<1||vr>F2.maxRow||vc>F2.maxCol)return nullreturn itemIndex['VR'+vr+'C'+vc]}function colLabel(c){var cind=c-1if(cind<FR.length)return FR.charAt(cind)var l1=Math.floor(cind / FR.length)-1var l2=cind % FR.lengthreturn FR.charAt(l1)+FR.charAt(l2)}function colWidth(c){return model.getColWidth(c,FO)}function B2(mr,mc){var vr=mr-viewArea.fromRow+1var vc=mc-viewArea.fromCol+1return{row:vr,col:vc}}function B3(vr,vc){var mr=vr+viewArea.fromRow-1var mc=vc+viewArea.fromCol-1return{row:mr,col:mc}}function B1(vr,vc){var y=FT+(FP+1)* vrvar x=FQ+1for(var vci=1;vci<vc;vci++){var mco=B3(1,vci)x+=colWidth(mco.col)+1}var mco=B3(1,vc)var w=colWidth(mco.col)return{x:x,y:y,height:FP,width:w}}function B5(x,y){if(x>=FQ+1&&y>=FT+FP+1){var r=1+Math.floor((y-(FT+FP+1))/(FP+1))var mc=viewArea.fromColvar remw=x-FQ-1while(remw>0){remw-=colWidth(mc)mc++}var c=(mc-viewArea.fromCol)return{type:'cell',row:r,col:c}}if(x<FQ+1&&y>=FT+FP+1){var r=1+Math.floor((y-(FT+FP+1))/(FP+1))return{type:'row',row:r}}if(x>=FQ+1&&y>=FT){var mc=viewArea.fromColvar remw=x-FQ-1while(remw>0){remw-=colWidth(mc)mc++}mc--var cw=colWidth(mc)var rOff=remw+cwif(rOff>FM+2&&rOff<cw-FM-2){var c=(mc-viewArea.fromCol+1)return{type:'col',col:c}}}return null}function modelToScreenCoords(mr,mc){var absy=(FT+FP+1)+(FP+1)*(mr-1)var absx=FQ+1+model.getColsWidth(mc-1,FO,1)var y=absy-(viewArea.fromRow-1)*(FP+1)var x=absx-model.getColsWidth(viewArea.fromCol-1,FO,1)var w=colWidth(mc)return{x:x,y:y,height:FP,width:w,absx:absx,absy:absy}}function screenToModelCoords(x,y){var absy=y-(FT+FP+1)absy+=(viewArea.fromRow-1)*(FP+1)var r=1+Math.floor(absy /(FP+1))var dy=absy %(FP+1)var absx=x-(FQ+1)absx+=model.getColsWidth(viewArea.fromCol-1,FO,1)var dx=absxfor(var c=1;absx>=0;c++){dx=absxabsx-=colWidth(c)+1}c--return{row:r,col:c,dx:dx,dy:dy}}function getPosition(elem){var pos={left:0,top:0}while(elem){if(elem.style.position=='absolute')breakpos.left+=elem.offsetLeftpos.top+=elem.offsetTopelem=elem.offsetParent}return pos}function getPotisionById(id){var item=document.getElementById(id)return getPosition(item)}function B4(fld,start,end){if(fld.setSelectionRange)fld.setSelectionRange(start,end)elseif(fld.createTextRange){var range=fld.createTextRange()range.collapse(true)range.moveEnd('character',start)range.moveStart('character',end)range.select()}}function selFocusFld(){var vco=B2(F3.row,F3.col)var vr=vco.rowvar vc=vco.colvar viewFld=B7(vr,vc)if(viewFld)viewFld.select()}function setWrapper(id,wrpwin){wrapper=wrpwinuiid=id}function addCell(r,c){var nc=document.createElement("input")itemIndex['VR'+r+'C'+c]=ncnc.className='view'nc.style.position='absolute'nc.style.display='none'nc.style.width=FO+'px'nc.style.height=FP+'px'nc.setAttribute("AutoComplete","off")nc.onfocus=function(){B9(r,c,true)}nc.onblur=function(){B8()}nc.onmousedown=function(event){return C1(event,r,c)}nc.onkeydown=function(event){return C2(event)}nc.onkeyup=function(event){return C3(event)}document.getElementsByTagName("body").item(0).appendChild(nc)}function C4(r){var nh=document.createElement("span")itemIndex['HR'+r]=nhnh.className='cellhead'nh.style.position='absolute'nh.style.display='none'nh.style.width=FQ+'px'nh.style.height=FP+'px'nh.style.left='0px'nh.style.textAlign='center'nh.style.verticalAlign='middle'nh.style.zIndex='99'nh.unselectable="on"document.getElementsByTagName("body").item(0).appendChild(nh)var headText=document.createTextNode("")nh.appendChild(headText)itemIndex['HRT'+r]=headTextreturn nh}function C5(c){var nh=document.createElement("span")itemIndex['HC'+c]=nhnh.className='cellhead'nh.style.position='absolute'nh.style.display='none'nh.style.height=FP+'px'nh.style.top=FT+'px'nh.style.textAlign='center'nh.style.verticalAlign='middle'nh.style.zIndex='99'nh.unselectable="on"document.getElementsByTagName("body").item(0).appendChild(nh)var headText=document.createTextNode("")nh.appendChild(headText)itemIndex['HCT'+c]=headTextvar rszh=document.createElement("img")rszh.setAttribute('src','image/widthhandle.png')rszh.setAttribute('width','20')rszh.setAttribute('height','18')rszh.unselectable="on"rszh.id='RC'+crszh.style.position='absolute'rszh.style.display='none'rszh.style.height='18px'rszh.style.width='20px'rszh.style.top=FT+'px'rszh.style.zIndex='100'rszh.style.cursor='e-resize'document.getElementsByTagName("body").item(0).appendChild(rszh)itemIndex['RC'+c]=rszhreturn nh}function FI(maxRow,maxCol){if(maxRow<=F1.row&&maxCol<=F1.col)returnvar xr=Math.max(maxRow+2,F1.row)var xc=Math.max(maxCol+2,F1.row)for(var r=F1.row+1;r<=xr;r++){C4(r)for(var c=1;c<=xc;c++){addCell(r,c)}}for(var r=1;r<=F1.row;r++){for(var c=F1.col+1;c<=xc;c++){addCell(r,c)}}for(var c=F1.col+1;c<=xc;c++)C5(c)F1={row:xr,col:xc}}function init(w,h,initCmds,ownerId){winsize={width:w,height:h}model=new Model()model.setOwner(ownerId)model.init(initCmds)model.resetLastModified()var topleft=C4(0)topleft.style.top=FT+'px'topleft.style.left='0px'topleft.style.display='block'rebuildSheet()document.getElementById("loading").style.display="none"setTimeout("checkModelChanges()",1000)toolbar.setWinSize(winsize)initdone=true}function resize(w,h){winsize={width:w,height:h}toolbar.setWinSize(winsize)rebuildSheet()}function C6(viewFld,cellAttrs){if(viewFld){viewFld.className='view'var value=nullvar align='left'var color=''var bgcolor=''var textDecoration=''var fontWeight=''var fontStyle=''if(cellAttrs){value=cellAttrs.formattedValueif(value==null)value=cellAttrs.valueif(value==null)value=cellAttrs.textif(value==null)value=''if(cellAttrs.type=="pending")value="# wait ... #"if(cellAttrs.bgcolor)bgcolor=cellAttrs.bgcolorif(cellAttrs.align)align=cellAttrs.alignelseif(cellAttrs.type=='number')align='right'elseif(cellAttrs.type=='boolean')align='center'if(cellAttrs.formattedColor)color=cellAttrs.formattedColorelseif(cellAttrs.color)color=cellAttrs.colorelseif(cellAttrs.formulaErrorType)color='red'if(cellAttrs.style){if(cellAttrs.style.indexOf('u')>=0)textDecoration='underline'if(cellAttrs.style.indexOf('s')>=0)textDecoration='line-through'if(cellAttrs.style.indexOf('b')>=0)fontWeight='bold'if(cellAttrs.style.indexOf('i')>=0)fontStyle='italic'}}viewFld.style.textAlign=alignviewFld.value=valueviewFld.style.color=colorviewFld.style.backgroundColor=bgcolorviewFld.style.border="1px solid "+(bgcolor==''?'white':bgcolor)viewFld.style.textDecoration=textDecorationviewFld.style.fontWeight=fontWeightviewFld.style.fontStyle=fontStyle}}function rebuildSheet(){var cols=Math.ceil(2 * winsize.width / FO)var rows=Math.ceil(winsize.height / FP)FI(rows,cols)C7()buildImages()C8(true)}function C7(){for(var r=1;r<=F1.row;r++){for(var c=1;c<=F1.col;c++){var fld=itemIndex['VR'+r+'C'+c]fld.value=''fld.style.textAlign=''fld.style.color=''fld.style.backgroundColor=''fld.style.border=''fld.style.textDecoration=''fld.style.fontWeight=''fld.style.fontStyle=''}}}function C8(FJ){if(FJ){var colX=[]var colW=[]var x=FQ+1var mc=viewArea.fromCol-1var vc=0while(x<=winsize.width){mc++vc++colX[vc]=xvar w=colWidth(mc)colW[vc]=wx+=w+1}var visCols=vcvar visRows=Math.ceil((winsize.height-FT-FP-1)/(1+FP))FI(visRows,visCols)for(var r=Math.min(F2.maxRow,visRows)+1;r<=Math.max(F2.maxRow,visRows);r++){var rowHead=itemIndex['HR'+r]rowHead.style.display=(r<=visRows)?'block':'none'for(var c=1;c<=Math.max(F2.maxCol,visCols);c++){var cell=B6(r,c)cell.style.display=(r<=visRows&&c<=visCols)?'block':'none'}}for(var c=Math.min(F2.maxCol,visCols)+1;c<=Math.max(F2.maxCol,visCols);c++){var colHead=itemIndex['HC'+c]colHead.style.display=(c<=visCols)?'block':'none'var colResizer=itemIndex['RC'+c]colResizer.style.display=(c<=visCols)?'block':'none'for(var r=1;r<=Math.min(F2.maxRow,visRows);r++){var cell=B6(r,c)cell.style.display=(r<=visRows&&c<=visCols)?'block':'none'}}F2={maxRow:visRows,maxCol:visCols}var y=FT+FP+1for(var r=1;r<=visRows;r++){var rowhead=itemIndex['HR'+r]rowhead.style.top=y+'px'y+=FP+1}var resizeDragMaxX=winsize.width-FMfor(var c=1;c<=visCols;c++){var colhead=itemIndex['HC'+c]colhead.style.left=colX[c]+'px'colhead.style.width=colW[c]+'px'var colheadtext=itemIndex['HCT'+c]var mc=c+viewArea.fromCol-1colheadtext.nodeValue=colLabel(mc)var colResizer=itemIndex['RC'+c]colResizer.style.left=colX[c]+colW[c]-FMvar fromX=colX[c]+FNDrag.init(colResizer,null,fromX,resizeDragMaxX,FT,FT)colResizer.onDrag=function(x,y){C9(x,y)}colResizer.onDragStart=function(x,y){C9Start(this,x,y)}colResizer.onDragEnd=function(x,y){C9End(x,y)}var y=FT+FP+1for(var r=1;r<=visRows;r++){var cell=B6(r,c)cell.style.top=y+'px'cell.style.left=colX[c]+'px'cell.style.width=colW[c]+'px'cell.style.display='block'y+=FP+1}}D6H()}D1()setCopyHandle()}function D1(){for(var vr=1;vr<=F2.maxRow;vr++){var rowhead=itemIndex['HRT'+vr]var mr=vr+viewArea.fromRow-1rowhead.nodeValue=mr}for(var vr=1;vr<=F2.maxRow;vr++){for(var vc=1;vc<=F2.maxCol;vc++){var mco=B3(vr,vc)var cellAttrs=model.getCellAttrs(mco.row,mco.col)var viewFld=B7(vr,vc)C6(viewFld,cellAttrs)}}drawImages()doRestoreFocus()markSelection()D6V()setTimeout('window.scrollTo(0,0)',10)setTimeout('window.scrollTo(0,0)',100)setTimeout('drawImages()',10)}function doRestoreFocus(){var vco=B2(F3.row,F3.col)var vr=vco.rowvar vc=vco.colvar viewFld=B7(vr,vc)if(viewFld){B9(vr,vc,false)if(F6){var ex=parseInt(viewFld.style.left)+parseInt(viewFld.style.width)var ey=parseInt(viewFld.style.top)+parseInt(viewFld.style.height)if(ex<winsize.width&&ey<=winsize.height){viewFld.focus()viewFld.select()}}}F6=false}function drawImages(){var images=model.getImages()for(var imi=0;imi<images.length;imi++){var imo=images[imi]var img=imo.imgimg.style.display='block'var r=imo.rowvar c=imo.colvar wco=modelToScreenCoords(r,c)var x=wco.x+imo.offXvar y=wco.y+imo.offYimg.style.top=y+'px'img.style.left=x+'px'var cliptop=(FT+FP+1)-yvar clipleft=(FQ+1)-xif(cliptop<=0&&clipleft<=0)img.style.clip='rect(auto auto auto auto)'elseimg.style.clip='rect('+(cliptop<=0?'auto':cliptop+'px')+' auto auto '+(clipleft<=0?'auto':clipleft+'px')+')'Drag.init(img,null,wco.x-wco.absx+FQ+1,winsize.width,wco.y-wco.absy+FT+FP+1,winsize.height)img.onDrag=function(x,y){imgDrag(this,x,y)}img.onDragEnd=function(x,y){imgDragEnd(this,x,y)}}setChartResize(F5.image)}function B9(vr,vc,isReal){toolbar.close()if(focusMode=='ignore'){focusMode=nullcloseErrors()return}if(new Date().getTime()<F7){var vco=B2(F3.row,F3.col)var viewFld=B7(vco.row,vco.col)if(viewFld){F7=0focusMode='ignore'viewFld.focus()closeErrors()B4(viewFld,viewFld.value.length,viewFld.value.length)}return}var prevFocusRow=F3.rowvar prevFocusCol=F3.colvar ovco=B2(prevFocusRow,prevFocusCol)var viewFld=B7(ovco.row,ovco.col)if(!F9){D4()}var attrs=model.getCellAttrs(prevFocusRow,prevFocusCol)C6(viewFld,attrs)var mco=B3(vr,vc)var mr=mco.rowvar mc=mco.colvar modelCell=model.getCell(mr,mc)var viewFld=B7(vr,vc)if(viewFld){if(mr==prevFocusRow&&mc==prevFocusCol){}else{D5(mr,mc)}viewFld.value=modelCell?modelCell.text:''D3(viewFld.value)viewFld.className='edit'viewFld.style.border='1px solid black'viewFld.style.backgroundColor=''viewFld.style.color=''if(viewFld.value.length>0&&viewFld.value.charAt(0)=='=')viewFld.style.textAlign='left'viewFld.style.color=''viewFld.style.textDecoration=''viewFld.style.fontWeight=''viewFld.style.fontStyle=''if(modelCell&&modelCell.formulaErrorType)D4()if(isReal){viewFld.select()currFocusFld=viewFldvar scrollDir=''var rightNeighbour=B7(vr,vc+1)if(!rightNeighbour)scrollDir+='r'var bottomNeighbour=B7(vr+1,vc)if(!bottomNeighbour)scrollDir+='d'if(scrollDir!=''){F6=truescroll(scrollDir,1)}}}}function B8(){currFocusFld=nullD4()}function D2(){var vco=B2(F3.row,F3.col)var vr=vco.rowvar vc=vco.colvar viewFld=B7(vr,vc)if(viewFld){D4()viewFld.blur()}}function D3(formula){if(FB!=null){for(var i=0;i<FB.length;i++){var range=FB[i]for(mr=range.startRow;mr<=range.endRow;mr++){for(mc=range.startCol;mc<=range.endCol;mc++){var vco=B2(mr,mc)var ve=B7(vco.row,vco.col)if(ve){var bgcolor=''var cell=model.getCellAttrs(mr,mc)if(cell&&cell.bgcolor)bgcolor=cell.bgcolorve.style.border="1px solid "+(bgcolor==''?'white':bgcolor)}}}}}var newRefs=nullif(formula.length>2&&formula.charAt(0)=='='){newRefs=parser.getReferencedCells(formula.substring(1))if(newRefs!=null){for(var i=0;i<newRefs.length;i++){var range=newRefs[i]for(mr=range.startRow;mr<=range.endRow;mr++){for(mc=range.startCol;mc<=range.endCol;mc++){var vco=B2(mr,mc)var ve=B7(vco.row,vco.col)if(ve)ve.style.border="1px dashed blue"}}}}}FB=newRefs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -