java 图片以OLE形式插入Excel里,打开后是图片,双击后变成OLE对象的问题求解

 

使用了POI,spire与ASPOSE。均能够将图片文件封装成为OLE对象插入Excel中,但使用三种方式生成的新Excel文件,首次打开时OLE均以图片形式显示,双击查看图片后才会自动转化成OLE对象。

请问经验人士,是代码的问题嘛?

 

配置一下格式。应该是格式问题。

https://blog.csdn.net/chenssy/article/details/20524563

public class ExcelImageTest {
    public static void main(String[] args) {
         FileOutputStream fileOut = null;   
         BufferedImage bufferImg = null;   
        //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray  
        try {
            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();   
            bufferImg = ImageIO.read(new File("F:/图片/照片/无名氏/小昭11.jpg"));   
            ImageIO.write(bufferImg, "jpg", byteArrayOut);
            
            HSSFWorkbook wb = new HSSFWorkbook();   
            HSSFSheet sheet1 = wb.createSheet("test picture");  
            //画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
            HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();   
            //anchor主要用于设置图片的属性
            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8);   
            anchor.setAnchorType(3);   
            //插入图片  
            patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 
            fileOut = new FileOutputStream("D:/测试Excel.xls");   
            // 写入excel文件   
             wb.write(fileOut);   
             System.out.println("----Excle文件已生成------");
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(fileOut != null){
                 try {
                    fileOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

import com.spire.doc.documents.ImageType;
import com.spire.xls.*;
import com.spire.xls.core.IOleObject;
import com.spire.doc.Document;
 
import java.awt.*;
import java.awt.image.BufferedImage;
 
public class AddOLE {
 
    public static void main(String[] args) {
        //加载excel文档
        Workbook wb = new Workbook();
        wb.loadFromFile("test.xlsx");
 
        //获取第一个工作表
        Worksheet sheet = wb.getWorksheets().get(0);
 
        //获取Word文档图片
        String docx = "sample.docx";
        BufferedImage image = GetWordImage(docx);
 
        //插入OLE到工作表指定单元格
        IOleObject oleObject = sheet.getOleObjects().add(docx,image,OleLinkType.Embed);//插入指定类型的OLE
        oleObject.setLocation(sheet.getCellRange("A1"));//指定单元格
        oleObject.setObjectType(OleObjectType.WordDocument);//指定OLE对象类型(这里可支持多种类型)
 
        //保存文档
        wb.saveToFile("AddOLE.xlsx",ExcelVersion.Version2010);
        wb.dispose();
    }
    //定义一个GetWordImage(string docxFile) 方法获取图片,这里的图片来自于Word文档中的数据信息图像,将OLE对象插入到Excel工作表后,这个图像将显示在Excel工作表中
    static  BufferedImage GetWordImage(String docxFile)
    {
        //加载Word文档
        Document doc = new Document();
        doc.loadFromFile(docxFile);
 
        //将Word文档的第一页保存为图片
        Image olePicture = doc.saveToImages(0, ImageType.Bitmap);
        return (BufferedImage) olePicture;
    }
}