在Excel文件中创buildExcel图表

我从我的系统中导出一些数据。 我想要在Excel图表中将这些数据集可视化。 我已经find和老,封闭的问题,解决scheme失踪。 当我更改数据字段时,图表应该重绘,这是我认为的excel标准。

我认为这可能会这样工作:

  • 导出数据
  • 用MS-Excel手动创build图表
  • 保存并将其作为所有其他未来导出中的模板加载

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

到目前为止,由于apache的POI限制是说“你目前不能创build图表,你可以在Excel中创build一个图表,使用HSSF修改图表的数据值并写出一个新的电子表格,这是因为POI试图保留现有的logging尽可能保持完整“。

然而,在我的情况下,我已经创build了Excel图表使用命名的范围手动创build图表,并使用java,我更新命名范围根据我的要求。 由于图表是基于命名范围,所以它也得到更新。

更新请点击这里

POI不会为您提供该function,但您可以使用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); } } 

我用J excel