需求:需要根据客户需求实现导出课程座位表的功能
具体实现在面临的几个问题:
- 第一是功能实现采用的方式,即使用何种组件来实现这个模块。本模块是使用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);
}
//设置