Excel注解图片导入兼容xls
This commit is contained in:
parent
5139265d32
commit
3003bb0f50
@ -19,6 +19,12 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
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.ooxml.POIXMLDocumentPart;
|
||||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
@ -185,7 +191,16 @@ public class ExcelUtil<T>
|
|||||||
{
|
{
|
||||||
throw new IOException("文件sheet不存在");
|
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
|
// 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
|
||||||
int rows = sheet.getLastRowNum();
|
int rows = sheet.getLastRowNum();
|
||||||
|
|
||||||
@ -318,12 +333,8 @@ public class ExcelUtil<T>
|
|||||||
{
|
{
|
||||||
val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator());
|
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());
|
PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey());
|
||||||
if (image == null)
|
if (image == null)
|
||||||
{
|
{
|
||||||
@ -1179,13 +1190,46 @@ public class ExcelUtil<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取Excel图片
|
* 获取Excel2003图片
|
||||||
*
|
*
|
||||||
* @param sheet 当前sheet对象
|
* @param sheet 当前sheet对象
|
||||||
* @param workbook 工作簿对象
|
* @param workbook 工作簿对象
|
||||||
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
|
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
|
||||||
*/
|
*/
|
||||||
public static Map<String, PictureData> getSheetPictrues(XSSFSheet sheet, XSSFWorkbook workbook)
|
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> getSheetPictrues07(XSSFSheet sheet, XSSFWorkbook workbook)
|
||||||
{
|
{
|
||||||
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
|
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
|
||||||
for (POIXMLDocumentPart dr : sheet.getRelations())
|
for (POIXMLDocumentPart dr : sheet.getRelations())
|
||||||
@ -1209,4 +1253,4 @@ public class ExcelUtil<T>
|
|||||||
}
|
}
|
||||||
return sheetIndexPicMap;
|
return sheetIndexPicMap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user