正在显示
1 个修改的文件
包含
52 行增加
和
8 行删除
| @@ -19,6 +19,12 @@ import java.util.Set; | @@ -19,6 +19,12 @@ import java.util.Set; | ||
| 19 | import java.util.UUID; | 19 | import java.util.UUID; |
| 20 | import java.util.stream.Collectors; | 20 | import java.util.stream.Collectors; |
| 21 | import javax.servlet.http.HttpServletResponse; | 21 | import javax.servlet.http.HttpServletResponse; |
| 22 | +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; | ||
| 23 | +import org.apache.poi.hssf.usermodel.HSSFPicture; | ||
| 24 | +import org.apache.poi.hssf.usermodel.HSSFPictureData; | ||
| 25 | +import org.apache.poi.hssf.usermodel.HSSFShape; | ||
| 26 | +import org.apache.poi.hssf.usermodel.HSSFSheet; | ||
| 27 | +import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||
| 22 | import org.apache.poi.ooxml.POIXMLDocumentPart; | 28 | import org.apache.poi.ooxml.POIXMLDocumentPart; |
| 23 | import org.apache.poi.ss.usermodel.BorderStyle; | 29 | import org.apache.poi.ss.usermodel.BorderStyle; |
| 24 | import org.apache.poi.ss.usermodel.Cell; | 30 | import org.apache.poi.ss.usermodel.Cell; |
| @@ -185,7 +191,16 @@ public class ExcelUtil<T> | @@ -185,7 +191,16 @@ public class ExcelUtil<T> | ||
| 185 | { | 191 | { |
| 186 | throw new IOException("文件sheet不存在"); | 192 | throw new IOException("文件sheet不存在"); |
| 187 | } | 193 | } |
| 188 | - Map<String, PictureData> pictures = getSheetPictrues((XSSFSheet) sheet, (XSSFWorkbook) wb); | 194 | + boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); |
| 195 | + Map<String, PictureData> pictures; | ||
| 196 | + if (isXSSFWorkbook) | ||
| 197 | + { | ||
| 198 | + pictures = getSheetPictrues07((XSSFSheet) sheet, (XSSFWorkbook) wb); | ||
| 199 | + } | ||
| 200 | + else | ||
| 201 | + { | ||
| 202 | + pictures = getSheetPictrues03((HSSFSheet) sheet, (HSSFWorkbook) wb); | ||
| 203 | + } | ||
| 189 | // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1 | 204 | // 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1 |
| 190 | int rows = sheet.getLastRowNum(); | 205 | int rows = sheet.getLastRowNum(); |
| 191 | 206 | ||
| @@ -318,12 +333,8 @@ public class ExcelUtil<T> | @@ -318,12 +333,8 @@ public class ExcelUtil<T> | ||
| 318 | { | 333 | { |
| 319 | val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); | 334 | val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); |
| 320 | } | 335 | } |
| 321 | - else if (ColumnType.IMAGE == attr.cellType()) | 336 | + else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) |
| 322 | { | 337 | { |
| 323 | - if (StringUtils.isNull(pictures)) | ||
| 324 | - { | ||
| 325 | - val = ""; | ||
| 326 | - } | ||
| 327 | PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); | 338 | PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); |
| 328 | if (image == null) | 339 | if (image == null) |
| 329 | { | 340 | { |
| @@ -1179,13 +1190,46 @@ public class ExcelUtil<T> | @@ -1179,13 +1190,46 @@ public class ExcelUtil<T> | ||
| 1179 | } | 1190 | } |
| 1180 | 1191 | ||
| 1181 | /** | 1192 | /** |
| 1182 | - * 获取Excel图片 | 1193 | + * 获取Excel2003图片 |
| 1194 | + * | ||
| 1195 | + * @param sheet 当前sheet对象 | ||
| 1196 | + * @param workbook 工作簿对象 | ||
| 1197 | + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData | ||
| 1198 | + */ | ||
| 1199 | + public static Map<String, PictureData> getSheetPictrues03(HSSFSheet sheet, HSSFWorkbook workbook) | ||
| 1200 | + { | ||
| 1201 | + Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); | ||
| 1202 | + List<HSSFPictureData> pictures = workbook.getAllPictures(); | ||
| 1203 | + if (!pictures.isEmpty()) | ||
| 1204 | + { | ||
| 1205 | + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) | ||
| 1206 | + { | ||
| 1207 | + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); | ||
| 1208 | + if (shape instanceof HSSFPicture) | ||
| 1209 | + { | ||
| 1210 | + HSSFPicture pic = (HSSFPicture) shape; | ||
| 1211 | + int pictureIndex = pic.getPictureIndex() - 1; | ||
| 1212 | + HSSFPictureData picData = pictures.get(pictureIndex); | ||
| 1213 | + String picIndex = String.valueOf(anchor.getRow1()) + "_" + String.valueOf(anchor.getCol1()); | ||
| 1214 | + sheetIndexPicMap.put(picIndex, picData); | ||
| 1215 | + } | ||
| 1216 | + } | ||
| 1217 | + return sheetIndexPicMap; | ||
| 1218 | + } | ||
| 1219 | + else | ||
| 1220 | + { | ||
| 1221 | + return sheetIndexPicMap; | ||
| 1222 | + } | ||
| 1223 | + } | ||
| 1224 | + | ||
| 1225 | + /** | ||
| 1226 | + * 获取Excel2007图片 | ||
| 1183 | * | 1227 | * |
| 1184 | * @param sheet 当前sheet对象 | 1228 | * @param sheet 当前sheet对象 |
| 1185 | * @param workbook 工作簿对象 | 1229 | * @param workbook 工作簿对象 |
| 1186 | * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData | 1230 | * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData |
| 1187 | */ | 1231 | */ |
| 1188 | - public static Map<String, PictureData> getSheetPictrues(XSSFSheet sheet, XSSFWorkbook workbook) | 1232 | + public static Map<String, PictureData> getSheetPictrues07(XSSFSheet sheet, XSSFWorkbook workbook) |
| 1189 | { | 1233 | { |
| 1190 | Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); | 1234 | Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); |
| 1191 | for (POIXMLDocumentPart dr : sheet.getRelations()) | 1235 | for (POIXMLDocumentPart dr : sheet.getRelations()) |
-
请 注册 或 登录 后发表评论