概述
目录
1、 Maven仓库下载导入
2、写入
2.1 数据格式
2.2 代码
2.2 输出的Excel结果:
附录:
本文以Java示例展示Excel中的写入“合并单元格”的方法。
1、 Maven仓库下载导入
在pom.xml中配置maven路径,指定依赖,如下:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
2、写入
2.1 数据格式
要把每个单元格信息(包含:位置、值等)都一一列举清楚,
需要的字段:
位置:firstRow,lastRow,firstCol,lastCol;(从0开始)
值:value;
[{"firstRow":0,"lastRow":6,"lastCol":0,"firstCol":0,"value":"秦时明月汉时关"},{"firstRow":0,"lastRow":0,"lastCol":1,"firstCol":1,"value":"万"},{"firstRow":1,"lastRow":1,"lastCol":1,"firstCol":1,"value":"里"},{"firstRow":2,"lastRow":2,"lastCol":1,"firstCol":1,"value":"长"},{"firstRow":3,"lastRow":3,"lastCol":1,"firstCol":1,"value":"征"},{"firstRow":4,"lastRow":4,"lastCol":1,"firstCol":1,"value":"人"},{"firstRow":5,"lastRow":5,"lastCol":1,"firstCol":1,"value":"未"},{"firstRow":6,"lastRow":6,"lastCol":1,"firstCol":1,"value":"还"},{"firstRow":3,"lastRow":3,"lastCol":2,"firstCol":2,"value":"但使龙城飞将在"},{"firstRow":0,"lastRow":0,"lastCol":3,"firstCol":3,"value":"不"},{"firstRow":1,"lastRow":1,"lastCol":3,"firstCol":3,"value":"教"},{"firstRow":2,"lastRow":2,"lastCol":3,"firstCol":3,"value":"胡"},{"firstRow":3,"lastRow":3,"lastCol":3,"firstCol":3,"value":"马"},{"firstRow":4,"lastRow":4,"lastCol":3,"firstCol":3,"value":"度"},{"firstRow":5,"lastRow":5,"lastCol":3,"firstCol":3,"value":"阴"},{"firstRow":6,"lastRow":6,"lastCol":3,"firstCol":3,"value":"山"}]
2.2 代码
package com;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class ExcelTest {
/**
* 写入excel数据
*
* @param path excel保存路径
* @param name excel名称
* @param version excel格式,支持xls、xlsx
* @param rows excel单元格信息(包含位置、值等信息,rows中每个Json必须包含位置和值的信息,
* 位置:firstRow,lastRow,firstCol,lastCol,值:value)
*/
public static void writeMergeExcel(String path, String name, String version,
List<JSONObject> rows) {
try {
Workbook wb = produce(version);
createSheet(wb, name, version, rows,null);
String filePath = path + name;
if (!filePath.endsWith(version)) {
filePath = filePath +"."+ version;
}
FileOutputStream fileOut = new FileOutputStream(filePath);
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 写入excel数据
*
* @param path excel保存路径
* @param name excel名称
* @param version excel格式,支持xls、xlsx
* @param rows excel单元格信息(包含位置、值等信息)
* @param rowKeys excel单元格字段信息(rows中每个Json必须包含位置和值的信息,如果存储的字段与工具中的字段不一致,做个映射,工具中的字段::firstRow,lastRow,firstCol,lastCol,值:value)
*/
public static void writeMergeExcel(String path, String name, String version,
List<JSONObject> rows, JSONObject rowKeys) {
try {
Workbook wb = produce(version);
createSheet(wb, name, version, rows, rowKeys);
String filePath = path + name;
if (!filePath.endsWith(version)) {
filePath = filePath +"."+ version;
}
FileOutputStream fileOut = new FileOutputStream(filePath);
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void createSheet(Workbook wb, String name, String version,
List<JSONObject> rows, JSONObject rowKeys) {
Integer max = getMaxRowNumber(version);
int sheetNum = 1;
Sheet sheet = wb.createSheet(name + sheetNum);
CellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.LEFT);//设置水平对齐方式
style.setVerticalAlignment(VerticalAlignment.CENTER); //设置垂直对齐方式
String firstRowKey = rowKeys != null ? rowKeys.getString("firstRow"):"firstRow";
String lastRowKey = rowKeys != null ? rowKeys.getString("lastRow"):"lastRow";
String firstColKey = rowKeys != null ? rowKeys.getString("firstCol"):"firstCol";
String lastColKey = rowKeys != null ? rowKeys.getString("lastCol"):"lastCol";
String valueKey = rowKeys != null ? rowKeys.getString("value"):"value";
for (JSONObject rowJson : rows) {
int lastRow = rowJson.getInteger(lastRowKey);
if (lastRow > max){
List<JSONObject> subRows = rows.subList(lastRow,rows.size());
createSheet(wb, name, version, subRows, rowKeys);
} else{
int firstRow = rowJson.getInteger(firstRowKey);
int firstCol = rowJson.getInteger(firstColKey);
int lastCol = rowJson.getInteger(lastColKey);
System.out.println(firstRow+"_"+lastRow +"_"+ firstCol +"_"+ lastCol);
if (lastCol - firstCol > 0 || lastRow - firstRow > 0 ){
CellRangeAddress cellRangeAddress = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
sheet.addMergedRegion(cellRangeAddress);
}
Row row ;
if (sheet.getRow(firstRow)!=null){
row = sheet.getRow(firstRow);
} else {
row = sheet.createRow(firstRow);
}
Cell cell = row.createCell(firstCol);
cell.setCellValue(rowJson.getString(valueKey));
cell.setCellStyle(style);
}
}
}
public static Workbook produce(String version) {
switch (version) {
case "xls":
return new HSSFWorkbook();
case "xlsx":
return new XSSFWorkbook();
case "sxlsx":
return new SXSSFWorkbook();
default:
return null;
}
}
private static int maxXls = 65024;
private static int maxXlsx = 1048576;
public static Integer getMaxRowNumber(String version) {
switch (version) {
case "xls":
return maxXls;
case "xlsx":
return maxXlsx;
case "sxlsx":
return maxXlsx;
default:
return null;
}
}
public static void main(String[] args) {
try {
List<JSONObject> list = (List<JSONObject>) JSONObject.parse("[{"firstRow":0,"lastRow":6,"lastCol":0,"firstCol":0,"value":"秦时明月汉时关"},{"firstRow":0,"lastRow":0,"lastCol":1,"firstCol":1,"value":"万"},{"firstRow":1,"lastRow":1,"lastCol":1,"firstCol":1,"value":"里"},{"firstRow":2,"lastRow":2,"lastCol":1,"firstCol":1,"value":"长"},{"firstRow":3,"lastRow":3,"lastCol":1,"firstCol":1,"value":"征"},{"firstRow":4,"lastRow":4,"lastCol":1,"firstCol":1,"value":"人"},{"firstRow":5,"lastRow":5,"lastCol":1,"firstCol":1,"value":"未"},{"firstRow":6,"lastRow":6,"lastCol":1,"firstCol":1,"value":"还"},{"firstRow":3,"lastRow":3,"lastCol":2,"firstCol":2,"value":"但使龙城飞将在"},{"firstRow":0,"lastRow":0,"lastCol":3,"firstCol":3,"value":"不"},{"firstRow":1,"lastRow":1,"lastCol":3,"firstCol":3,"value":"教"},{"firstRow":2,"lastRow":2,"lastCol":3,"firstCol":3,"value":"胡"},{"firstRow":3,"lastRow":3,"lastCol":3,"firstCol":3,"value":"马"},{"firstRow":4,"lastRow":4,"lastCol":3,"firstCol":3,"value":"度"},{"firstRow":5,"lastRow":5,"lastCol":3,"firstCol":3,"value":"阴"},{"firstRow":6,"lastRow":6,"lastCol":3,"firstCol":3,"value":"山"}]");
writeMergeExcel("E:\","mergeExcel", "xls" ,list);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.2 输出的Excel结果:
秦时明月汉时关 | 万 | 不 | |
里 | 教 | ||
长 | 胡 | ||
征 | 但使龙城飞将在 | 马 | |
人 | 度 | ||
未 | 阴 | ||
还 | 山 |
附录:
合并单元格的读取见另一篇文章:
Java读取Excel中的合并单元格https://blog.csdn.net/u012998680/article/details/124557925
最后
以上就是超帅烤鸡为你收集整理的Java:Excel写入“合并单元格“1、 Maven仓库下载导入2、写入附录:的全部内容,希望文章能够帮你解决Java:Excel写入“合并单元格“1、 Maven仓库下载导入2、写入附录:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复