框架选择,经官方文档,github询问,官方qq群,发现easyExcel并没有这个功能。
有这个功能的框架只有最原始的apache poi
目录
框架选择,经官方文档,github询问,官方qq群,发现easyExcel并没有这个功能。
有这个功能的框架只有最原始的apache poi
Apache Poi
这里点击目录跳到Apache Poi的段落
--------------------------------------------可跳过
框架我们选用框架是,阿里的easyExcel(是根据apche的easyPoi修改升级后得到的)
首先创建一个excel表格【测试.xlsx】,在其中添加下列格式
现在需要使用easyExcel框架,继承A1的样式,填充到B1。并且在B1写入【年龄】二字
1.在pom文件中导入easyExcel框架
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.2</version>
</dependency>
2.写入
在easyExcel中,写入就是填充
有两种方式,1种是创建一个对象,另一个是Map。我们通常使用Map方式,因为map更加灵活。
他的写入方式是这样的
模板文件加一个{age} ,下面是执行代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.util.MapUtils;
import java.util.Map;
public class T1 {
public static void main(String[] args) {
String templateFileName ="E:\\测试.xlsx";
String rsFileName = "E:\\测试结果.xlsx";
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
Map<String, Object> map = MapUtils.newHashMap();
map.put("age", "年龄");
EasyExcel.write(rsFileName).withTemplate(templateFileName).sheet().doFill(map);
}
}
结果
给这个B2位置,继承B1样式(直接设置样式很容易,但是继承资料比较少)
下面告诉你如何继承,但是查阅了官方所有资料,以及github上和官方群问,并不支持继承
填充Excel | Easy Excel (alibaba.com)
这里放弃使用阿里的excel,我们采用最原生的apache poi,功能最全。像阿里的是封装easy poi,而easy poi封装的apache poi。
-----------------------------------
Apache Poi
他有下面的样式操作
获取单元格样式
XSSFCellStyle cellStyle = xssfRow.getCell(0).getCellStyle();
设置单元格样式
setCellStyle();
下面我们开始进行实战测试
导入依赖(这个支持XLS)
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>
导入依赖(这个支持 XLSX)
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.2</version> </dependency>
因为他不能直接读取文件,需要通过流的方式读取,为了方便我们使用流框架,依赖如下
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xssf.usermodel.*;
import java.io.*;
public class T1 {
public static void main(String[] args) throws FileNotFoundException {
FileInputStream inputStream =new FileInputStream("E:\\测试.xlsx");
try {
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(0);//获取表中的第一个sheet
int lastRowNum = sheet.getLastRowNum();//获取最后一行
XSSFRow head = sheet.getRow(0);//获取第一行,标题
XSSFCell cellA1 = head.getCell(0);//获取(A1),第一列第一行
XSSFCellStyle cellStyleA1 = cellA1.getCellStyle();//获取A1的样式
//设置B1的样式
XSSFCell cellB1 = head.getCell(1);
//将A1的样式,复制给B1
cellB1.setCellStyle(cellStyleA1);
/* for (int i = 1; i < lastRowNum; i++) {//从第二行开始
XSSFRow row = sheet.getRow(i);
XSSFCell cell = row.getCell(0);//获取第一列
}*/
workbook.write(new FileOutputStream("E:\\测试123.xlsx"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
你只管改就行,改完他会自动调用你在内存中改后的内容,写入到表格中(他的内部逻辑都隐藏了,所以直接看起来会比较晕,分不清是哪个步骤写进去的,其实他定义的是一个全局变量,你的所有方法都会自动去修改workbook的值)
结果成功
你如果想在线编辑用luckeysheet