package com.ngx.util;
/**
*
* @author vx:xun7535285
*
*/
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPicture;
import org.apache.poi.hssf.usermodel.HSSFShape;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.PictureData;
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.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
/**
*
*/
@Component
public class excelUtil {
@Autowired
private fileUploads uploads;
/**
* 读取excel文件并返回所有行和列
* @param file 上传文件
* @return 返回所有行和列
* @throws IOException
*/
public Map<String, Map<Integer, Map<Integer, String>>> readExcelToMap(MultipartFile file) throws IOException {
Workbook wb = null;
Sheet sheet = null;
Row row = null;
// 声明所有页的集合
Map<String, Map<Integer, Map<Integer, String>>> mapSheet = new LinkedHashMap<>();
wb = readExcel(file);
if (wb != null) {
// 获取总页数
int pageSize = wb.getNumberOfSheets();
for (int i = 0; i < pageSize; i++) {
// 声明当前页的行和列
Map<Integer, Map<Integer, String>> map = new HashMap<>();
// 获取当前页
sheet = wb.getSheetAt(i);
// 声明当前页图片的集合
Map<String, PictureData> pMap = null;
// 获取图片
if (file.getOriginalFilename().endsWith(".xls")) {
pMap = getPictures1((HSSFSheet) sheet);
} else {
pMap = getPictures2((XSSFSheet) sheet);
}
String sheetName = sheet.getSheetName();
// System.out.println("获取当前页的最大行数");
int rowSize = sheet.getPhysicalNumberOfRows();
// System.out.println("总行数:"+rowSize);
// System.out.println("遍历所有行");
for (int j = 0; j < rowSize; j++) {
// System.out.println("获取第"+j+"行");
row = sheet.getRow(j);
// System.out.println("获取当前页的最大列数");
int columnSize = row.getPhysicalNumberOfCells();
// 声明当前列
Map<Integer, String> columnMap = new HashMap<>();
// System.out.println("列大小:"+columnSize);
for (int j2 = 0; j2 < columnSize; j2++) {
// System.out.println("获取第"+j2+"列的内容");
String value = (String) getCellFormatValue(row.getCell(j2));
// 添加当前列的内容 j2代表第几列 value是内容
columnMap.put(j2, value);
}
// 添加当前行的内容 j代表第几行 value是列的内容 意思是第几行第几列的内容
map.put(j, columnMap);
}
// 解析图片并上传到服务器 并设置该字段的值为字符串类型添加到map中 进行数据库上传
Object key[] = pMap.keySet().toArray();
for (int v = 0; v < pMap.size(); v++) {
PictureData pic = pMap.get(key[v]);
String picName = key[v].toString();
String ext = pic.suggestFileExtension();
byte[] data = pic.getData();
try {
InputStream input = new ByteArrayInputStream(data);
FileUploadResponse fileUpload = uploads.excelImgUpload(input, ext);
if (fileUpload.getUrl() != null) {
// 解析key 并根据key 设置 某一行的某一列的 图片链接
String[] split = picName.split("-");
Integer rowIndex = Integer.parseInt(split[0].toString()),
columnIndex = Integer.parseInt(split[1].toString());
// 根据行下标 获取所有的列
Map<Integer, String> columns = map.get(rowIndex);
// 根据列下标 设置图片链接值
columns.put(columnIndex, fileUpload.getUrl());
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
// 添加当前页的所有内容
mapSheet.put(sheetName, map);
}
}
return mapSheet;
}
// 读取excel
private static Workbook readExcel(MultipartFile file) {
Workbook wb = null;
if (file == null) {
return null;
}
String filename = file.getOriginalFilename();
InputStream is = null;
try {
is = file.getInputStream();
if (filename.endsWith(".xls")) {
return wb = new HSSFWorkbook(is);
} else if (filename.endsWith(".xlsx")) {
return wb = new XSSFWorkbook(is);
} else {
return wb = null;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return wb;
}
public static void printImg(Map<String, PictureData> sheetList) throws IOException {
Object key[] = sheetList.keySet().toArray();
for (int i = 0; i < sheetList.size(); i++) {
PictureData pic = sheetList.get(key[i]);
String picName = key[i].toString();
String ext = pic.suggestFileExtension();
byte[] data = pic.getData();
FileOutputStream out = new FileOutputStream("D:\\" + picName + "." + ext);
out.write(data);
out.flush();
out.close();
}
}
public static Map<String, PictureData> getPictures1(HSSFSheet sheet) throws IOException {
Map<String, PictureData> map = new HashMap<String, PictureData>();
List<HSSFShape> list = sheet.getDrawingPatriarch().getChildren();
for (HSSFShape shape : list) {
if (shape instanceof HSSFPicture) {
HSSFPicture picture = (HSSFPicture) shape;
HSSFClientAnchor cAnchor = (HSSFClientAnchor) picture.getAnchor();
PictureData pdata = picture.getPictureData();
String key = cAnchor.getRow1() + "-" + cAnchor.getCol1(); // 行号-列号
map.put(key, pdata);
}
}
return map;
}
public static Map<String, PictureData> getPictures2(XSSFSheet sheet) throws IOException {
Map<String, PictureData> map = new HashMap<String, PictureData>();
List<POIXMLDocumentPart> list = sheet.getRelations();
for (POIXMLDocumentPart part : list) {
if (part instanceof XSSFDrawing) {
XSSFDrawing drawing = (XSSFDrawing) part;
List<XSSFShape> shapes = drawing.getShapes();
for (XSSFShape shape : shapes) {
XSSFPicture picture = (XSSFPicture) shape;
XSSFClientAnchor anchor = picture.getPreferredSize();
CTMarker marker = anchor.getFrom();
String key = marker.getRow() + "-" + marker.getCol();
map.put(key, picture.getPictureData());
}
}
}
return map;
}
@SuppressWarnings("deprecation")
private static Object getCellFormatValue(Cell cell) {
Object cellValue = null;
if (cell != null) {
// 判断cell类型
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC: {
cellValue = String.valueOf(cell.getNumericCellValue());
break;
}
case Cell.CELL_TYPE_FORMULA: {
// 判断cell是否为日期格式
if (DateUtil.isCellDateFormatted(cell)) {
// 转换为日期格式YYYY-mm-dd
cellValue = cell.getDateCellValue();
} else {
// 数字
cellValue = String.valueOf(cell.getNumericCellValu
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
人脸识别.rar (83个子文件)
人脸识别
rlsb
pom.xml 3KB
target
test-classes
classes
META-INF
maven
com.jbit
rlsb
pom.xml 3KB
pom.properties 221B
MANIFEST.MF 305B
application.yml 758B
templates
new_file.ftl 1KB
com
jbit
dao
userMapper.class 378B
aspect
ServiceApiLog.class 3KB
LogAspectServiceApi.class 3KB
pojo
user.class 3KB
controller
fileController.class 3KB
loginController.class 2KB
Start.class 889B
static
img
index.html 768B
js
index.js 2KB
compile.js 546B
jquery-1.9.1.min.js 90KB
LoginAjax.js 684B
GetFace.js 2KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.common.project.facet.core.xml 145B
org.springframework.ide.eclipse.prefs 65B
org.eclipse.core.resources.prefs 191B
org.eclipse.jdt.core.prefs 356B
src
test
resources
java
main
resources
application.yml 758B
templates
new_file.ftl 1KB
static
css
img
js
index.js 2KB
compile.js 546B
jquery-1.9.1.min.js 90KB
LoginAjax.js 650B
GetFace.js 2KB
java
com
jbit
dao
userMapper.java 455B
aspect
ServiceApiLog.java 2KB
LogAspectServiceApi.java 2KB
pojo
user.java 189B
Start.java 598B
controller
loginController.java 1KB
fileController.java 2KB
.project 986B
.classpath 1KB
util
pom.xml 2KB
target
test-classes
util-0.0.1-SNAPSHOT.jar 24KB
maven-status
maven-compiler-plugin
compile
default-compile
inputFiles.lst 1KB
createdFiles.lst 0B
testCompile
default-testCompile
inputFiles.lst 0B
classes
META-INF
maven
com.jbit
util
pom.xml 2KB
pom.properties 221B
MANIFEST.MF 110B
com
ngx
util
UploadProperties.class 2KB
Constants.class 693B
fileUploads.class 6KB
ResponseBase.class 2KB
fileDownloads.class 4KB
DateUtil.class 625B
NString.class 838B
HttpUtil.class 6KB
MapUtil.class 948B
BaseController.class 1KB
excelUtil.class 11KB
JSUtil.class 2KB
FileUploadResponse.class 4KB
static
js
compile.js 546B
maven-archiver
pom.properties 111B
generated-sources
annotations
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.common.project.facet.core.xml 145B
org.springframework.ide.eclipse.prefs 65B
org.eclipse.jdt.core.prefs 291B
src
test
resources
java
main
resources
static
js
compile.js 546B
java
com
ngx
util
fileDownloads.java 4KB
Constants.java 505B
HttpUtil.java 8KB
MapUtil.java 471B
NString.java 672B
UploadProperties.java 1KB
DateUtil.java 416B
ResponseBase.java 249B
excelUtil.java 8KB
fileUploads.java 8KB
FileUploadResponse.java 325B
JSUtil.java 3KB
BaseController.java 1KB
.project 1KB
.classpath 1KB
共 83 条
- 1
资源评论
发呆丶i
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功