需求:需要根据客户需求实现导出课程座位表的功能

具体实现在面临的几个问题:

* 第一是功能实现采用的方式,即使用何种组件来实现这个模块。本模块是使用Apache POI组件来实现。可通过maven的方式导入相关的依赖。
<dependency> <groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId> </dependency> <dependency>
<groupId>org.apache.poi</groupId> <artifactId>ooxml-schemas</artifactId>
<version>1.3</version> </dependency>
*
 第二是开发中表格绘制的问题。表格的居中显示、表格单元格的属性设置、单元格去除边框处理、单元格实现自适应根据传入的内容进行竖排显示(这里存在着一个竖排显示之后单元格水平居中失效的问题)、单元格的合并处理。
* 第三是数据遍历显示,通过for循环简化代码和对相应的不同数据进行不同的效果处理。
 

实现如下:
public class WordUtil { /** * 获取下载路径 * * @param filename 文件名称 */ public String
getAbsoluteFile(String filename) { String downloadPath =
Global.getDownloadPath() + filename; File desc = new File(downloadPath); if
(!desc.getParentFile().exists()) { desc.getParentFile().mkdirs(); } return
downloadPath; } /** * * @param table table * @param row 第几行(从0开始) * @param cell
总列数 * @return */ public static List<XWPFTableCell> getCellList(XWPFTable table,
int row, int cell,int classroomNo,int height,int width) { List<XWPFTableCell>
cellList = new ArrayList<XWPFTableCell>(); for (int i = 0; i < cell; i++) {
XWPFTableRow tableRow = table.getRow(row); XWPFTableCell xcell =
tableRow.getCell(i); CTTc cttc = xcell.getCTTc(); CTTcPr ctPr =
cttc.addNewTcPr(); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); // 设置文字居中
cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
//对第一二行进行去除边框 if (row==0||row==1|| (row==7&&classroomNo==1)||//对一号教室第七排去除边框
(row==5&&classroomNo==1&&i==12)||(row==5&&classroomNo==1&&i==13)||//对一号教室第五第12列座位去除边框
(row==6&&classroomNo==1&&i==13)||(row==6&&classroomNo==1&&i==12)||(row==6&&classroomNo==1&&i==11)||(row==6&&classroomNo==1&&i==10)||
(row==8&&classroomNo==1&&i==13)) { CTTcBorders tblBorders =
ctPr.addNewTcBorders(); tblBorders.addNewLeft().setVal(STBorder.NIL);
tblBorders.addNewRight().setVal(STBorder.NIL);
tblBorders.addNewBottom().setVal(STBorder.NIL);
tblBorders.addNewTop().setVal(STBorder.NIL); } //设置行高
tableRow.setHeight(height); xcell.getVerticalAlignment(); //设置每个单元格的宽度
CTTblWidth cellw = xcell.getCTTc().addNewTcPr().addNewTcW();
cellw.setType(STTblWidth.DXA); cellw.setW(BigInteger.valueOf(width));
cellList.add(xcell); } return cellList; } public static AjaxResult
createWord(int hang,int lie,List<List<String>> datas,int classroomNo,int
height,int width) throws IOException { XWPFDocument word = new XWPFDocument();
String path=Global.getDownloadPath() + "学员选座信息表.docx"; FileOutputStream out =
new FileOutputStream(new File(path));//设置表格存放位置 XWPFTable table =
word.createTable(hang, lie);// 创建一个表格,该表格格式为:9行10列
table.getCTTbl().addNewTblPr().addNewJc().setVal(STJc.CENTER);//设置表格居中显示 for
(int i = 0; i < datas.size(); i++) { List<XWPFTableCell> cellList =
getCellList(table, i, datas.get(i).size(),classroomNo,height,width); for (int j
= 0; j < cellList.size(); j++) { XWPFTableCell cell = cellList.get(j); String
text = datas.get(i).get(j); if(text.length()>0&&i>1) { XWPFRun run =
cell.addParagraph().createRun(); for (int k = 0; k < text.length(); k++) {
run.setText(datas.get(i).get(j).substring(k, k+1)); run.addBreak(); } }else {
cellList.get(j).setText(text); } } } //三楼文明实践 if (classroomNo==1) {
mergeCellsVertically(table, 5, 2, 6); mergeCellsVertically(table, 9, 2, 6);
}else if (classroomNo==2) { mergeCellsVertically(table, 6, 2, 11);
mergeCellsVertically(table, 13, 2, 11); }else if (classroomNo==3) {
mergeCellsVertically(table, 3, 0, 9);//对第四列进行合并(下标都是从0开始)
mergeCellsVertically(table, 7, 0, 9);//对第八列进行合并 } word.write(out); out.close();
return AjaxResult.success(path); } /** * word单元格列合并 * * @param table 表格 *
@param row 合并列所在行 * @param startCell 开始列 * @param endCell 结束列 * @date 2020年4月8日
下午4:43:54 */ public static void mergeCellsHorizontal(XWPFTable table, int row,
int startCell, int endCell) { for (int i = startCell; i <= endCell; i++) {
XWPFTableCell cell = table.getRow(row).getCell(i); if (i == startCell) { // The
first merged cell is set with RESTART merge value
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); } else { //
Cells which join (merge) the first one, are set with CONTINUE
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); } } } /**
* word单元格行合并 * * @param table 表格 * @param col 合并行所在列 * @param fromRow 开始行 *
@param toRow 结束行 * @date 2020年4月8日 下午4:46:18 */ public static void
mergeCellsVertically(XWPFTable table, int col, int startRow, int endRow) { for
(int i = startRow; i <= endRow; i++) { XWPFTableCell cell =
table.getRow(i).getCell(col); if (i == startRow) { // The first merged cell is
set with RESTART merge value
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); } else { //
Cells which join (merge) the first one, are set with CONTINUE
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); } } } }
 
