|
|
|
@ -19,6 +19,12 @@ import java.util.Set; |
|
|
|
|
import java.util.UUID; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFClientAnchor; |
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFPicture; |
|
|
|
|
import org.apache.poi.hssf.usermodel.HSSFPictureData; |
|
|
|
|
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.ooxml.POIXMLDocumentPart; |
|
|
|
|
import org.apache.poi.ss.usermodel.BorderStyle; |
|
|
|
|
import org.apache.poi.ss.usermodel.Cell; |
|
|
|
@ -185,7 +191,16 @@ public class ExcelUtil<T> |
|
|
|
|
{ |
|
|
|
|
throw new IOException("文件sheet不存在"); |
|
|
|
|
} |
|
|
|
|
Map<String, PictureData> pictures = getSheetPictrues((XSSFSheet) sheet, (XSSFWorkbook) wb); |
|
|
|
|
boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); |
|
|
|
|
Map<String, PictureData> pictures; |
|
|
|
|
if (isXSSFWorkbook) |
|
|
|
|
{ |
|
|
|
|
pictures = getSheetPictrues07((XSSFSheet) sheet, (XSSFWorkbook) wb); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
pictures = getSheetPictrues03((HSSFSheet) sheet, (HSSFWorkbook) wb); |
|
|
|
|
} |
|
|
|
|
// 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
|
|
|
|
|
int rows = sheet.getLastRowNum(); |
|
|
|
|
|
|
|
|
@ -318,12 +333,8 @@ public class ExcelUtil<T> |
|
|
|
|
{ |
|
|
|
|
val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); |
|
|
|
|
} |
|
|
|
|
else if (ColumnType.IMAGE == attr.cellType()) |
|
|
|
|
else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) |
|
|
|
|
{ |
|
|
|
|
if (StringUtils.isNull(pictures)) |
|
|
|
|
{ |
|
|
|
|
val = ""; |
|
|
|
|
} |
|
|
|
|
PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); |
|
|
|
|
if (image == null) |
|
|
|
|
{ |
|
|
|
@ -1179,13 +1190,46 @@ public class ExcelUtil<T> |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取Excel图片 |
|
|
|
|
* 获取Excel2003图片 |
|
|
|
|
* |
|
|
|
|
* @param sheet 当前sheet对象 |
|
|
|
|
* @param workbook 工作簿对象 |
|
|
|
|
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData |
|
|
|
|
*/ |
|
|
|
|
public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook) |
|
|
|
|
{ |
|
|
|
|
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); |
|
|
|
|
List<HSSFPictureData> pictures = workbook.getAllPictures(); |
|
|
|
|
if (!pictures.isEmpty()) |
|
|
|
|
{ |
|
|
|
|
for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) |
|
|
|
|
{ |
|
|
|
|
HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); |
|
|
|
|
if (shape instanceof HSSFPicture) |
|
|
|
|
{ |
|
|
|
|
HSSFPicture pic = (HSSFPicture) shape; |
|
|
|
|
int pictureIndex = pic.getPictureIndex() - 1; |
|
|
|
|
HSSFPictureData picData = pictures.get(pictureIndex); |
|
|
|
|
String picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1()); |
|
|
|
|
sheetIndexPicMap.put(picIndex, picData); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return sheetIndexPicMap; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return sheetIndexPicMap; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取Excel2007图片 |
|
|
|
|
* |
|
|
|
|
* @param sheet 当前sheet对象 |
|
|
|
|
* @param workbook 工作簿对象 |
|
|
|
|
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData |
|
|
|
|
*/ |
|
|
|
|
public static Map<String, PictureData> getSheetPictrues(XSSFSheet sheet, XSSFWorkbook workbook) |
|
|
|
|
public static Map<String, PictureData> getSheetPictrues07(XSSFSheet sheet, XSSFWorkbook workbook) |
|
|
|
|
{ |
|
|
|
|
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); |
|
|
|
|
for (POIXMLDocumentPart dr : sheet.getRelations()) |
|
|
|
@ -1209,4 +1253,4 @@ public class ExcelUtil<T> |
|
|
|
|
} |
|
|
|
|
return sheetIndexPicMap; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|