国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種表格模型操作的方法

      文檔序號(hào):6598636閱讀:173來源:國(guó)知局

      專利名稱::一種表格模型操作的方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及表格設(shè)計(jì)技術(shù),特別是指一種表格模型操作的方法。
      背景技術(shù)
      :隨著計(jì)算機(jī)技術(shù)的越來越快的發(fā)展,應(yīng)用軟件也取得了飛速發(fā)展。在數(shù)據(jù)和文本展示方面,表格的作用不言而喻,能清楚明了、直觀地說明情況,省去很多文字說明。在表格應(yīng)用越來越廣泛的背景下,Dreamweaver,Excel,Word等商業(yè)軟件都提供了很強(qiáng)的表格功能。對(duì)于這些軟件中的表格,用戶只能應(yīng)用其功能,很難在軟件開發(fā)中嵌入或定制其功能。不難理解,在各種軟件的開發(fā)中,在視圖層展現(xiàn)業(yè)務(wù)數(shù)據(jù),表格工具是一個(gè)必不可少的模型組件(如表單,報(bào)表中就離不開表格),因此某些領(lǐng)域的軟件開發(fā),不可避免要加入表格開發(fā),根據(jù)業(yè)務(wù)需要開發(fā)和定制適用于相應(yīng)領(lǐng)域的表格功能。但是目前公開的表格開發(fā)的解決方案極少,有的只是提到了一些淺顯的設(shè)計(jì),而有的也只是提出了一點(diǎn)想法,并沒有真正的可以遵循的用來開發(fā)出一個(gè)表格工具的完整方案,就這一點(diǎn)來說,表格開發(fā)模型領(lǐng)域幾乎屬于空白。
      發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種表格模型操作方法,用于實(shí)現(xiàn)對(duì)表格開發(fā)中對(duì)表格模型的操作。為達(dá)到上述目的,本發(fā)明提供了一種表格模型操作方法,包括a、視圖層獲得用戶對(duì)表格模型所展現(xiàn)的表格的操作,及所述操作涉及的表格參數(shù);b、由算法模型層根據(jù)所述操作調(diào)用所述操作對(duì)應(yīng)的算法模型,對(duì)表格模型執(zhí)行對(duì)應(yīng)的算法操作,所述算法操作中使用步驟a所獲得的表格參數(shù);C、視圖層將執(zhí)行所述算法操作后的表格模型進(jìn)行展現(xiàn)。其中,所述表格模型由下述定義用于定義單元格數(shù)量的行數(shù)屬性rowNum、列數(shù)屬性columnNum;用于定義表格外觀的屬性constraint;用于存儲(chǔ)單元格的單元格容器屬性cells、用于存儲(chǔ)行的行容器屬性rows、用于存儲(chǔ)列的列容器屬性columns;用于設(shè)置是否顯示行首的屬性showRowHead、是否顯示列首的屬性showCoIumnHead;所述單元格由下述屬性定義所屬表格的屬性table、用于定義單元格外觀的屬性constraint、跨行數(shù)屬性rowSpan、跨列數(shù)屬性columnSpan、用于設(shè)置單元格顯示狀態(tài)的是否虛格的屬性isWiantom、占據(jù)者屬性holder。其中,步驟a所述操作包括合并單元格;步驟a所述表格參數(shù)包括表示選擇的所有單元格列表參數(shù)selectedList;步驟b所述算法操作包括bal、判斷所述選擇的所有單元格列表的區(qū)域是否為一個(gè)矩形,確定是否允許合并;ba2、若允許合并,則進(jìn)行合并操作,包括將區(qū)域內(nèi)左上角第一個(gè)單元格寬高放大到整個(gè)區(qū)域,跨行數(shù)設(shè)為區(qū)域縱向單元格數(shù),跨列數(shù)為區(qū)域橫向單元格數(shù);其它單元格設(shè)為虛格;ba3、合并后,判斷某行除行首之外其它單元格全部為虛格時(shí),刪除此行;判斷某列除列首之外其它單元格全部為虛格時(shí),刪除此列。其中,判斷所述所有單元格列表的區(qū)域是否為一個(gè)矩形的步驟包括判斷是否滿足等式selectedCellCount=(maxRowId-minRowId+1)X(maxColId-minColId+1);這里,selectedCellCount為所述區(qū)域內(nèi)所有單元格數(shù)量,maxRowId為所選區(qū)域最大行號(hào),minRowId為所選區(qū)域最小行號(hào),maxColId為所選區(qū)域最大列號(hào),minColId為所選區(qū)域最小列號(hào)。由上可以看出,本發(fā)明具有下述有益效果表格元素管理和訪問方式方便傳統(tǒng)表格概念中行包含的單元格與列包含的單元格是重疊的,不僅把單元格既存于行又存于列難以正確表達(dá)表格結(jié)構(gòu),且把單元格存于行,則對(duì)于列的操作需先取得每行,再取得其中位于該列位置的單元格來曲折訪問,極不方便。而本發(fā)明表格模型中將所有單元格存儲(chǔ)于表格的單元格屬性容器中,所有行存儲(chǔ)于行容器,所有列存儲(chǔ)于列容器,單元格和行、列沒有直接關(guān)系,行與列的作用是定位、選擇、遍歷指定范圍內(nèi)的單元格;單元格數(shù)量及排列位置是由數(shù)值型屬性行數(shù)、列數(shù)確定。訪問單元格極為方便。提高了行列操作代碼重用度基于表格元素管理方法和對(duì)行列操作的過程步驟一致性,本發(fā)明采用了線性定位器概念同化行、列操作過程,與分別處理行、列操作方法相比,提高了代碼重用度,提高了開發(fā)效率。合并單元格操作的實(shí)現(xiàn)方法的高效性合并單元格要求所有被選擇的單元格,能組成一個(gè)完整的矩形且所有被選的單元格均在此矩形區(qū)域內(nèi)才允許合并。現(xiàn)有技術(shù)要驗(yàn)證所選區(qū)域是不是矩形會(huì)遍歷所選的所有單元格,逐個(gè)判斷是否兩兩相鄰組成矩形。本發(fā)明避免了復(fù)雜的遍歷判斷,提供一種高效簡(jiǎn)捷的實(shí)現(xiàn)方法。拖動(dòng)單元格邊線改變行高列寬操作的實(shí)現(xiàn)方法降低了問題復(fù)雜度在拖動(dòng)單元格邊線改變行高列寬操作中,如果所有單元格均為原始單元格,則操作行為很簡(jiǎn)單,將涉及到的每個(gè)單元格做同樣變化即可。但實(shí)際操作中要考慮多種情況,如涉及到的單元格是虛格,就要取得其占據(jù)者引用的復(fù)合單元格,要確定所拖動(dòng)的邊線與此復(fù)合單元格位置關(guān)系,才能決定這個(gè)復(fù)合單元格大小是否要改變。位置關(guān)系的確定,需要做許多判斷和比較。本發(fā)明提供一種清淅明了的坐標(biāo)模型算法。省去過多的中間判斷,提高運(yùn)行性能。降低問題復(fù)雜性。解決方案的開發(fā)語言、視層技術(shù)無關(guān)性本發(fā)明表格模型的實(shí)現(xiàn)是與開發(fā)語言、視層技術(shù)關(guān)聯(lián)不緊。理論上采用本發(fā)明的表格模型組織結(jié)構(gòu)和表格操作實(shí)現(xiàn)方法,可以與任何支持表格的視圖層技術(shù)配合使用。采用什么開發(fā)語言及視圖技術(shù)實(shí)現(xiàn),由表格開發(fā)者決定,只需根據(jù)開發(fā)語言、視圖技術(shù)特點(diǎn)做少量調(diào)整即可開發(fā)出表格產(chǎn)品。目前本發(fā)明已經(jīng)使用java語目,Eclipse平臺(tái)GEF(GraphicalEditorFramework)技術(shù)已經(jīng)實(shí)現(xiàn),并且獲得較好的效果,使用上靈活方便,實(shí)用性強(qiáng),從而論證了此種方案的可行性。解決方案的擴(kuò)展性本發(fā)明的著重點(diǎn)是表格展現(xiàn)與表格操作方法實(shí)現(xiàn),而對(duì)表格元素的線條顏色和背景顏色、及表格單元格作為容器放置UI(用戶界面)組件的功能都沒有提及。但基于本發(fā)明的解決方案可以很自然地增加這些屬性和功能。如用選擇行首的方式選擇行,對(duì)行內(nèi)所有單元格的顏色作集體改變;或讓單元格繼承容器特征以添加嵌入U(xiǎn)I組件的功能。圖1為表格模型操作的流程圖。圖2為確定是否為矩形以確定是否可以進(jìn)行合并的流程圖。圖3為執(zhí)行合并操作的流程圖。圖4為拆分單元格算法模型的第一種算法操作流程。圖5為拆分單元格算法模型的第二種算法操作流程。圖6為示出的拖動(dòng)單元格邊線改變行高列寬算法模型的操作流程圖圖7為判斷單元格大小、位置是否發(fā)生變化的流程圖。圖8為插入行/插入列算法模型的操作流程圖。圖9為插入行單元格處理流程圖。圖10為插入列單元格處理流程圖。圖11為刪除行/刪除列算法模型的操作流程圖。圖12為刪除行處理流程圖。圖13為刪除列處理流程圖。圖14為表格繪畫算法模型的操作流程圖。具體實(shí)施例方式本發(fā)明屬表格設(shè)計(jì)類,通過模型與算法,提供一種應(yīng)用抽象的數(shù)學(xué)模型來定位、操作表格中的元素的方法。是一種表格開發(fā)中表格的表示、操作、存儲(chǔ)的實(shí)現(xiàn)方法。表示和存儲(chǔ)即為模型,為日常應(yīng)用中所指的表格元素的表示,如單元格、行、列、行數(shù)、列數(shù)等及內(nèi)在輔助信息的表示。操作的實(shí)現(xiàn)即為算法,包括插入/刪除行、插入/刪除列、合并單元格、拆分單元格、拖動(dòng)單元格邊線改變行高、列寬,以及原子化操作選定、定位單元格;得到單元格所在行、所在列;得到單元格寬高、是否能被合并;得到單元格上下左右的相鄰單元格;得到指定行/列的所有單元格等。通過本發(fā)明可以快速地開發(fā)出功能強(qiáng)大、高性能的表格設(shè)計(jì)器,用以設(shè)計(jì)表單、報(bào)表等。下面對(duì)本發(fā)明原理進(jìn)行介紹本發(fā)明提供了表格模型,通過該表格模型可以建立其對(duì)應(yīng)的表格(模型外觀),當(dāng)用戶操作表格時(shí),相應(yīng)的對(duì)表格模型的操作包括以下步驟a、由視圖層獲得用戶對(duì)表格的操作,及所述操作涉及的表格參數(shù)。具體來說,視圖層用于獲得用戶對(duì)模型外觀即表格的操作,并將操作及相應(yīng)參數(shù)傳給對(duì)應(yīng)的算法模型層。b、由算法模型層根據(jù)所述操作調(diào)用所述操作對(duì)應(yīng)的算法(或稱為對(duì)應(yīng)的業(yè)務(wù)邏輯模型)模型,對(duì)表格模型進(jìn)行對(duì)應(yīng)的算法操作,所述業(yè)務(wù)算法操作中使用步驟a所獲得的表格參數(shù)。其中,后文將對(duì)各個(gè)算法模型、各個(gè)表格模型進(jìn)行詳細(xì)介紹。算法模型是為了簡(jiǎn)化復(fù)雜算法而設(shè)定的虛擬模型。表格模型包括與視圖展現(xiàn)層存在一對(duì)一的映射關(guān)系的表觀模型,如表格、單元格(包括行首、列首和普通單元格),以及不在視圖層產(chǎn)生映射應(yīng)用中又存在的輔助模型,如行、行內(nèi)單元格迭代器、列、列內(nèi)單元格迭代器,輔助模型用于理清各表觀模型間的關(guān)系,及定位、選定線條范圍內(nèi)的單位元素。C、視圖層根據(jù)操作后的表格模型,對(duì)表格模型的外觀進(jìn)行展現(xiàn)。本發(fā)明還相應(yīng)的提供了一種表格模型操作系統(tǒng),包括視圖層,用于獲得用戶對(duì)表格的操作,及所述操作涉及的表格參數(shù);以及根據(jù)操作后的表格模型,對(duì)表格模型進(jìn)行展現(xiàn);算法模型層,用于根據(jù)所述操作調(diào)用所述操作對(duì)應(yīng)的算法模型,對(duì)表格模型進(jìn)行對(duì)應(yīng)的算法操作,所述算法操作中使用步驟a所獲得的表格參數(shù)。表格模型,提供了表格的數(shù)學(xué)描述,定義了表格的不同屬性,后文將詳細(xì)描述。算法模型,用于提供對(duì)表格模型操作的實(shí)現(xiàn)算法,后文將詳細(xì)描述。下面對(duì)本發(fā)明的表格模型、算法模型及算法操作進(jìn)行詳細(xì)說明首先對(duì)本發(fā)明所采用的表格模型(table)進(jìn)行介紹如下表1示出了表格模型的屬性定義,通過該屬性定義可確定表格的位置和大小其屬性描述包括行數(shù)、列數(shù)、外觀、單元格容器、行容器、列容器、顯示行首、顯示列首等,具體如下權(quán)利要求1.一種表格模型操作方法,其特征在于,包括a、視圖層獲得用戶對(duì)表格模型所展現(xiàn)的表格的操作,及所述操作涉及的表格參數(shù);b、由算法模型層根據(jù)所述操作調(diào)用所述操作對(duì)應(yīng)的算法模型,對(duì)表格模型執(zhí)行對(duì)應(yīng)的算法操作,所述算法操作中使用步驟a所獲得的表格參數(shù);c、視圖層將執(zhí)行所述算法操作后的表格模型進(jìn)行展現(xiàn)。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述表格模型由下述定義用于定義單元格數(shù)量的行數(shù)屬性rowNum、列數(shù)屬性columnNum;用于定義表格外觀的屬性constraint;用于存儲(chǔ)單元格的單元格容器屬性cells、用于存儲(chǔ)行的行容器屬性rows、用于存儲(chǔ)列的列容器屬性columns;用于設(shè)置是否顯示行首的屬性showRowHead、是否顯示列首的屬性showColumnHead;所述單元格由下述屬性定義所屬表格的屬性table、用于定義單元格外觀的屬性constraint、跨行數(shù)屬性rowSpan、跨列數(shù)屬性columnSpan、用于設(shè)置單元格顯示狀態(tài)的是否虛格的屬性isPhantom、占據(jù)者屬性holder。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟a所述操作包括合并單元格;步驟a所述表格參數(shù)包括表示選擇的所有單元格列表參數(shù)selectedList;步驟b所述算法操作包括bal、判斷所述選擇的所有單元格列表的區(qū)域是否為一個(gè)矩形,確定是否允許合并;ba2、若允許合并,則進(jìn)行合并操作,包括將區(qū)域內(nèi)左上角第一個(gè)單元格寬高放大到整個(gè)區(qū)域,跨行數(shù)設(shè)為區(qū)域縱向單元格數(shù),跨列數(shù)為區(qū)域橫向單元格數(shù);其它單元格設(shè)為虛格;ba3、合并后,判斷某行除行首之外其它單元格全部為虛格時(shí),刪除此行;判斷某列除列首之外其它單元格全部為虛格時(shí),刪除此列。4.根據(jù)權(quán)利要求3所述的方法,其特征在于,判斷所述所有單元格列表的區(qū)域是否為一個(gè)矩形的步驟包括判斷是否滿足等式selectedCellCount=(maxRowId-minRowId+1)X(maxColId-minColld+l);其中,selectedCellCount為所述區(qū)域內(nèi)所有單元格數(shù)量,maxRowId為所選區(qū)域最大行號(hào),minRowId為所選區(qū)域最小行號(hào),maxColId為所選區(qū)域最大列號(hào),minColId為所選區(qū)域最小列號(hào)。5.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟a所述操作包括拆分單元格;步驟a所述表格參數(shù)包括表示當(dāng)前所選的指定要拆分的單元格參數(shù)currentCell;表示要拆分的行數(shù)n,表示要拆分的列數(shù)m;步驟b所述算法操作包括ΙΛ1、對(duì)于所選單元格是表格構(gòu)建時(shí)的原始單元格將currentCell高度設(shè)為原高度值的1/n取整,寬度設(shè)為原寬度值的1/m取整,設(shè)置循環(huán)插入行、循環(huán)插入列;循環(huán)遍歷新插入行,其間遍歷每行的所有單元格,將列號(hào)不在當(dāng)前列號(hào)至當(dāng)前列號(hào)加m-1之間的單元格設(shè)為虛格,其holder屬性按如下設(shè)置判斷在當(dāng)前行范圍內(nèi)和其列號(hào)相等的單元格為實(shí)格時(shí),holder屬性設(shè)為此實(shí)格,否則設(shè)為此實(shí)格的占據(jù)者,判斷hasChangedCe11s容器不含有此ho1der屬性指向的單元格時(shí),將此ho1der屬性的單元格的跨行數(shù)應(yīng)設(shè)為原跨行數(shù)+n-1;循環(huán)遍歷新插入的列,其間遍歷每列的所有單元格,將行號(hào)不在當(dāng)前行號(hào)至當(dāng)前行號(hào)加n-1之間的單元格均設(shè)為虛格,其holder屬性按如下設(shè)置判斷在當(dāng)前列范圍內(nèi)和其行號(hào)相等的單元格為實(shí)格時(shí),則占據(jù)者設(shè)為此實(shí)格,否則設(shè)為此實(shí)格的占據(jù)者,判斷hasChangedCe11s容器不含有此ho1der屬性指向的單元格時(shí),將此ho1der屬性單元格的跨列數(shù)設(shè)為原跨列數(shù)+m-1;ΙΛ2、對(duì)于所選單元格是復(fù)合單元格設(shè)臨時(shí)變量=IastHeight=當(dāng)前單元格高度-當(dāng)前行行首高度,IastRowSpan=當(dāng)前單元格跨行數(shù)-1,IastWidth=當(dāng)前單元格寬度-當(dāng)前列列首寬度,lastColSpan=當(dāng)前單元格跨列數(shù)-1;當(dāng)IastRowSpan或IastColumnSpan等于O時(shí),按bbl步驟進(jìn)行拆分行或列;當(dāng)IastRowSpan和IastColumnSpan不等于O時(shí),依次循環(huán)遍歷當(dāng)前單元格橫向和縱向所跨所有單元格,對(duì)這些單元格執(zhí)行以下操作均設(shè)為實(shí)格,holder屬性設(shè)為null;判斷如果其所在行不是拆分后這些行的最后一行,高度設(shè)為相對(duì)應(yīng)的行首高度,跨行數(shù)設(shè)為1,且,如果其所在列是當(dāng)前列,則將IastHeight設(shè)為IastHeight減去此高度,將IastRowSpan設(shè)為IastRowSpan減去1;否則高度設(shè)為lastHeight,跨行數(shù)設(shè)為IastRowSpan;判斷如果其所在列不是拆分后這些列的最后一列,寬度設(shè)為相對(duì)應(yīng)的列首寬度,跨列數(shù)設(shè)為1,且,如果其所在行是當(dāng)前行,則將IastWidth設(shè)為IastWidth減去相對(duì)應(yīng)的列首寬度,將lastColSpan設(shè)為lastColSpan減去1;否則寬度設(shè)為lastWidth,跨行數(shù)設(shè)為lastColSpBrio6.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟a所述操作包括拖動(dòng)單元格邊線改變行高列寬;步驟a所述表格參數(shù)包括所選單元格、所拖動(dòng)線是單元格的上、下、左、右哪一條邊線以及拖動(dòng)偏移量;其中邊線參數(shù)名定義為position,其值對(duì)應(yīng)上、下、左、右分別為常量TOP=-1、BOTTOM=1、LEFT=-2、RIGHT=2;拖動(dòng)偏移量參數(shù)名定義為delta,向下、向右拖動(dòng)時(shí),拖動(dòng)delta為正數(shù),向上、向左拖動(dòng)時(shí),delta為負(fù)數(shù);步驟b所述算法操作包括bcl、聲明整型變量Rowld、Columnld,用于把所選單元格行號(hào)賦于Rowld、列號(hào)賦于ColumnId;聲明整型變量celUndex,用于存儲(chǔ)格子坐標(biāo)值;聲明整型變量linehdex,用于存儲(chǔ)所拖動(dòng)線坐標(biāo)值;聲明整型變量span,用于存儲(chǔ)單方向跨格子數(shù);聲明線性定位器lineLocalizer,用于指向所選單元格所在行或所在列;聲明線性定位器toChangeLine,用于指向另一個(gè)需變化的行或列;bc2、當(dāng)position的絕對(duì)值等于1時(shí),根據(jù)所選單元格行號(hào)取得行模型,賦于IineLocalizer;當(dāng)position的絕對(duì)值等于2時(shí),根據(jù)所選單元格列號(hào)取得列模型,賦于IineLocalizer;bc3、判斷position<0時(shí),把IineLocalizer的previous()方法返回的線性定位器弓丨用賦于toChangeLine;判斷positionX)時(shí),把lineLocalizer的next()方法返回的線性定位器引用賦于toChangeLine;bc4、遍歷lineLocalizer、toChangeLine的所有單元格,比較坐標(biāo)判斷哪些單元格外觀有變化;遍歷過程中對(duì)單元格的引用設(shè)為iCell;其包括當(dāng)position的絕對(duì)值等于1時(shí)ceinndex=iCell.getRowIdO,IineIndex=2Xcelllndex+position,span=iCell.getRowSpan();當(dāng)position的絕對(duì)值等于2時(shí),celllndex=iCell.getColumnld(),IineIndex=2XcellIndex+position/2,span=iCell.getCoIumnSpan();判斷indexlndex==2Xce11Index-1成立或indexlndex==2X(celllndex+span-l)+l成立,iCell大小會(huì)變化,按照下述步驟改變單元格外觀遍歷lineLocalizer范圍內(nèi)所有單元格時(shí),如果position絕對(duì)值等于1,改變單元格高度為原高度加deltaXposition,且如果position=_1,改變單元格左上角y值為原值加delta;如果position絕對(duì)值等于2,改變寬度為原寬度加deltaXposition/2,且如果position=-2改變單元格左上角χ值為原值加delta;遍歷toChangeLine范圍內(nèi)所有單元格時(shí),如果position的絕對(duì)值=1,單元格高度為原高度減deltaXposition,且position=1如果改變單元格左上角y值為原值加delta;如果position的絕對(duì)值=2,單元格寬度為原寬度減deltaXposition,且如果position=2,改變單元格左上角χ值為原值加delta。7.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟a所述操作包括插入行/插入列;步驟a所述表格參數(shù)包括表示當(dāng)前所選的單元格參數(shù)currentCell;表示是否為插入行參數(shù)ishsertRow,值為true表示插入行,值為false表示插入列;表示決定在當(dāng)前單元格之前還是之后插入的參數(shù)position,取值為1表示在當(dāng)前單元格之后插入,為-1表示在當(dāng)前單元格之前插入;步驟b所述算法操作包括bdl、聲明線性定位器=CurrentLine和newLine;聲明單元格模型變量currentHolder,用來存放可能即將作為占據(jù)者的單元格;聲明整型變量currentld,用來存放行號(hào)或列號(hào);聲明容器newCells,用于臨時(shí)存放新創(chuàng)建的單元格;聲明容器allCells,用于供刪除過程中存放轉(zhuǎn)移單元格,初始化為空容器;聲明整型變量bandwidth,用于存放當(dāng)前行首高度或當(dāng)前列列首寬度;聲明容器hasChangedCell,用來存放本操作已經(jīng)改變的單元格,防止二次改變,初始化為空容器;bd2、當(dāng)插入行時(shí),isInsertRow為true,取當(dāng)前行行號(hào)賦于currentld,根據(jù)currentld取得當(dāng)前行賦于currentLine,創(chuàng)建新的空行賦于newLine;當(dāng)插入列時(shí),isInsertRow為false,取當(dāng)前列列號(hào)賦于currentld,根據(jù)currentld取得當(dāng)前列賦于currentLine,創(chuàng)建新的空列賦于newLine;bd3、遍歷currentLine的各單元格,遍歷過程中設(shè)各單元格為celllnLine,創(chuàng)建一個(gè)寬高與celUnLine相等,跨行數(shù)、跨列數(shù)均為1的新單元格newCell;bd4,newCell按如下步驟設(shè)置當(dāng)isInsertRow為true時(shí)如果celUnLine為跨列不跨行的單元格,則將newCell跨列數(shù)設(shè)為與celUnLine跨列數(shù)相等,并將newCell賦于currentHolder;如果celUnLine為跨行復(fù)合單元格且hasChangedCells不包含celUnLine,則把eelUnLine跨行數(shù)加1,高度為原高度加bandwidth,并把eelUnLine追加到hasChangedCells;如果celUnLine為虛格,則把newCell同樣設(shè)為虛格,如果其占據(jù)者屬性所指單元格為跨行復(fù)合單元格,newCell占據(jù)者屬性設(shè)為celUnLine占據(jù)者屬性,且如果hasChangedCells不包含celUnLine,則把其占據(jù)者屬性所指單元格跨行數(shù)加1,高度為原高度加bandwidth;如果其占據(jù)者屬性所指單元格為非跨行復(fù)合單元格,newCell占據(jù)者屬性設(shè)為currentHolder;當(dāng)isInsertRow為false時(shí)如果celUnLine為是跨行不跨列的單元格,則將newCell跨行數(shù)設(shè)為與celUnLine跨行數(shù)相等,并將newCell賦于currentHolder;如果celUnLine為跨列復(fù)合單元格且hasChangedCells不包含celUnLine,則把eelUnLine跨列數(shù)加1,寬度為原寬度加bandwidth,并把eelUnLine追加到hasChangedCells;如果celUnLine為虛格,則把newCell同樣設(shè)為虛格,如果其占據(jù)者屬性所指單元格為跨列復(fù)合單元格,newCell占據(jù)者屬性設(shè)為celUnLine占據(jù)者屬性,且如果hasChangedCells不包含celUnLine,則把其占據(jù)者屬性所指單元格跨列數(shù)加1,寬度為原寬度加bandwidth;如果其占據(jù)者屬性所指單元格為非跨列復(fù)合單元格,newCell占據(jù)者屬性設(shè)為currentHolder;bd5、在循環(huán)中依次把newCell加入到newCells;bd6、按如下步驟把所有新創(chuàng)建的單元格加入表格的適當(dāng)位置聲明容器allCells;聲明整型變量n=0,o=0,a=0;改變行數(shù)或列數(shù),并把新行或新列加入到行容器或列容器如果isInsertRow為true,將表格rowNum屬性設(shè)為rowNum+1,將newLine力口入到表格rows屬性的currentld+position位置,否貝Ij,將表格coIumnNum屬性設(shè)為columnNum+1,將newLine加入至丨J表格columns屬性的currentld+position位置;新單元格加入表格cells屬性,且用兩層循環(huán)控制單元格的加入位置外層循環(huán)控制行,用i作循環(huán)變量,初值為0,步長(zhǎng)為1,終止條件為i<rowNum,內(nèi)層循環(huán)控制行內(nèi)單元格,對(duì)應(yīng)各列中的單元格,用j作循環(huán)變量,初值為0,步長(zhǎng)為1,終止條件為j<coIumnNum;在內(nèi)循環(huán)中當(dāng)isInsertRow為true時(shí),如果i==currentId+position,則取得newCells第η個(gè)單元格,追加到allCells,并將η設(shè)為η+1,否則取得表格的cells屬性容器中第0個(gè)單元格,追加到allCells,并將ο設(shè)為o+l;當(dāng)isInsertRow為false時(shí),如果j==currentId+position,則取得newCells第η個(gè)單元格,追加到allCells,并將η設(shè)為η+1,否則取得表格的cells屬性容器中第0個(gè)單元格,追加到allCells,并將ο設(shè)為o+l;循環(huán)結(jié)束后把a(bǔ)llCells容器賦于表格cells屬性,完成把新增單元格加入到表格cells屬性。8.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟a所述操作包括刪除行/刪除列;步驟a所述表格參數(shù)包括表示當(dāng)前所選的單元格參數(shù)currentCell;表示是否為刪除行參數(shù)isDeleteRow,值為true表示刪除行,值為false表示刪除列;步驟b所述算法操作包括bel、聲明線性定位器currentLine,用來指定要?jiǎng)h除的行或列;聲明整型變量currentRowIcUcurrentColumnld,用來存放行號(hào)或列號(hào);聲明容器hasChangedCells,用來存放本操作已經(jīng)改變的單元格,防止二次改變,初始化為空容器;聲明整型變量bandwidth,用來存放當(dāng)前行首高度或當(dāng)前列列首寬度;聲明容器allCells,用來刪除過程中存放轉(zhuǎn)移單元格,初始化為空容器;be2、當(dāng)刪除行時(shí),isInsertRow為true,取當(dāng)前行行號(hào)賦于currentRowId,當(dāng)前列列號(hào)賦于currentColumnld,根據(jù)currentRowId取得當(dāng)前行賦于currentLine;當(dāng)刪除列時(shí),isInsertRow為false取當(dāng)前行行號(hào)賦于currentRowId,當(dāng)前列列號(hào)賦于currentColumnld,根據(jù)currentColumnld取得當(dāng)前列賦于currentLine;be3>mbandwidth置為currentLine.getBandwidth();遍歷currentLine白勺各單兀格,遍歷過程中設(shè)當(dāng)前訪問單元格為celUnLine;當(dāng)isInsertRow為true時(shí)如果eelUnLine為跨行復(fù)合單元格,則取得行號(hào)為currentRowId+Ι,列號(hào)為currentColumnld的單元格,設(shè)此單元格為replaceCell,如果hasChangedCells不包含replaceCell,則將replaceCell做以下改變:isPhantom屬性置為false,rowSpan置為celllnLine的rowSpan-Ι,高度置為celllnLine的高度減去bandwidth;coIumnSpan置為celUnLine的columnSpan,寬度置為celUnLine的寬度,并把realCell追加到hasChangedCells;循環(huán)遍歷行號(hào)大于currentRowId,且小于currentRowId+replaceCell跨行數(shù),列號(hào)大于等于currentColumnld且小于currentColumnld+r印IaceCell跨列數(shù)的所有單元格將它們的占據(jù)者屬性置為r印IaceCell;如果celUnLine為虛格,取得其占據(jù)者屬性指向的單元格,設(shè)為realCell,如果realCell為跨行復(fù)合單元格,且hasChangedCells不包含realCell,則把realCell跨行數(shù)置為原跨行數(shù)減1,高度置為原高度減bandwidth,并把realCell追加到hasChangedCelis;當(dāng)isInsertRow為false時(shí)如果eelUnLine為跨列復(fù)合單元格,則取得行號(hào)為currentRowId,列號(hào)為currentColumnld+l的單元格,設(shè)此單元格為replaceCell,如果hasChangedCells不包含r印laceCell,則將r印IaceCell做以下改變:isPhantom屬性置為false,rowSpan置為celllnLine的rowSpan,高度置為celllnLine的高度;coIumnSpan置為celllnLine的columnSpan-Ι,寬度置為celllnLine的寬度減去bandwidth,并把realCell追加到hasChangedCells;循環(huán)遍歷行號(hào)大于等于currentRowId,且小于currentRowId+r印IaceCell跨行數(shù),列號(hào)大于currentColumnld且小于currentColumnld+r印IaceCell跨列數(shù)的所有單元格將它們的占據(jù)者屬性置為replaceCell;如果celUnLine為虛格,取得其占據(jù)者屬性指向的單元格,設(shè)為realCell,如果realCell為跨列復(fù)合單元格,且hasChangedCells不包含realCell,則把realCell跨列數(shù)置為原跨列數(shù)減1,寬度置為原寬度減bandwidth,并把realCell追加到hasChangedCelis;be4、循環(huán)遍歷結(jié)束后,按照下面步驟把currentLine范圍內(nèi)的單元格刪除用兩層循環(huán)控制單元格刪除哪些單元格外層循環(huán)控制行,用i作循環(huán)變量,初值為0,步長(zhǎng)為1,終止條件為i<rowNum,內(nèi)層循環(huán)控制行內(nèi)單元格,對(duì)應(yīng)各列中的單元格,用j作循環(huán)變量,初值為0,步長(zhǎng)為1,終止條件為j<columnNum;在內(nèi)循環(huán)中當(dāng)isInsertRow為true時(shí),如果i不等于currentRowId,則取得表格的cells屬性容器中第iXcolumnNum+j個(gè)單元格,追加到allCells;當(dāng)ishsertRow為false時(shí),如果j不等于currentColumnld,則取得表格的cells屬性容器中第iXcolumnNum+j個(gè)單元格,追加到allCells;循環(huán)結(jié)束后把a(bǔ)llCells容器賦于表格cells屬性,完成從表格cells屬性刪除currentLine范圍內(nèi)的單元格;改變行數(shù)或列數(shù),并把當(dāng)前行或當(dāng)前列從行容器或列容器中刪除如果ishsertRow為true,將表格rowNum屬性設(shè)為rowNum-Ι,將currentLine從表格rows屬性中刪除,否則,將表格columnNum屬性設(shè)為columnNum—Ι,將currentLine從表格columns屬性中刪除。9.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟b所述算法操作還包括表格繪畫算法模型,包括表格初始化算法子模型用兩層循環(huán)控制行、列、單元格的初始化,外循環(huán)中生成行并加入行容器,循環(huán)變量范圍0<=外循環(huán)變量<表格行數(shù);內(nèi)循環(huán)中,判斷如果是第一行則生成列并加入列容器,循環(huán)變量范圍0<=內(nèi)循環(huán)變量<表格列數(shù);單元格在內(nèi)循環(huán)中生成,單元格左上角坐標(biāo)χ值=(單元格寬度+水平表格邊線間距)X內(nèi)循環(huán)變量+水平表格邊線間距;單元格左上角坐標(biāo)y值=(單元格高度+垂直表格邊線間距)X外循環(huán)變量+垂直表格邊線間距;表格高度=(單元格高度+垂直表格邊線間距)X表格行數(shù)+重直表格邊線間距;表格寬度=(單元格寬度+水平表格邊線間距)X表格列數(shù)+水平表格邊線間距;整個(gè)表格重畫算法子模型重畫之前聲明一個(gè)空容器tc^howCells,用于存放需要顯示的單元格即實(shí)格;先取得第一行,把它賦于row變量引用,設(shè)置循環(huán)遍歷所有行,跳出循環(huán)條件為row.hasNext()為false,在循環(huán)中通過row.createlterator(),遍歷行內(nèi)所有單元格,設(shè)置單元格的大小和位置,如果單元格為實(shí)格則加入到tc^howCells容器;當(dāng)前行遍歷結(jié)束,把row.next()賦于row來訪問下一行的所有單元格,直到row.hasNext()為false結(jié)束編歷;將toSiowCells傳遞給視圖層顯示;部分表格元素重畫算法子模型接收兩個(gè)參數(shù)線性定位器lineLocalizer、一個(gè)移動(dòng)偏移量delta;設(shè)置循環(huán)遍歷IineLocalizer以后的所有線性定位器,用IineLocalizer.hasNext()作為終止循環(huán)條件,在盾環(huán)中設(shè)置IineLocalizer=IineLocalizer.next(),用IineLocalizer.createrIteratorO創(chuàng)建迭代器訪問其范圍內(nèi)所有單元格,判斷如果1ineLocalizer.getDirection()等于0,則單元格左上角坐標(biāo)y值設(shè)為原值加delta,否則單元格左上角坐標(biāo)χ值設(shè)為原值加delta;循環(huán)結(jié)束后,判斷如果lineLocalizer.getDirection()等于0,則表格外觀總高度設(shè)為原值加delta,否則表格外觀總寬度設(shè)為原值加delta。全文摘要本發(fā)明提供了一種表格模型操作方法,包括a、視圖層獲得用戶對(duì)表格模型所展現(xiàn)的表格的操作,及所述操作涉及的表格參數(shù);b、由算法模型層根據(jù)所述操作調(diào)用所述操作對(duì)應(yīng)的算法模型,對(duì)表格模型執(zhí)行對(duì)應(yīng)的算法操作,所述算法操作中使用步驟a所獲得的表格參數(shù);c、視圖層將執(zhí)行所述算法操作后的表格模型進(jìn)行展現(xiàn)。通過本發(fā)明,可以實(shí)現(xiàn)對(duì)表格開發(fā)中對(duì)表格模型的操作。文檔編號(hào)G06F17/24GK102193782SQ20101011581公開日2011年9月21日申請(qǐng)日期2010年3月1日優(yōu)先權(quán)日2010年3月1日發(fā)明者楊文軍,賈培寬申請(qǐng)人:北京中企開源信息技術(shù)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1