java导出excel 图片_Java导出Excel

这是一个Java实现的Excel工具类,包含导出Excel的方法,支持设置标题和内容,支持多种数据格式输入。同时提供了读取Excel数据的方法,能读取简单的行列数据并返回List<Map<String, Object>>结构的数据。

packagecom.example.demo.utils;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;importorg.apache.poi.hssf.usermodel.HSSFCell;importorg.apache.poi.hssf.usermodel.HSSFCellStyle;importorg.apache.poi.hssf.usermodel.HSSFRow;importorg.apache.poi.hssf.usermodel.HSSFSheet;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;/***@author谢辉

* @Classname XiehExcelUtil

* @Description TODO

* @Date 2020/12/9 18:34*/

public classExcelUtilX {/*** 导出Excel

*

*@paramsheetName sheet名称

*@paramtitle 标题

*@paramdata 内容

*@paramwb Workbook对象:

* 如果是.xls文件的请传入HSSFWorkbook对象类型

* 如果是.xlsx文件的请传入XSSFWorkbook对象类型

* 默认使用HSSFWorkbook对象类型

*@return

*/

public staticWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] data, Workbook wb) {//第一步,创建一个HSSFWorkbook,对应一个Excel文件

if (wb == null) {//默认使用兼容.xls文件的

wb = newHSSFWorkbook();

}//第二步,在workbook中添加一个sheet,对应Excel文件中的sheet

Sheet sheet =wb.createSheet(sheetName);//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制

Row row = sheet.createRow(0);//第四步,创建单元格,并设置值表头 设置表头居中

CellStyle style =wb.createCellStyle();//水平居中

style.setAlignment(HorizontalAlignment.CENTER);//垂直居中//style.setVerticalAlignment(VerticalAlignment.CENTER);//声明列对象

Cell cell = null;//创建标题

for (int i = 0; i < title.length; i++) {

cell=row.createCell(i);

cell.setCellValue(title[i]);

cell.setCellStyle(style);

}//创建内容

for (int i = 0; i < data.length; i++) {

row= sheet.createRow(i + 1);for (int j = 0; j < data[i].length; j++) {//将内容按顺序赋给对应的列对象

row.createCell(j).setCellValue(data[i][j]);

}

}returnwb;

}/*** 导出Excel

*

*@paramsheetName sheet名称

*@paramtitle 标题

*@paramdata 内容

*@paramwb Workbook对象:

* 如果是.xls文件的请传入HSSFWorkbook对象类型

* 如果是.xlsx文件的请传入XSSFWorkbook对象类型

* 默认使用HSSFWorkbook对象类型

*@return

*/

public static Workbook getHSSFWorkbook(String sheetName, Listtitle,

List>data, Workbook wb) {//第一步,创建一个HSSFWorkbook,对应一个Excel文件

if (wb == null) {

wb= newHSSFWorkbook();

}if (title == null || title.size() <= 0) {throw new IllegalArgumentException("传入的title参数有问题");

}if (data == null) {

data= new ArrayList>();

}if (data.size() > 0) {

Map map = data.get(0);if (map.size() !=title.size()) {throw new IllegalArgumentException("传入的title列数和实际数据列数不一致!");

}

}//第二步,在workbook中添加一个sheet,对应Excel文件中的sheet

Sheet sheet =wb.createSheet(sheetName);//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制

Row row = sheet.createRow(0);//第四步,创建单元格,并设置值表头 设置表头居中

CellStyle style =wb.createCellStyle();//水平居中

style.setAlignment(HorizontalAlignment.CENTER);//垂直居中//style.setVerticalAlignment(VerticalAlignment.CENTER);//声明列对象

Cell cell = null;int titleLength =title.size();//创建标题

for (int i = 0; i < titleLength; i++) {

cell=row.createCell(i);

cell.setCellValue(title.get(i).getName());

cell.setCellStyle(style);

}//创建内容

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

row= sheet.createRow(i + 1);for (int j = 0; j < titleLength; j++) {//将内容按顺序赋给对应的列对象

Cell tempCell =row.createCell(j);//这里为了代码清晰,每一步都写出来

Map map =data.get(i);

Object objectValue=map.get(title.get(j).getId());

tempCell.setCellValue(objectValue.toString());//tempCell.setCellStyle(style);

}

}returnwb;

}/*** 导出Excel

*

*@paramsheetName sheet名称

*@paramdata 内容

*@paramwb Workbook对象:

* 如果是.xls文件的请传入HSSFWorkbook对象类型

* 如果是.xlsx文件的请传入XSSFWorkbook对象类型

* 默认使用HSSFWorkbook对象类型

*@return

*/

