import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.AnyConverter; import com.sun.star.uno.Type; import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.frame.XComponentLoader; import com.sun.star.document.XEmbeddedObjectSupplier; import com.sun.star.awt.ActionEvent; import com.sun.star.awt.Rectangle; import com.sun.star.beans.XPropertySet; import com.sun.star.beans.PropertyValue; import com.sun.star.container.*; import com.sun.star.chart.*; import com.sun.star.table.*; import com.sun.star.sheet.*; import com.sun.star.script.provider.XScriptContext; createSpreadsheet() { loader = (XComponentLoader) UnoRuntime.queryInterface( XComponentLoader.class, XSCRIPTCONTEXT.getDesktop()); comp = loader.loadComponentFromURL( "private:factory/scalc", "_blank", 4, new PropertyValue[0]); doc = (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, comp); index = (XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, doc.getSheets()); sheet = (XSpreadsheet) AnyConverter.toObject( new Type(com.sun.star.sheet.XSpreadsheet.class), index.getByIndex(0)); return sheet; } addData(sheet, date, total, free) { // set the labels sheet.getCellByPosition(0, 0).setFormula("Used"); sheet.getCellByPosition(0, 1).setFormula("Free"); sheet.getCellByPosition(0, 2).setFormula("Total"); // set the values in the cells sheet.getCellByPosition(1, 0).setValue(total - free); sheet.getCellByPosition(1, 1).setValue(free); sheet.getCellByPosition(1, 2).setValue(total); } addChart(sheet) { rect = new Rectangle(); rect.X = 500; rect.Y = 3000; rect.Width = 10000; rect.Height = 8000; range = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, sheet); myRange = range.getCellRangeByName("A1:B2"); rangeAddr = (XCellRangeAddressable) UnoRuntime.queryInterface(XCellRangeAddressable.class, myRange); myAddr = rangeAddr.getRangeAddress(); CellRangeAddress[] addr = new CellRangeAddress[1]; addr[0] = myAddr; supp = (XTableChartsSupplier) UnoRuntime.queryInterface( XTableChartsSupplier.class, sheet); charts = supp.getCharts(); charts.addNewByName("Example", rect, addr, false, true); try { Thread.sleep(3000); } catch (java.lang.InterruptedException e) { } // get the diagram and Change some of the properties chartsAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, charts); tchart = (XTableChart) UnoRuntime.queryInterface( XTableChart.class, chartsAccess.getByName("Example")); eos = (XEmbeddedObjectSupplier) UnoRuntime.queryInterface( XEmbeddedObjectSupplier.class, tchart ); xifc = eos.getEmbeddedObject(); xChart = (XChartDocument) UnoRuntime.queryInterface(XChartDocument.class, xifc); xDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, xChart); diagObject = xDocMSF.createInstance("com.sun.star.chart.PieDiagram"); xDiagram = (XDiagram) UnoRuntime.queryInterface(XDiagram.class, diagObject); xChart.setDiagram(xDiagram); propset = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xChart.getTitle() ); propset.setPropertyValue("String", "JVM Memory Usage"); } runtime = Runtime.getRuntime(); generator = new Random(); date = new Date(); // allocate a random number of bytes so that the data changes len = (int)(generator.nextFloat() * runtime.freeMemory() / 5); bytes = new byte[len]; sheet = createSpreadsheet(); addData(sheet, date.toString(), runtime.totalMemory(), runtime.freeMemory()); addChart(sheet); return 0;