使用JavaScript从excel中提取图像时交换图像

我的问题是在使用java脚本在excel中提取图像时,图像被交换到某个地方。[!] [1] [1]

使用java代码,我可以在这里得到这样的

a94行 – 保存图片94
a95行 – 保存图片95
a96行 – 保存图片96

我想像波纹pipe甲板一样保存

a94行 – 保存图片94
a95行 – 节约图片96
a96行 – 保存图片95

我想要保存每个单元格的图像。 请给我一些想法。我必须改变我的Java代码。
我的代码是

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; 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.PictureData; public class ReadWriteExcelFile1 { public static void readXLSFile() throws IOException { InputStream ExcelFileToRead = new FileInputStream("E://Eclips//ExcelExtract1.xls"); HSSFWorkbook wb = new HSSFWorkbook(ExcelFileToRead); HSSFSheet sheet=wb.getSheetAt(0); HSSFRow row; HSSFCell cell; Iterator rows = sheet.rowIterator(); /// row=(HSSFRow) rows.next(); List lst = wb.getAllPictures(); int i=1; for (Iterator it = lst.iterator(); it.hasNext(); ) { PictureData pict = (PictureData)it.next(); String ext = pict.suggestFileExtension(); byte[] data = pict.getData(); if (ext.equals("jpeg") || ext.equals("jpg") || ext.equals("png")) { row=(HSSFRow) rows.next(); Iterator cells = row.cellIterator(); cell=(HSSFCell) cells.next(); //if(i<=100) //{ System.out.print("==>"+cell.getStringCellValue()+" == "+cell.getStringCellValue()+"."+ext+"\n"); System.out.println(row); FileOutputStream out = new FileOutputStream("E://Eclips//Output//"+cell.getStringCellValue()+"."+ext); out.write(data); out.close(); //} i++; //} //if(i>=101){ // break; //} } } } public static void main(String[] args) throws IOException { readXLSFile(); System.out.println("Export is completed"); } } 

图片没有直接分配给单元格。 它们通过ClientAnchor与单元格相关。 Workbook.getAllPictures()返回的列表没有sorting,与实际单元格没有关系。

您应该能够通过Workbook的“工程Drawing类和“工程Drawing获取此信息:

 Drawing drawing = sheet.createDrawingPatriarch(); for(HSSFShape shape : ((HSSFPatriarch)drawing).getChildren()) { if(shape instanceof HSSFPicture) { HSSFClientAnchor anchor = ((HSSFPicture)shape).getClientAnchor(); ... anchor has the cell-row/column area that it is "anchored" at } }