WordUtil util = new WordUtil(); try { List<List<String>> datas=new
ArrayList<List<String>>(); // datas.add(Arrays.asList("", "", "", "", "主", "席",
"台", "", "", "")); // datas.add(Arrays.asList("", "6", "4", "", "2", "1", "5",
"", "6", "7")); // datas.add(Arrays.asList("第一排", "", "", "通道", "", "", "",
"通道", "", "")); // datas.add(Arrays.asList("第二排", "杨威", "万汉龙", "", "", "万汉龙",
"", "", "万汉龙", "万汉龙")); // datas.add(Arrays.asList("第三排", "万汉龙", "万汉龙", "", "",
"万汉龙", "万汉龙", "", "万汉龙", "万汉龙")); // datas.add(Arrays.asList("第四排", "万汉龙",
"万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙")); //
datas.add(Arrays.asList("第五排", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙",
"万汉龙")); // datas.add(Arrays.asList("第六排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙",
"万汉龙", "", "万汉龙", "万汉龙")); // datas.add(Arrays.asList("第七排", "万汉龙", "万汉龙", "",
"万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙")); // datas.add(Arrays.asList("第八排",
"万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙")); //
util.createWord(10,10,datas,3,1220,980); // datas.add(Arrays.asList("", "", "",
"", "", "", "主", "席", "台", "","", "", "", "")); // datas.add(Arrays.asList("",
"10", "8", "6", "4", "", "2", "1", "3", "", "5", "7", "9", "11")); //
datas.add(Arrays.asList("第一排", "", "", "", "", "通道", "", "", "", "通道", "万汉龙",
"万汉龙", "", "万汉龙")); // datas.add(Arrays.asList("第二排", "杨威", "万汉龙", "万汉龙",
"万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙")); //
datas.add(Arrays.asList("第三排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "",
"万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙")); // datas.add(Arrays.asList("第四排",
"万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "",
"")); // datas.add(Arrays.asList("第五排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙",
"", "万汉龙", "万汉龙", "", "", "", "")); // datas.add(Arrays.asList("", "", "", "",
"", "", "", "", "", "", "", "", "", "")); // datas.add(Arrays.asList("第六排",
"万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "",
"")); // util.createWord(9,14,datas,1,1220,980); datas.add(Arrays.asList("",
"", "", "", "", "", "", "主", "", "席","", "台", "", "", "","", "", "", ""));
datas.add(Arrays.asList("", "14", "12", "10", "8", "6", "", "4", "2", "1", "3",
"5", "7", "", "9","11", "13", "15", "17")); datas.add(Arrays.asList("第一排", "",
"", "", "", "", "通道", "", "", "", "万汉龙", "万汉龙", "", "通道", "万汉龙", "万汉龙", "万汉龙",
"", "万汉龙")); datas.add(Arrays.asList("第二排", "杨威", "万汉龙", "万汉龙", "万汉龙", "万汉龙",
"", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙"));
datas.add(Arrays.asList("第三排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "",
"万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙"));
datas.add(Arrays.asList("第四排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "",
"万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙"));
datas.add(Arrays.asList("第五排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "",
"万汉龙", "万汉龙", "", "", "", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙"));
datas.add(Arrays.asList("第六排", "", "", "", "", "", "", "", "", "", "", "", "",
"", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙")); datas.add(Arrays.asList("第七排", "万汉龙",
"万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙",
"万汉龙", "万汉龙", "", "万汉龙")); datas.add(Arrays.asList("第八排", "万汉龙", "万汉龙", "",
"万汉龙", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙",
"万汉龙", "", "万汉龙")); datas.add(Arrays.asList("第九排", "万汉龙", "万汉龙", "", "万汉龙",
"万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "",
"万汉龙")); datas.add(Arrays.asList("第十排", "万汉龙", "万汉龙", "", "万汉龙", "万汉龙", "万汉龙",
"", "万汉龙", "万汉龙", "万汉龙", "万汉龙", "", "", "万汉龙", "万汉龙", "万汉龙", "", "万汉龙"));
util.createWord(12,19,datas,2,220,980); } catch (IOException e) {
e.printStackTrace(); }
 实际的导出效果图如下:

 

 

 

 

技术
©2019-2020 Toolsou All rights reserved,
排序(一)冒泡排序法一文揭秘阿里、腾讯、百度的薪资职级大数据告诉你,中国女人有多累年薪20万属于什么水平?答案让人扎心!面试的时候突然遇到答不上的问题怎么办?SpringBoot实践(五):mybatis-plus中的BaseMapper,Iservice和ServiceImpl这些歌,程序员千万万万万别听!python中解决字典写入列表的问题中台透彻讲解GDOI2019 游记