Java-读写xlsx文件模板
1.导依赖包
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency>
2.模板
import com.monitorjbl.xlsx.StreamingReader; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class ExcelUtil { //把xlsx文件数据读到List<List<String>> public static List<List<String>> readXlxs(String filePath) throws FileNotFoundException { FileInputStream in = new FileInputStream(filePath);//根据路径建一个输入流 Workbook wk = StreamingReader.builder() .rowCacheSize(100) //缓存到内存中的行数,默认是10 .bufferSize(4096) //读取资源时,缓存到内存的字节大小,默认是1024 .open(in); //打开资源,必须,可以是InputStream或者是File,注意:只能打开XLSX格式的文件 //读取excel第一个工作簿 Sheet sheet = wk.getSheetAt(0); //存放所有数据的集合 List<List<String>> lists = new ArrayList<>(); int idx = 0; String value; for (Row row : sheet) {//遍历所有的行 idx=row.getRowNum(); if(idx==0)//一般第一行是标题,人性化忽略 continue; List<String> rowList = new ArrayList<>();//存放每一行数据的集合 for (Cell cell : row) {//遍历每一行数据的列 value = cell.getStringCellValue(); rowList.add(value);//把每个单元格的数据一一放进每一行集合中 } lists.add(rowList);//把每行数据一行一行放进整个集合中 } System.out.println("读取excel表中的记录数量 "+lists.size()); return lists; } //把List<List<String>>内容写到xlsx文件 public static void writeXlxs(List<List<String>> lists){ try{ //新建一个workbook对象 XSSFWorkbook wb = new XSSFWorkbook(); //创建一个sheet表 XSSFSheet sheet = wb.createSheet("sheet"); //创建行 XSSFRow row = sheet.createRow(0); //解析行标签 for (int i = 0; i < lists.size(); i++) { //第几行 row = sheet.createRow(i); for (int j = 0; j < lists.get(i).size(); j++) { //第几列 row.createCell((short) j).setCellValue(lists.get(i).get(j)); } } File file = new File("F:\\output.xlsx"); //输出流 FileOutputStream fout = new FileOutputStream(file); //写入 wb.write(fout); //关闭输出流 fout.close(); }catch (Exception e){ e.printStackTrace(); } } }