2013-07-31 407 views
2

我从我的系统中导出一些数据。我想在Excel图表中将这些数据集可视化。我发现并解决了问题,找到了解决方案。当我更改数据字段时,图表应该重绘,我猜这是excel标准。在Excel文件中创建Excel图表

我认为它可能以这种方式工作:

  • 出口数据
  • 手动创建与MS-Excel的图表
  • 保存,并在所有其它未来出口加载这个为模板

你知道如何用POI使用Java吗?特别是图表的导入作为模板?

回答

1

截至目前作为apache POI limitation是说“您当前无法创建图表。但是,您可以在Excel中创建一个图表,使用HSSF修改图表数据值和出谱写新的电子表格。这是可能的,因为POI尝试尽可能保持现有记录完整“。

但在我的情况下,我已经使用命名范围在Excel表单上手动创建了一个图表,并且使用java,我按照我的要求更新了命名范围。由于该图表基于命名范围,所以它也会更新。

对于更新用请here

+0

由于Sankumarsingh,我一直具有POI创建的Excel的文档从头。你能解释一下,如何加载一个现有的.xls文件? –

+0

加载与创建一样简单。您可以从http://stackoverflow.com/a/17709121/624003获取帮助 – Sankumarsingh

2

POI不给你说的功能,但你可以使用j个XL或阅读Aspose细胞(阅读Aspose是不是免费的)转换或复制图表(图)。

这是代码片段来提取Excel图表对图像

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); 
    } 

} 

我用Ĵ的excel