最近項目中維護升級,新增加了個列表展示的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); } } }