2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Java poi导入合并单元格的excel数据【最完整】附pom文件和excel截图

Java poi导入合并单元格的excel数据【最完整】附pom文件和excel截图

时间:2024-04-02 17:02:45

相关推荐

Java poi导入合并单元格的excel数据【最完整】附pom文件和excel截图

代码如下:

package com.haha.demo;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.util.CellRangeAddress;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.*;import java.nio.file.Files;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;public class TestDemo1 {public static void main(String[] args) throws Exception {readExcelFile();}private static void readExcelFile() throws Exception {File file = new File("E:\\test1\\demo.xlsx");if (!file.exists()) {throw new Exception("文件不存在!");}InputStream in = Files.newInputStream(file.toPath());// 读取整个ExcelXSSFWorkbook sheets = new XSSFWorkbook(in);// 获取第一个表单SheetXSSFSheet sheetAt = sheets.getSheetAt(0);//默认第一行为标题行,i = 0XSSFRow titleRow = sheetAt.getRow(0);Map<String, Double> teacherIdAwardMoney = new HashMap<>();Map<String, ArrayList<String>> teacherCenterMap = new HashMap<>();ArrayList<String> centers = new ArrayList<>();double money = 0.f;// 读取每一行for (int i = 1; i < sheetAt.getPhysicalNumberOfRows(); i++) {XSSFRow row = sheetAt.getRow(i);// 说明第一次添加if (null == teacherIdAwardMoney.get(String.valueOf(row.getCell(1)))) {money = Double.parseDouble(String.valueOf(row.getCell(2)));centers.add(String.valueOf(row.getCell(3)));} else {money = Double.parseDouble(String.valueOf(row.getCell(2))) + teacherIdAwardMoney.get(String.valueOf(row.getCell(1)));centers = mergeTwoList(teacherCenterMap.get(String.valueOf(row.getCell(1))), String.valueOf(row.getCell(3)));}teacherCenterMap.put(String.valueOf(row.getCell(1)), centers);teacherIdAwardMoney.put(String.valueOf(row.getCell(1)), money);// // 奖励老师// String teacherId = getCellValue(row.getCell(1));// // 奖励金额// String awordMoney = getCellValue(row.getCell(2));// 是否是合并单元格boolean isMerge = isMergedRegion(sheetAt, i, 3);String team = "";if (isMerge) {team = getMergedRegionValue(sheetAt, row.getRowNum(), 3);} else {team = getCellValue(row.getCell(3)).toString();}System.out.print(team);System.out.println();}}private static ArrayList<String> mergeTwoList(ArrayList<String> strings, String center) {ArrayList<String> combineList = new ArrayList<>(strings);combineList.add(center);return combineList;}/*** 判断指定的单元格是否是合并单元格** @param sheet* @param row 行下标* @param column 列下标* @return*/private static boolean isMergedRegion(Sheet sheet, int row, int column) {//获取该sheet所有合并的单元格int sheetMergeCount = sheet.getNumMergedRegions();//循环判断 该单元格属于哪个合并单元格, 如果能找到对应的,就表示该单元格是合并单元格for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress range = sheet.getMergedRegion(i);int firstColumn = range.getFirstColumn();int lastColumn = range.getLastColumn();int firstRow = range.getFirstRow();int lastRow = range.getLastRow();if (row >= firstRow && row <= lastRow) {if (column >= firstColumn && column <= lastColumn) {return true;}}}return false;}/*** 获取合并单元格的值** @param sheet sheet索引 从0开始* @param row 行索引 从0开始* @param column 列索引 从0开始* @return*/public static String getMergedRegionValue(Sheet sheet, int row, int column) {int sheetMergeCount = sheet.getNumMergedRegions();for (int i = 0; i < sheetMergeCount; i++) {CellRangeAddress ca = sheet.getMergedRegion(i);int firstColumn = ca.getFirstColumn();int lastColumn = ca.getLastColumn();int firstRow = ca.getFirstRow();int lastRow = ca.getLastRow();if (row >= firstRow && row <= lastRow) {if (column >= firstColumn && column <= lastColumn) {Row fRow = sheet.getRow(firstRow);Cell fCell = fRow.getCell(firstColumn);return getCellValue(fCell);}}}return null;}public static String getCellValue(Cell cell) {if (cell == null) return "";if (cell.getCellType() == Cell.CELL_TYPE_STRING) {return cell.getStringCellValue();} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {return String.valueOf(cell.getBooleanCellValue());} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {return cell.getCellFormula();} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {return String.valueOf(cell.getNumericCellValue());}return "";}}

pom文件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>HelloExcel</artifactId><version>1.0-SNAPSHOT</version><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!--xls--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><!--xlsx--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><!--test--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies></project>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。