2013-07-31 3 views
2

Я экспортирую некоторые данные из своей системы. Я хочу визуализировать эти наборы данных на графике Excel. Я нашел и старый, закрытый вопрос, где решение пропало. Графики должны перерисовываться, когда я изменяю поле данных, это стандарт excel, я думаю.Создайте таблицу Excel в файле Excel

Я думаю, что он может работать так:

  • экспорта данных
  • создать вручную диаграмму с MS-Excel
  • сохранить и загрузить это в качестве шаблона во всех других будущих экспорта

Вы знаете, как это сделать с помощью POI с использованием Java? В частности, импорт диаграммы в качестве шаблона?

ответ

1

До сих пор, как говорится в apache POI limitation, «В настоящее время вы не можете создавать диаграммы. Однако вы можете создать диаграмму в Excel, изменить значения данных диаграммы с помощью HSSF и написать новую таблицу. Это возможно, потому что POI пытается сохраните существующие записи, насколько это возможно ».

Однако в моем случае я создал диаграмму вручную на листе excel, используя Named Ranges, и используя java, я обновляю именованные диапазоны в соответствии с моим требованием. Поскольку диаграмма основана на именованных диапазонах, поэтому она также обновляется.

Для Updation пожалуйста, проверьте here

+0

Благодаря Sankumarsingh, я всегда создавал Excel-документы с нуля пои. Не могли бы вы объяснить, как загрузить существующий файл .xls? –

+0

Загрузка выполняется так же просто, как создание. Вы можете воспользоваться помощью http://stackoverflow.com/a/17709121/624003 – Sankumarsingh

2

POI не дает вам эту функциональность, но Вы можете конвертировать или копировать диаграммы (графики) с помощью J XL или Aspose Cells (Aspose не бесплатно).

Это фрагмент кода, чтобы извлечь первенствовать диаграмму изображения

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

} 

я использовал J Excel

Смежные вопросы