Java ApachePOI-从单页获取图片
我试图从一张工作表中加载图片,但是在这里只有一个示例如何从整个文档中加载图片(Java ApachePOI-从单页获取图片,java,apache-poi,xlsx,Java,Apache Poi,Xlsx,我试图从一张工作表中加载图片,但是在这里只有一个示例如何从整个文档中加载图片(workbook.getAllPictures();)我认为没有像getAllPictures()这样简单的东西可以用于单独的工作表。一种解决方案是这样做(假设您使用的是XSSF): 一般的想法是,我们使用createDrawingPachur()从工作表中检索现有的电子表格ML图形 然后,我们可以使用getShapes()检索工作表中包含的每个形状 我认为没有像getAllPictures()这样简单的东西可以用于单
workbook.getAllPictures();
)我认为没有像getAllPictures()
这样简单的东西可以用于单独的工作表。一种解决方案是这样做(假设您使用的是XSSF):
一般的想法是,我们使用createDrawingPachur()
从工作表中检索现有的电子表格ML图形
然后,我们可以使用
getShapes()
检索工作表中包含的每个形状 我认为没有像getAllPictures()
这样简单的东西可以用于单独的工作表。一种解决方案是这样做(假设您使用的是XSSF):
一般的想法是,我们使用createDrawingPachur()
从工作表中检索现有的电子表格ML图形
然后,我们可以使用
getShapes()
检索工作表中包含的每个形状 由于您已经开始使用SS公共接口,您可能希望有一个在两种API中都能工作的解决方案。不幸的是,DrawingPatrich尚未完全普及:(
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.hssf.usermodel.HSSFPatriarch;
导入org.apache.poi.hssf.usermodel.HSSFShape;
导入org.apache.poi.ss.usermodel.Drawing;
导入org.apache.poi.ss.usermodel.Picture;
导入org.apache.poi.ss.usermodel.PictureData;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
导入org.apache.poi.xssf.usermodel.XSSFDrawing;
导入org.apache.poi.xssf.usermodel.XSSFShape;
公共类XlsPictures{
公共静态void main(字符串args[])引发异常{
工作簿wb=WorkbookFactory.create(新文件(“picture.xls”);
表sh=wb.getSheetAt(0);
Drawing-draw=sh.createDrawingPachur();
List pics=new ArrayList();
if(绘制HSSFPatriarch的实例){
HSSFPatriarch hp=(HSSFPatriarch)绘图;
对于(HSSFShape hs:hp.getChildren()){
if(图片的hs实例){
图片添加((图片)hs);
}
}
}否则{
XSSFDrawing xdraw=(XSSFDrawing)绘图;
对于(XSSFShape xs:xdraw.getShapes()){
if(图片的xs实例){
图片添加((图片)xs);
}
}
}
用于(图p:pics){
PictureData pd=p.getPictureData();
字节saveme[]=pd.getData();
}
}
}
由于您已经开始使用SS通用接口,您可能希望有一个在两种API中都能工作的解决方案。不幸的是,DrawingPatrich尚未完全实现SS通用化:(
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.hssf.usermodel.HSSFPatriarch;
导入org.apache.poi.hssf.usermodel.HSSFShape;
导入org.apache.poi.ss.usermodel.Drawing;
导入org.apache.poi.ss.usermodel.Picture;
导入org.apache.poi.ss.usermodel.PictureData;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
导入org.apache.poi.xssf.usermodel.XSSFDrawing;
导入org.apache.poi.xssf.usermodel.XSSFShape;
公共类XlsPictures{
公共静态void main(字符串args[])引发异常{
工作簿wb=WorkbookFactory.create(新文件(“picture.xls”);
表sh=wb.getSheetAt(0);
Drawing-draw=sh.createDrawingPachur();
List pics=new ArrayList();
if(绘制HSSFPatriarch的实例){
HSSFPatriarch hp=(HSSFPatriarch)绘图;
对于(HSSFShape hs:hp.getChildren()){
if(图片的hs实例){
图片添加((图片)hs);
}
}
}否则{
XSSFDrawing xdraw=(XSSFDrawing)绘图;
对于(XSSFShape xs:xdraw.getShapes()){
if(图片的xs实例){
图片添加((图片)xs);
}
}
}
用于(图p:pics){
PictureData pd=p.getPictureData();
字节saveme[]=pd.getData();
}
}
}
why downvote?为什么我的要求不清楚?为什么downvote?为什么我的要求不清楚?你知道如何使用poi从excel检索图表吗。因为清楚地获取形状()不从excel中检索图表,只从图像中检索图表!!@KNDheeraj我没有检查如何处理图表,但excel/Powerpoint中的图表不时会在邮件列表中弹出。你最好的办法是在或那里询问…你知道如何使用poi从excel中检索图表吗。因为显然getShapes()不从excel中检索图表,只检索图像!!@KNDheeraj我没有检查如何处理图表,但excel/Powerpoint中的图表不时会在邮件列表中弹出。您最好的选择是在或在那里询问。。。
public static void main(String[] args) {
try {
InputStream inp = new FileInputStream("workbook.xlsx");
Workbook wb = WorkbookFactory.create(inp);
XSSFSheet sheet1 = (XSSFSheet)wb.getSheetAt(0);
//returns the existing SpreadsheetDrawingML from the sheet, or creates a new one
XSSFDrawing drawing = sheet1.createDrawingPatriarch();
//loop through all of the shapes in the drawing area
for(XSSFShape shape : drawing.getShapes()){
if(shape instanceof Picture){
//convert the shape into a picture
XSSFPicture picture = (XSSFPicture)shape;
//your logic here
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFShape;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.PictureData;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFShape;
public class XlsPictures {
public static void main(String args[]) throws Exception {
Workbook wb = WorkbookFactory.create(new File("picture.xls"));
Sheet sh = wb.getSheetAt(0);
Drawing draw = sh.createDrawingPatriarch();
List<Picture> pics = new ArrayList<Picture>();
if (draw instanceof HSSFPatriarch) {
HSSFPatriarch hp = (HSSFPatriarch)draw;
for (HSSFShape hs : hp.getChildren()) {
if (hs instanceof Picture) {
pics.add((Picture)hs);
}
}
} else {
XSSFDrawing xdraw = (XSSFDrawing)draw;
for (XSSFShape xs : xdraw.getShapes()) {
if (xs instanceof Picture) {
pics.add((Picture)xs);
}
}
}
for (Picture p : pics) {
PictureData pd = p.getPictureData();
byte saveme[] = pd.getData();
}
}
}