public static Workbook getHSSFWorkbook(String sheetName, List>data,

Workbook wb) {//创建title

List title = new ArrayList();//第一步,创建一个HSSFWorkbook,对应一个Excel文件

if (wb == null) {

wb= newHSSFWorkbook();

}if (data == null) {

data= new ArrayList>();

}if (data.size() > 0) {//因为LinkedHashMap保存了插入时的顺序

LinkedHashMap linkedHashMap = data.get(0);

Set> entrySet =linkedHashMap.entrySet();for (Entryentry : entrySet) {//保存title,使用key值作为title

title.add(entry.getKey());

}

}//第二步,在workbook中添加一个sheet,对应Excel文件中的sheet

Sheet sheet =wb.createSheet(sheetName);//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制

Row row = sheet.createRow(0);//第四步,创建单元格,并设置值表头 设置表头居中

CellStyle style =wb.createCellStyle();//水平居中

style.setAlignment(HorizontalAlignment.CENTER);//垂直居中//style.setVerticalAlignment(VerticalAlignment.CENTER);//声明列对象

Cell cell = null;int titleLength =title.size();//创建标题

for (int i = 0; i < titleLength; i++) {

cell=row.createCell(i);

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

cell.setCellStyle(style);

}//创建内容

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

row= sheet.createRow(i + 1);for (int j = 0; j < titleLength; j++) {//将内容按顺序赋给对应的列对象

Cell tempCell =row.createCell(j);//这里为了代码清晰,每一步都写出来

Map map =data.get(i);

Object objectValue=map.get(title.get(j));

tempCell.setCellValue(objectValue.toString());//tempCell.setCellStyle(style);

}

}returnwb;

}/*** 读取Excel数据,简单的行列数据(数据表格式),不适用复杂的数据

*

*@paramexcelPath 文件路径

*@return表格数据

*@throwsIOException*/

public static List> readExcel(String excelPath) throwsIOException {

Workbook wb= null;

InputStream is= newFileInputStream(excelPath);int indexPoint = excelPath.lastIndexOf(".");

String suffixName= "";if (indexPoint != -1) {

suffixName= excelPath.substring(indexPoint + 1);

System.out.println("后缀名是:" +suffixName);

}//根据文件后缀(xls/xlsx)进行判断

if ("xls".equalsIgnoreCase(suffixName)) {

wb= newHSSFWorkbook(is);

}else if ("xlsx".equalsIgnoreCase(suffixName)) {

wb= newXSSFWorkbook(is);

}else{throw new IllegalArgumentException("文件类型错误!");

}

List> data = new ArrayList>();

List keys = new ArrayList();//遍历sheet页

for (int numSheet = 0, sheetLength = wb.getNumberOfSheets(); numSheet < sheetLength; numSheet++) {

Sheet hssfSheet=wb.getSheetAt(numSheet);if (hssfSheet == null) {continue;

}//开始遍历行

if (hssfSheet.getLastRowNum() > 0) {//使用第一行作为key

Row row = hssfSheet.getRow(0);for (int i = row.getFirstCellNum(), keyNum = row.getLastCellNum(); i < keyNum; i++) {

keys.add(row.getCell(i).getStringCellValue());

}//遍历数据行(除去第一行,下标从1开始)

for (int j = hssfSheet.getFirstRowNum() + 1, k = hssfSheet.getLastRowNum(); j <= k; j++) {

Map map = new LinkedHashMap();//遍历每个列

for (int index =hssfSheet.getRow(j)

.getFirstCellNum(), cellLength=hssfSheet.getRow(j)

.getLastCellNum(); index< cellLength; index++) {

map.put(keys.get(index), getValue(hssfSheet.getRow(j).getCell(index)));

}//存放数据

data.add(map);

}

}//行结束

}//sheet页for结束

returndata;

}private staticString getValue(Cell hssfCell) {if (hssfCell.getCellType() ==CellType.BOOLEAN) {//返回布尔类型的值

returnString.valueOf(hssfCell.getBooleanCellValue());

}else if (hssfCell.getCellType() ==CellType.NUMERIC) {//返回数值类型的值//return String.valueOf(hssfCell.getNumericCellValue());

returnnumOfImport(hssfCell);

}else if (hssfCell.getCellType() ==CellType.BLANK) {//返回空值

return "";

}else{//返回字符串类型的值

returnString.valueOf(hssfCell.getStringCellValue());

}

}/*** 数字转换字符串

*

*@paramcell

*@return

*/

private staticString numOfImport(Cell cell) {

String value=cell.toString();if (cell.getCellType() == CellType.STRING) {//字符串类型

returnvalue;

}else{

String[] str= value.split("\\.");if (str.length > 1) {

String str1= str[1];int m =Integer.parseInt(str1);if (m == 0) {return str[0];

}else{returnvalue;

}

}else{returnvalue;

}

}

}public static classTitileBean {privateString id;privateString name;publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

@OverridepublicString toString() {return "TitileBean [id=" + id + ", name=" + name + "]";

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值