涉及到合并单元格的数据读取:

package com.util;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; public class ExcelUtil {
/**
* 判断指定的单元格是否是合并单元格
*
* @param sheet
* @param row 行下标
* @param column 列下标
* @return
*/
public static boolean isMergedRegion(Sheet sheet, int row, int column) {
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
* @param row
* @param column
* @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);
fCell.setCellType(CellType.STRING);
return getCellValue(fCell);
}
}
} return "";
} /**
* 获取单元格的值
*
* @param cell
* @return
*/
public static String getCellValue(Cell cell) { if (cell == null) {
return "";
}
cell.setCellType(CellType.STRING);
if (cell == null) return ""; if (cell.getCellType() == Cell.CELL_TYPE_STRING) { return cell.getStringCellValue().trim(); } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { return String.valueOf(cell.getBooleanCellValue()).trim(); } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { return cell.getCellFormula().trim(); } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { return String.valueOf(cell.getNumericCellValue()).trim(); }
return "";
} public static List<List<String>> getValues(String fileUrl, int sheetNum) {
List<List<String>> values = new ArrayList<List<String>>();
try {
File file = new File(fileUrl);
InputStream is = null;
try {
is = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Workbook workbook = null;
Sheet sheet = null; workbook = WorkbookFactory.create(is);
int sheetCount = sheetNum - 1; //workbook.getNumberOfSheets();//sheet 数量,可以只读取手动指定的sheet页
// for(int s=0;s<sheetCount;s++){ sheet = workbook.getSheetAt(sheetCount); //读取第几个工作表sheet
int rowNum = sheet.getLastRowNum();//有多少行 for (int i = 1; i <= rowNum; i++) {
Row row = sheet.getRow(i);//第i行
if (row == null) {//过滤空行
continue;
}
List<String> list = new ArrayList<>();
int colCount = sheet.getRow(0).getLastCellNum();//用表头去算有多少列,不然从下面的行计算列的话,空的就不算了
// for (int j = 0; j < row.getLastCellNum(); j++) {//第j列://+1是因为最后一列是空 也算进去
for (int j = 0; j < colCount; j++) {//第j列://+1是因为最后一列是空 也算进去
Cell cell = row.getCell(j);
String cellValue;
boolean isMerge = false;
if (cell != null) {
isMerge = isMergedRegion(sheet, i, cell.getColumnIndex());
}
//判断是否具有合并单元格
if (isMerge) {
cellValue = getMergedRegionValue(sheet, row.getRowNum(), cell.getColumnIndex());
} else {
cellValue = getCellValue(cell);
}
list.add(cellValue);
}
values.add(list);
}
// }
System.out.println(values);
} catch (Exception e) {
e.printStackTrace();
}
return values;
}
}

调用工具类方法:

 @Test
public void testReadOne() {
String fileUrl = "E:\\officedh\\cai\\docs\\design\\云彩游戏列表.xlsx";
List<List<String>> values = ExcelUtil.getValues(fileUrl,1);
String firstValue = "";
String secondValue = "";
int firstId = 0;
int secondId = 0;
List<Game> games = new ArrayList<>();
List<GameGroup> gameGroups = new ArrayList<>();
Timestamp timestamp = new Timestamp(System.currentTimeMillis()); for (List<String> value : values) {
for (int i = 0; i < value.size(); i++) {
String v = value.get(i);
switch (i) {
case 0:
if (!v.equals(firstValue)) {
firstId++;
secondId = 0;
firstValue = v;
// 插入PlayGroup{firstId,firstValue}
GameGroup group = new GameGroup();
String gameGroupId = String.format("%02d", firstId);
group.setGameGroupId(Long.valueOf(gameGroupId));
// group.setTags(Long.valueOf(id));
group.setCreateTime(timestamp);
group.setName(firstValue);
group.setDescription("");
group.setSn("");
gameGroups.add(group);
}
break;
case 1:
if (!v.equals(secondValue)) {
secondId++;
secondValue = v;
//插入PlaySection{secondId,secondValue}
Game game = new Game();
String gameGroupId = String.format("%02d", firstId);
String gameId = String.format("%02d%02d", firstId, secondId);
game.setGameGroupId(Long.valueOf(gameGroupId));
game.setGameId(Long.valueOf(gameId));
game.setName(secondValue);
// game.setGameType(rank);//游戏类型,1:数字型;2:字符型;3:其他型
// game.setBeginTime(rank);//开奖时间
// game.setEndTime(rank);//闭奖时间
// game.setDescription(rank);//
// game.setDuration(rank);//开奖间隔,单位:秒
// game.setLockTime(rank);//封存时间,单位:秒
// game.setElements(rank);//号码
// game.setLogo(rank);//LOGO
// game.setSn(rank);
// game.setStatus(rank);
// game.setTags(rank);
game.setCreateTime(timestamp);
games.add(game);
}
break;
}
}
}
gameRepository.save(games);
gameGroupRepository.save(gameGroups);
}

最新文章

  1. C语言调用curl库抓取网页图片
  2. 练习JavaWeb连接数据库
  3. selenium读取txt文件的几种方式
  4. 初学java之面板布局的控制
  5. MySQL 字段常用操作 添加,修改,删除,调整字段顺序
  6. jquery text--val--html
  7. 数学(莫比乌斯函数):BZOJ 2440 完全平方数
  8. Java中循环删除list中元素的方法总结
  9. 【数据库摘要】5_Sql_IN
  10. tweenanim动画
  11. Tessnet2图片识别(2)
  12. spring事务探索
  13. mysql_报错1418
  14. TypeScript初探
  15. 线段树合并 || 树状数组 || 离散化 || BZOJ 4756: [Usaco2017 Jan]Promotion Counting || Luogu P3605 [USACO17JAN]Promotion Counting晋升者计数
  16. ogg 12.3 for sqlserver 2016 CDC模式配置
  17. 火车时刻表WebApp
  18. RuntimeError: Broken toolchain: cannot link a simple C program
  19. 《Java并发编程实战》笔记-Happens-Before规则
  20. css学习(1)

热门文章

  1. NATS源代码分析之auth目录
  2. hiho一下第107周《Give My Text Back》
  3. servlet ; basepath ; sendredirected ;
  4. 2 CDuiString的bug
  5. convention over configuration 约定优于配置 按约定编程 约定大于配置 PEP 20 -- The Zen of Python
  6. NPOI 操作office、word、excel
  7. DjangoDRF序列化组件使用
  8. 【转载】在Jersey JAX-RS 处理泛型List等Collection
  9. django 中模板语言的各种用法
  10. FPGA电源设计