Java后段生成文件_Java后端导出Excel

1、技术概述,描述这个技术是做什么?学习该技术的原因,技术的难点在哪里。

1.1技术概述

使用Apache POI实现JAVA后端导出Excel文件。

1.2原因

学习该技术主要是因为,我负责的部分要完成Java后端导出Excel文件到前端,为完成此功能而学习。

1.3难点

我认为该技术的难点在于Apache POI的引用jar包的导入和Excel导出文件格式的设计。

2、技术详述

2.1Apache POI的下载和导入

或者使用Maven仓库管理,在pom文件添加坐标

org.apache.poi

poi

4.0.1

org.apache.poi

poi-ooxml

4.0.1

2.2依赖包

commons-io-2.4.jar

poi-4.0.1.jar

2.3Excel生成工具类代码

package com.example.team.util;

import com.example.team.util.DataVo;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ExcelWriter {

private static List CELL_HEADS; //列头

static {

// 类装载时就载入指定好的列头信息,如有需要,可以考虑做成动态生成的列头

// 这里是我个人使用的类的名称,可以进行修改

CELL_HEADS = new ArrayList<>();

CELL_HEADS.add("用户名");

CELL_HEADS.add("待办集");

CELL_HEADS.add("待办");

CELL_HEADS.add("待办完成情况");

CELL_HEADS.add("待办集完成情况");

}

/**

* 生成Excel并写入数据信息

*

* @param dataList 数据列表

* @return 写入数据后的工作簿对象

*/

public static HSSFWorkbook exportData(List dataList) {

// 生成xlsx的Excel

HSSFWorkbook workbook = new HSSFWorkbook();

// 如需生成xls的Excel,请使用下面的工作簿对象,注意后续输出时文件后缀名也需更改为xls

//Workbook workbook = new HSSFWorkbook();

// 生成Sheet表,写入第一行的列头

Sheet sheet = buildDataSheet(workbook);

//构建每行的数据内容

int rowNum = 1;

for (Iterator it = dataList.iterator(); it.hasNext(); ) {

DataVo data = it.next();

if (data == null) {

continue;

}

//输出行数据

Row row = sheet.createRow(rowNum++);

convertDataToRow(data, row);

}

return workbook;

}

/**

* 生成sheet表,并写入第一行数据(列头)

*

* @param workbook 工作簿对象

* @return 已经写入列头的Sheet

*/

private static Sheet buildDataSheet(Workbook workbook) {

Sheet sheet = workbook.createSheet();

// 设置列头宽度

for (int i = 0; i < CELL_HEADS.size(); i++) {

sheet.setColumnWidth(i, 4000);

}

// 设置默认行高

sheet.setDefaultRowHeight((short) 400);

// 构建头单元格样式

CellStyle cellStyle = buildHeadCellStyle(sheet.getWorkbook());

// 写入第一行各列的数据

Row head = sheet.createRow(0);

for (int i = 0; i < CELL_HEADS.size(); i++) {

Cell cell = head.createCell(i);

cell.setCellValue(CELL_HEADS.get(i));

cell.setCellStyle(cellStyle);

}

return sheet;

}

/**

* 设置第一行列头的样式

*

* @param workbook 工作簿对象

* @return 单元格样式对象

*/

private static CellStyle buildHeadCellStyle(Workbook workbook) {

CellStyle style = workbook.createCellStyle();

//对齐方式设置

style.setAlignment(HorizontalAlignment.CENTER);

//边框颜色和宽度设置

style.setBorderBottom(BorderStyle.THIN);

style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 下边框

style.setBorderLeft(BorderStyle.THIN);

style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); // 左边框

style.setBorderRight(BorderStyle.THIN);

style.setRightBorderColor(IndexedColors.BLACK.getIndex()); // 右边框

style.setBorderTop(BorderStyle.THIN);

style.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 上边框

//设置背景颜色

style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());

style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

//粗体字设置

Font font = workbook.createFont();

font.setBold(true);

style.setFont(font);

return style;

}

/**

* 将数据转换成行

*

* @param data 源数据

* @param row 行对象

* @return

*/

private static void convertDataToRow(DataVo data, Row row) {

int cellNum = 0;

Cell cell;

// 用户名

cell = row.createCell(cellNum++);

if (null != data.getUserName()) {

cell.setCellValue(data.getUserName());

} else {

cell.setCellValue("");

}

// 待办集名

cell = row.createCell(cellNum++);

if (null != data.getSName()) {

cell.setCellValue(data.getSName());

} else {

cell.setCellValue("");

}

// 待办名

cell = row.createCell(cellNum++);

cell.setCellValue(null == data.getName() ? "" : data.getName());

// 待办情况记录(0未完成,1完成)

cell = row.createCell(cellNum++);

if (null != data.getRecord()) {

cell.setCellValue(data.getRecord());

} else {

cell.setCellValue("");

}

// 待办集情况记录(0未完成,1完成)

cell = row.createCell(cellNum++);

if (null != data.getSetRecord()) {

cell.setCellValue(data.getSetRecord());

} else {

cell.setCellValue("");

}

}

}

dataVo类

package com.example.team.util;

/**

* 读取Excel时,封装读取的每一行的数据

*/

public class DataVo {

/**

* 用户名

*/

private String userName;

/**

* 待办名

*/

private String name;

/**

* 待办集名

*/

private String sName;

/**

* 待办情况记录

*/

private String record;

/**

* 待办情况记录

*/

private String setRecord;

/**

* 待办完成度

*/

private String completion;

public String getUserName() { return userName; }

public void setUserName(String userName) { this.userName = userName; }

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSName() {

return sName;

}

public void setSName(String sName) {

this.sName = sName;

}

public String getRecord() {

return record;

}

public void setRecord(String record) {

this.record = record;

}

public String getSetRecord() {

return setRecord;

}

public void setSetRecord(String setRecord) {

this.setRecord = setRecord;

}

public String getCompletion(){

return completion;

}

public void setCompletion(String completion){

this.completion = completion;

}

}

3、技术使用中遇到的问题和解决过程。

1.在技术使用过程中,因为我下载的是较新版本的Apache POI的jar包,导致我从网上找到的工具类和版本不匹配,这导致我需要按这我的版本去修改这个工具类,这样才可以使用。

2.在第一次写好后,使用时发现,excel导出只能导出到本地的文件夹里,不可以进行传输,后面有上网去查找资料,将其改成了HSSFWorkbook的,传递的是数据流,这样就可以将后端的excel打包传到异地的前端。

4、进行总结。

之前没有进行过后端的Excel生成,起初的时候感觉挺难的,但是当我看了网上的其他人写的解析以后,对于Java后端导出Excel有了概念,并且借助于网上热心网友提供的工具类,让我可以更好的借鉴和应用。现在,我将这些东西进行一个总结,在这谢谢那些大佬们的帮助。

5、列出参考文献、参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值