Я пытаюсь прочитать изображение, которое я вставил перед собой на листе excel вместе с его позицией с помощью этого кода, он отлично работает на моей машине, но когда я переношу код на другой компьютер, я получаю исключение нулевого указателя в sheet.getDrawingPatriarch.getChildren(), я пытаюсь решить проблему, но я не нашел решение, кто-нибудь может мне помочь? Ниже приведен код:null указатель from sheet.drawingPatriarch.getChildren()
/* loop the sheet */
for (int i = 0; i < sheetNumbers; i++) {
sheet = wb.getSheetAt(i);
/* create map to store id map with picture */
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
/* determine to use 2003's excel get pic method or 2007++ get picture method */
if (fileExt.equals("xls")) {
if(((HSSFSheet) sheet).getDrawingEscherAggregate() != null)
sheetIndexPicMap = getSheetPictrues03(i, (HSSFSheet) sheet, (HSSFWorkbook) wb);
}
/* store the picture and id map into a list */
sheetList.add(sheetIndexPicMap);
}
printImg(sheetList);
}
public static Map<String, PictureData> getSheetPictrues03(int sheetNum,
HSSFSheet sheet, HSSFWorkbook workbook) {
Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
List<HSSFPictureData> pictures = workbook.getAllPictures();
if (pictures.size() != 0) {
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);
HSSFRow row = sheet.getRow(anchor.getRow1());
HSSFCell cell = row.getCell(0);
String picIndex = "ID"+String.valueOf(cell);
sheetIndexPicMap.put(picIndex, picData);
}
}
return sheetIndexPicMap;
} else {
return null;
}
}
public static void printImg(List<Map<String, PictureData>> sheetList) throws IOException {
for (Map<String, PictureData> map : sheetList) {
Object key[] = map.keySet().toArray();
for (int i = 0; i < map.size(); i++) {
/*get picture data*/
PictureData pic = map.get(key[i]);
/*get row id where the picture reside*/
String picName = key[i].toString();
/*get file extension of the pictur*/
String ext = pic.suggestFileExtension();
byte[] data = pic.getData();
FileOutputStream out = new FileOutputStream("pic" + picName + "." + ext);
out.write(data);
out.close();
}
}
}
Возможно, что 'sheet' имеет значение null или' sheet.getDrawingPatriarch() 'возвращает null. Введем там нулевую проверку. –
У вас есть одинаковые баночки Apache POI на обеих машинах? И у них нет лишних? – Gagravarr
Я постараюсь проверить это, я думаю, что это может быть причиной, моя машина работает с версией версии 12, а на другой машине работает версия версии 7, может ли это быть причиной? –