使用java提取EXcel中的图表作为图像 [英] Extracting chart in EXcel as image using java

查看:1770
本文介绍了使用java提取EXcel中的图表作为图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在excel表(OLE2和ooxml格式)中提取图像文本公式超链接图表等。我使用Java Apache POI API同样。我可以提取所有的信息,但图表。我发现POI没有用于提取图表或将它们转换为图像的API。可以建议任何替代方法来提取图表。我正在寻找开源解决方案。

解决方案

您可以使用J XL或Aspose Cells




这是用于提取excel图表的代码片段

code> public class ExportChartToImage
{
public static void main(String [] args)throws Exception
{
//开始Excel
应用程序excelApp = new应用();
excelApp.setVisible(true);

//创建测试工作簿
工作簿工作簿= excelApp.createWorkbook(/ home / tejus / Desktop / Chart Test);

//获取第一个(和唯一)工作表
final Worksheet worksheet1 = workbook.getWorksheet(1);

//用示例数据填充第一个工作表
worksheet1.getCell(A1)。setValue(Date);
worksheet1.getCell(A2)。setValue(March 1);
worksheet1.getCell(A3)。setValue(March 8);
worksheet1.getCell(A4)。setValue(March 15);

worksheet1.getCell(B1)。setValue(Customer);
worksheet1.getCell(B2)。setValue(Smith);
worksheet1.getCell(B3)。setValue(Jones);
worksheet1.getCell(B4)。setValue(James);

workheet1.getCell(C1)。setValue(Sales);
worksheet1.getCell(C2)。setValue(23);
worksheet1.getCell(C3)。setValue(17);
worksheet1.getCell(C4)。setValue(39);

excelApp.getOleMessageLoop()。doInvokeAndWait(new Runnable()
{
public void run()
{
final Variant unspecified = Variant.createUnspecifiedParameter ();
final Int32 localeID = new Int32(LocaleID.LOCALE_SYSTEM_DEFAULT);

范围sourceDataNativePeer = worksheet1.getRange(A1:C4)。getPeer();
_Worksheet worksheetNativePeer = worksheet1.getPeer();

IDispatch chartObjectDispatch = worksheetNativePeer.chartObjects(unspecified,localeID);

ChartObjectsImpl chartObjects = new ChartObjectsImpl(chartObjectDispatch);
ChartObject chartObject = chartObjects.add(new DoubleFloat(100),new DoubleFloat(150),new DoubleFloat(300),new DoubleFloat(225));

_Chart chart = chartObject.getChart $ b chart.setSourceData(sourceDataNativePeer,new Variant(XlRowCol.xlRows));

BStr fileName = new BStr(/ home / tejus / Desktop / chart.gif);
Variant filterName = new Variant(gif);
Variant interactive = new Variant(false);

chart.export(fileName,filterName,interactive);

chart.setAutoDelete(false);
chart.release();

chartObject.setAutoDelete(false);
chartObject.release();

chartObjects.setAutoDelete(false);
chartObjects.release();

chartObjectDispatch.setAutoDelete(false);
chartObjectDispatch.release();
}
});

System.out.println(按Enter终止应用程序);
System.in.read();

//关闭MS Excel应用程序。
boolean saveChanges = false;
workbook.close(saveChanges);
boolean forceQuit = true;
excelApp.close(forceQuit);
}

}

我使用J excel


I am trying to extract images text formula Hyperlinks charts etc. in excel sheet (OLE2 and ooxml formats). I am using Java Apache POI API for the same. I am able to extract all information but chart. I find that POI has no APIs for extracting charts or converting them to images. Can some suggest any alternate ways to extract charts. I am looking for open source solutions.

解决方案

You can convert or copy charts(graphs) using J XL or Aspose Cells(Aspose is not free).

This is the code snippet to extract excel chart to image

public class ExportChartToImage
{
    public static void main(String[] args) throws Exception
    {
        //Start Excel
        Application excelApp = new Application();
        excelApp.setVisible(true);

        //Create test workbook
        Workbook workbook = excelApp.createWorkbook("/home/tejus/Desktop/Chart Test");

        //Get the first (and the only) worksheet
        final Worksheet worksheet1 = workbook.getWorksheet(1);

        //Fill-in the first worksheet with sample data
        worksheet1.getCell("A1").setValue("Date");
        worksheet1.getCell("A2").setValue("March 1");
        worksheet1.getCell("A3").setValue("March 8");
        worksheet1.getCell("A4").setValue("March 15");

        worksheet1.getCell("B1").setValue("Customer");
        worksheet1.getCell("B2").setValue("Smith");
        worksheet1.getCell("B3").setValue("Jones");
        worksheet1.getCell("B4").setValue("James");

        worksheet1.getCell("C1").setValue("Sales");
        worksheet1.getCell("C2").setValue("23");
        worksheet1.getCell("C3").setValue("17");
        worksheet1.getCell("C4").setValue("39");

        excelApp.getOleMessageLoop().doInvokeAndWait(new Runnable()
        {
            public void run()
            {
                final Variant unspecified = Variant.createUnspecifiedParameter();
                final Int32 localeID = new Int32(LocaleID.LOCALE_SYSTEM_DEFAULT);

                Range sourceDataNativePeer = worksheet1.getRange("A1:C4").getPeer();
                _Worksheet worksheetNativePeer = worksheet1.getPeer();

                IDispatch chartObjectDispatch = worksheetNativePeer.chartObjects(unspecified, localeID);

                ChartObjectsImpl chartObjects = new ChartObjectsImpl(chartObjectDispatch);
                ChartObject chartObject = chartObjects.add(new DoubleFloat(100), new DoubleFloat(150), new DoubleFloat(300), new DoubleFloat(225));

                _Chart chart = chartObject.getChart();
                chart.setSourceData(sourceDataNativePeer, new Variant(XlRowCol.xlRows));

                BStr fileName = new BStr("/home/tejus/Desktop/chart.gif");
                Variant filterName = new Variant("gif");
                Variant interactive = new Variant(false);

                chart.export(fileName, filterName, interactive);

                chart.setAutoDelete(false);
                chart.release();

                chartObject.setAutoDelete(false);
                chartObject.release();

                chartObjects.setAutoDelete(false);
                chartObjects.release();

                chartObjectDispatch.setAutoDelete(false);
                chartObjectDispatch.release();
            }
        });

        System.out.println("Press 'Enter' to terminate the application");
        System.in.read();

        //Close the MS Excel application.
        boolean saveChanges = false;
        workbook.close(saveChanges);
        boolean forceQuit = true;
        excelApp.close(forceQuit);
    }

}

i used J excel

这篇关于使用java提取EXcel中的图表作为图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