Android JWord生成複雜表格(單元格合併)

最近項目中維護升級,新增加了個列表展示的CRUD功能,簡單給大家描述下:木材的砍伐來計算不同樹種的材積值(也就是總體積)進行數據展示。

大體是這樣的表格顯示(還有幾個更簡單的表格不在此列出),其中中間g1-gn是根據添加頁面設置的組別數進行動態顯示的,如果當前有8組中央段面積,那麼就是g1-g8,如果有兩組數據(這裏是數據2組,不是中央段面積2組)其中一條數據的中央段面積有2組,另一條有6組,那麼這裏就會顯示G1-G8,而第一組數據只會在G1,G2時候有值,其他爲空內容。

簡單介紹了下需求,好了真正的需求來了,要求導出這個表格到word,並使用Jword。起初我我是以這個設計圖的設計表格導出的,在寫這個表格前,我再三跟產品經理確認是否要這樣做,告訴了他這樣會導致g1-gn如果很多就會換行或者不顯示的問題(前提是A4紙張大小邊距固定參數,字體大小都是固定好的大小),沒辦法比較人家是爺,人家說就這麼做。呵呵,做好後給他看他卻說這樣還是不好看要我豎着放,沒辦法,又從新改了。

我先給大家看下成品效果 (第一張是三條數據的,第二三張是6條數據的)

  • 不廢話了直接上代碼
  •     private void setCenterTable(int maxTableWidth, String[] header, int[] tableNewWidth, CenterWoodWordEntity centerWoodWordEntity, int maxWidth, List<String> titles2, int count) {
            {
                //先設置前三行 格式固定
                Table table = new Table(StandardBorderStyle.SINGLE_LINE);
                table.setAlignment(HorizontalAlignmentType.CENTER);
                int fristIndex = count * 5;
                for (int i = 0; i < 3; i++) {//前三行
                    Row row = new Row();
                    row.setHeight(new RowHeight(HeightRule.NONE, mRowHeight));
    //                for (int j = 0; j < maxTableWidth - 1; j++) {//橫向最大值
    
                    for (int j = count * 5; j < count * 5 + 5; j++) {//橫向最大值
                        if (j == fristIndex) {
                            Run run = new Run(header[i]);
                            run.setStyleName("tabtextname_min");
                            run.setTextScale(78);
                            Paragraph paragraph = new Paragraph();
                            paragraph.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                            paragraph.add(run);
                            Cell cell = new Cell();
                            cell.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[0] + tableNewWidth[1]));
                            cell.setVerticalAlignment(VerticalAlignmentType.CENTER);
                            cell.setGridSpan(2);
                            cell.add(paragraph);
                            row.add(cell);
                        } else {
                            if (j - count - 1 < centerWoodInfoList.size()) {
                                Run run2 = new Run(centerWoodWordEntity.getDataList().get(i).get(j - count - 1));
                                run2.setStyleName("tabtextname_min");
                                run2.setTextScale(78);
                                Paragraph paragraph2 = new Paragraph();
                                paragraph2.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                                paragraph2.add(run2);
                                Cell cell2 = new Cell();
                                cell2.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[2]));
                                cell2.setVerticalAlignment(VerticalAlignmentType.CENTER);
                                cell2.add(paragraph2);
                                row.add(cell2);
                            } else {
                                Run run2 = new Run();
                                run2.setStyleName("tabtextname_min");
                                run2.setTextScale(78);
                                Paragraph paragraph2 = new Paragraph();
                                paragraph2.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                                paragraph2.add(run2);
                                Cell cell2 = new Cell();
                                cell2.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[2]));
                                cell2.setVerticalAlignment(VerticalAlignmentType.CENTER);
                                cell2.add(paragraph2);
                                row.add(cell2);
                            }
                        }
                    }
                    table.add(row);
                }
                //循環中央段的行
                VerticallyMergedCell verticallyMergedCell = new VerticallyMergedCell(MergeCellType.RESTART);
                for (int i = 0; i < maxWidth; i++) {
                    Row row = new Row();
                    row.setHeight(new RowHeight(HeightRule.NONE, mRowHeight));
    //                for (int j = 0; j < maxTableWidth; j++) {//橫向最大值
                    for (int j = count * 6; j < count * 6 + 6; j++) {//橫向最大值
                        if (j == count * 6) {
                            Run run = new Run(header[3]);
                            run.setStyleName("tabtextname_min");
                            run.setTextScale(78);
                            Paragraph paragraph = new Paragraph();
                            paragraph.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                            paragraph.add(run);
                            Cell cell = new Cell();
                            cell.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[0]));
                            cell.setVerticalAlignment(VerticalAlignmentType.CENTER);
                            if (i == 0) {
                                cell.setVerticallyMergedCell(verticallyMergedCell);
                            } else {
                                cell.setVerticallyMergedCell(new VerticallyMergedCell());
                            }
                            cell.add(paragraph);
                            row.add(cell);
                        } else if (j == count * 6 + 1) {
                            Run run1 = new Run(titles2.get(i + 3));
                            run1.setStyleName("tabtextname_min");
                            run1.setTextScale(78);
                            Paragraph paragraph1 = new Paragraph();
                            paragraph1.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                            paragraph1.add(run1);
                            Cell cell1 = new Cell();
                            cell1.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[1]));
                            cell1.setVerticalAlignment(VerticalAlignmentType.CENTER);
    //                            cell1.setVerticallyMergedCell(new VerticallyMergedCell());
                            cell1.add(paragraph1);
                            row.add(cell1);
                        } else {
                            if (j - (count + 1) * 2 < centerWoodInfoList.size()) {
                                Run run2 = new Run(centerWoodWordEntity.getZydmj().get("" + i).get(j - (count + 1) * 2));
                                run2.setStyleName("tabtextname_min");
                                run2.setTextScale(78);
                                Paragraph paragraph2 = new Paragraph();
                                paragraph2.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                                paragraph2.add(run2);
                                Cell cell2 = new Cell();
                                cell2.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[2]));
                                cell2.setVerticalAlignment(VerticalAlignmentType.CENTER);
                                cell2.add(paragraph2);
                                row.add(cell2);
                            } else {
                                Run run2 = new Run();
                                run2.setStyleName("tabtextname_min");
                                run2.setTextScale(78);
                                Paragraph paragraph2 = new Paragraph();
                                paragraph2.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                                paragraph2.add(run2);
                                Cell cell2 = new Cell();
                                cell2.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[2]));
                                cell2.setVerticalAlignment(VerticalAlignmentType.CENTER);
                                cell2.add(paragraph2);
                                row.add(cell2);
                            }
                        }
                    }
                    table.add(row);
                }
                //後面表格 分段長度-材積
                for (int i = 0; i < 6; i++) {
                    Row row = new Row();
                    row.setHeight(new RowHeight(HeightRule.NONE, mRowHeight));
    //                for (int j = 0; j < maxTableWidth - 1; j++) {
                    for (int j = count * 5; j < count * 5 + 5; j++) {//橫向最大值
                        if (j == fristIndex) {
                            Run run = new Run(header[3 + 1 + i]);
                            run.setStyleName("tabtextname_min");
                            run.setTextScale(78);
                            Paragraph paragraph = new Paragraph();
                            paragraph.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                            paragraph.add(run);
                            Cell cell = new Cell();
                            cell.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[0] + tableNewWidth[1]));
                            cell.setVerticalAlignment(VerticalAlignmentType.CENTER);
                            cell.setGridSpan(2);
                            cell.add(paragraph);
                            row.add(cell);
                        } else {
                            if (j - count - 1 < centerWoodInfoList.size()) {
                                Run run2 = new Run(centerWoodWordEntity.getDataList().get(3 + i).get(j - count - 1));
                                run2.setStyleName("tabtextname_min");
                                run2.setTextScale(78);
                                Paragraph paragraph2 = new Paragraph();
                                paragraph2.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                                paragraph2.add(run2);
                                Cell cell2 = new Cell();
                                cell2.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[2]));
                                cell2.setVerticalAlignment(VerticalAlignmentType.CENTER);
                                cell2.add(paragraph2);
                                row.add(cell2);
                            } else {
                                Run run2 = new Run();
                                run2.setStyleName("tabtextname_min");
                                run2.setTextScale(78);
                                Paragraph paragraph2 = new Paragraph();
                                paragraph2.setHorizontalTextAlignment(HorizontalAlignmentType.CENTER);
                                paragraph2.add(run2);
                                Cell cell2 = new Cell();
                                cell2.setWidth(new Width(TableWidthUnit.POINT, tableNewWidth[2]));
                                cell2.setVerticalAlignment(VerticalAlignmentType.CENTER);
                                cell2.add(paragraph2);
                                row.add(cell2);
                            }
                        }
                    }
                    table.add(row);
                }
                TableGrid tableGrid = new TableGrid();
                for (int i = 0; i < maxTableWidth; i++) {
                    switch (i) {
                        case 0:
                            tableGrid.getColumns().add(new TableGridColumn(tableNewWidth[0]));
                            break;
                        case 1:
                            tableGrid.getColumns().add(new TableGridColumn(tableNewWidth[1]));
                            break;
                        default:
                            tableGrid.getColumns().add(new TableGridColumn(tableNewWidth[2]));
                            break;
                    }
    
                }
                table.setGrid(tableGrid);
                doc.getBody().add(table);
                for (int i = 0; i < 5; i++) {
                    Paragraph paragraph = getParagraphBoth();
                    Run runN = new Run();
                    runN.setStyleName("biluname");
                    runN.addText(" ");
                    paragraph.add(runN);
                    doc.getBody().add(paragraph);
                }
    
            }
        }
發佈了3 篇原創文章 · 獲贊 2 · 訪問量 640
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章