使用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 } }