|
@@ -1,9 +1,6 @@
|
|
|
package com.keao.edu.util.excel;
|
|
|
|
|
|
-import java.io.File;
|
|
|
-import java.io.FileInputStream;
|
|
|
-import java.io.IOException;
|
|
|
-import java.io.InputStream;
|
|
|
+import java.io.*;
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
import java.lang.reflect.Method;
|
|
|
import java.text.SimpleDateFormat;
|
|
@@ -18,21 +15,12 @@ import java.util.Map.Entry;
|
|
|
import org.apache.commons.beanutils.NestedNullException;
|
|
|
import org.apache.commons.beanutils.PropertyUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFCell;
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFFont;
|
|
|
-import org.apache.poi.hssf.usermodel.HSSFRow;
|
|
|
-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.CellStyle;
|
|
|
-import org.apache.poi.ss.usermodel.Font;
|
|
|
-import org.apache.poi.ss.usermodel.IndexedColors;
|
|
|
-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.POIXMLDocumentPart;
|
|
|
+import org.apache.poi.hssf.usermodel.*;
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
|
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
+import org.apache.poi.xssf.usermodel.*;
|
|
|
+import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
@@ -481,6 +469,14 @@ public class POIUtil {
|
|
|
currentRowNum = 0;
|
|
|
// 顺序取sheet
|
|
|
sheet = workbook.getSheetAt(i);
|
|
|
+
|
|
|
+ Map<String, List<PictureData>> picMap = null;
|
|
|
+ if (extName.endsWith(".xlsx")) {
|
|
|
+ picMap = getXlsxPictures((XSSFSheet) sheet);
|
|
|
+ } else if (extName.endsWith(".xls")) {
|
|
|
+ picMap = getXlsPictures((HSSFSheet) sheet);
|
|
|
+ }
|
|
|
+
|
|
|
List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
|
|
|
rowIter = sheet.iterator();
|
|
|
while (rowIter.hasNext()) {
|
|
@@ -530,6 +526,13 @@ public class POIUtil {
|
|
|
currentCellNum++;
|
|
|
}
|
|
|
}
|
|
|
+ if (picMap != null) {
|
|
|
+ for (Entry<String, List<PictureData>> pics : picMap.entrySet()) {
|
|
|
+ String key = pics.getKey();
|
|
|
+ String[] split = key.split("-");
|
|
|
+ obj.put(fieldsName[Integer.parseInt(split[1])], pics.getValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
if (obj != null && hasVal)
|
|
|
datas.add(obj);
|
|
|
|
|
@@ -629,4 +632,69 @@ public class POIUtil {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取图片和位置 (xls)
|
|
|
+ *
|
|
|
+ * @param sheet
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static Map<String, List<PictureData>> getXlsPictures(HSSFSheet sheet) throws IOException {
|
|
|
+ Map<String, List<PictureData>> map = new HashMap<>();
|
|
|
+ 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(); // 行号-列号
|
|
|
+ if (map.containsKey(key)) {
|
|
|
+ List<PictureData> pics = map.get(key);
|
|
|
+ pics.add(pdata);
|
|
|
+ map.put(key, pics);
|
|
|
+ } else {
|
|
|
+ List<PictureData> pics = new ArrayList<>();
|
|
|
+ pics.add(pdata);
|
|
|
+ map.put(key, pics);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取图片和位置 (xlsx)
|
|
|
+ *
|
|
|
+ * @param sheet
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static Map<String, List<PictureData>> getXlsxPictures(XSSFSheet sheet) throws IOException {
|
|
|
+ Map<String, List<PictureData>> map = new HashMap<>();
|
|
|
+ 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();
|
|
|
+
|
|
|
+ if (map.containsKey(key)) {
|
|
|
+ List<PictureData> pics = map.get(key);
|
|
|
+ pics.add(picture.getPictureData());
|
|
|
+ map.put(key, pics);
|
|
|
+ } else {
|
|
|
+ List<PictureData> pics = new ArrayList<>();
|
|
|
+ pics.add(picture.getPictureData());
|
|
|
+ map.put(key, pics);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
}
|