1、导入依赖
<!--使用POI读取文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--text-->
<dependency>
<groupId>org.eclipse.birt.runtime.3_7_1</groupId>
<artifactId>com.lowagie.text</artifactId>
<version>2.1.7</version>
</dependency>
2、设计所需要导出数据的表结构
?3、编写对应表的实体类
我这里ProBaseEntity是公司框架的接口,可以不需要继承
/**
* TbHkhb:航空航班表
* @author zyw
* @since 2022-03-18 10:31:24
*/
@Data
@ApiModel(value="航空航班表,对应表tb_hkhb",description="适用于新增和修改页面传参")
public class TbHkhb extends ProBaseEntity<TbHkhb> {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ApiModelProperty(value="id")
private String id;
/**
* 航班时间
*/
@ApiModelProperty(value="航班时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private java.util.Date hbsj;
/**
* 出发地点
*/
@ApiModelProperty(value="出发地点")
private String cfdd;
/**
* 终点站
*/
@ApiModelProperty(value="终点站")
private String zdz;
/**
* 航班号
*/
@ApiModelProperty(value="航班号")
private String hbh;
/**
* 航空公司
*/
@ApiModelProperty(value="航空公司")
private String hkgs;
/**
* 乘客数量
*/
@ApiModelProperty(value="乘客数量")
private String cksl;
/**
* 座位数量
*/
@ApiModelProperty(value="座位数量")
private String zwsl;
}
4、编写导出word的业务逻辑
-
创建word文档 步骤:
1,建立文档
2,创建一个书写器
3,打开文档
4,向文档中写入数据
5,关闭文档
这里参数
public String createDocument(String path)
?path是指所需要导出的文件路径,可以在前段让用户选择想要导出的位置
/**
* 创建word文档 步骤:
* 1,建立文档
* 2,创建一个书写器
* 3,打开文档
* 4,向文档中写入数据
* 5,关闭文档
*/
/**
* @方法名称: createDocument
* @实现功能: 导出航空航班表Word文件 TODO: 方法入参根据页面对象设置
* @return java.lang.String
* @create by zyw at 2022-03-22 14:46:31
**/
public String createDocument(String path) {
// 创建word文档,并设置纸张的大小
Document document = new Document(PageSize.A4);
try {
RtfWriter2.getInstance(document,
new FileOutputStream(path+"/航班数据采集表.doc"));
document.open();
//设置合同头
Paragraph ph = new Paragraph();
Font f = new Font();
Paragraph p = new Paragraph("航班数据采集表",
new Font(Font.NORMAL, 18, Font.BOLDITALIC, new Color(0, 0, 0)));
p.setAlignment(1);
document.add(p);
ph.setFont(f);
// 设置中文字体
BaseFont bfFont =
BaseFont.createFont("STSongStd-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font chinaFont = new Font();
/*
* 创建表格
*/
Table table = new Table(7);
table.setBorderWidth(1);
table.setBorderColor(Color.BLACK);
table.setPadding(0);
table.setSpacing(0);
// 表格的主体
table.addCell("航班时间");
table.addCell("出发地点");
table.addCell("终点站");
table.addCell("航班号");
table.addCell("航空公司");
table.addCell("乘客数量");
table.addCell("座位数量");
TbHkhb tbHkhb = new TbHkhb();
List<TbHkhb> list = dao.findList(tbHkhb);
for (int i = 0; i < list.size(); i++) {
table.addCell(new Paragraph(simpleDateFormat.format(list.get(i).getHbsj())));
table.addCell(new Paragraph(list.get(i).getCfdd()));
table.addCell(new Paragraph(list.get(i).getZdz()));
table.addCell(new Paragraph(list.get(i).getHbh()));
table.addCell(new Paragraph(list.get(i).getHkgs()));
table.addCell(new Paragraph(list.get(i).getCksl()));
table.addCell(new Paragraph(list.get(i).getZwsl()));
}
document.add(table);
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
try {
throw new Exception("另一个程序正在使用此文件,进程无法访问。");
} catch (Exception ex) {
ex.printStackTrace();
return "另一个程序正在使用此文件,进程无法访问。";
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (com.itextpdf.text.DocumentException e) {
e.printStackTrace();
}
return "Word文件生成成功...";
}
5、编写调用接口的控制层
/**
* @方法名称: createDocument
* @实现功能: 导出航空航班表Word文件 TODO: 方法入参根据页面对象设置
* @return java.lang.String
* @create by zyw at 2022-03-22 14:49:31
**/
@ApiOperation(value="导出值班值守表Word文件",notes="返回Word文件",response = String.class)
@PostMapping(value = "/createDocument")
public String createDocument(@RequestParam @ApiParam(name="path",value="导出路径",required=true)String path){
try {
return buildResultStr(buildSuccessResultData(service.createDocument(path)));
}catch (RuntimeException e){
logError(log, e);
return buildResultStr(buildErrorResultData(e));
}
}
6、效果图
数据库:
?导出后的Word文档:
?
|