diff options
Diffstat (limited to 'odk/examples/java/Spreadsheet/SCalc.java')
-rw-r--r-- | odk/examples/java/Spreadsheet/SCalc.java | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/odk/examples/java/Spreadsheet/SCalc.java b/odk/examples/java/Spreadsheet/SCalc.java new file mode 100644 index 000000000..90c5ce00f --- /dev/null +++ b/odk/examples/java/Spreadsheet/SCalc.java @@ -0,0 +1,408 @@ +/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + + +// comment: Step 1: get the remote component context from the office +// Step 2: open an empty calc document +// Step 3: create cell styles +// Step 4: get the sheet an insert some data +// Step 5: apply the created cell styles +// Step 6: insert a 3D Chart + + +import com.sun.star.awt.Rectangle; + +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.XPropertySet; + +import com.sun.star.chart.XDiagram; +import com.sun.star.chart.XChartDocument; + +import com.sun.star.container.XIndexAccess; +import com.sun.star.container.XNameAccess; +import com.sun.star.container.XNameContainer; + +import com.sun.star.document.XEmbeddedObjectSupplier; + +import com.sun.star.frame.XComponentLoader; + +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.lang.XMultiComponentFactory; + +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XInterface; +import com.sun.star.uno.XComponentContext; + +import com.sun.star.sheet.XCellRangeAddressable; +import com.sun.star.sheet.XSpreadsheet; +import com.sun.star.sheet.XSpreadsheets; +import com.sun.star.sheet.XSpreadsheetDocument; + +import com.sun.star.style.XStyleFamiliesSupplier; + +import com.sun.star.table.CellRangeAddress; +import com.sun.star.table.XCell; +import com.sun.star.table.XCellRange; +import com.sun.star.table.XTableChart; +import com.sun.star.table.XTableCharts; +import com.sun.star.table.XTableChartsSupplier; + + +public class SCalc { + + public static void main(String args[]) { + + //oooooooooooooooooooooooooooStep 1oooooooooooooooooooooooooooooooooooooooooo + // call UNO bootstrap method and get the remote component context form + // the a running office (office will be started if necessary) + + XComponentContext xContext = null; + + // get the remote office component context + try { + xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); + System.out.println("Connected to a running office ..."); + } catch( Exception e) { + e.printStackTrace(System.err); + System.exit(1); + } + + //oooooooooooooooooooooooooooStep 2oooooooooooooooooooooooooooooooooooooooooo + // open an empty document. In this case it's a calc document. + // For this purpose an instance of com.sun.star.frame.Desktop + // is created. The desktop provides the XComponentLoader interface, + // which is used to open the document via loadComponentFromURL + + + //Open document + + //Calc + XSpreadsheetDocument myDoc = null; +// XCell oCell = null; + + System.out.println("Opening an empty Calc document"); + myDoc = openCalc(xContext); + + + + + //oooooooooooooooooooooooooooStep 3oooooooooooooooooooooooooooooooooooooooooo + // create cell styles. + // For this purpose get the StyleFamiliesSupplier and the family + // CellStyle. Create an instance of com.sun.star.style.CellStyle and + // add it to the family. Now change some properties + + + try { + XStyleFamiliesSupplier xSFS = UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, myDoc); + XNameAccess xSF = xSFS.getStyleFamilies(); + XNameAccess xCS = UnoRuntime.queryInterface( + XNameAccess.class, xSF.getByName("CellStyles")); + XMultiServiceFactory oDocMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, myDoc ); + XNameContainer oStyleFamilyNameContainer = UnoRuntime.queryInterface( + XNameContainer.class, xCS); + XInterface oInt1 = (XInterface) oDocMSF.createInstance( + "com.sun.star.style.CellStyle"); + oStyleFamilyNameContainer.insertByName("My Style", oInt1); + XPropertySet oCPS1 = UnoRuntime.queryInterface( + XPropertySet.class, oInt1 ); + oCPS1.setPropertyValue("IsCellBackgroundTransparent", Boolean.FALSE); + oCPS1.setPropertyValue("CellBackColor",Integer.valueOf(6710932)); + oCPS1.setPropertyValue("CharColor",Integer.valueOf(16777215)); + XInterface oInt2 = (XInterface) oDocMSF.createInstance( + "com.sun.star.style.CellStyle"); + oStyleFamilyNameContainer.insertByName("My Style2", oInt2); + XPropertySet oCPS2 = UnoRuntime.queryInterface( + XPropertySet.class, oInt2 ); + oCPS2.setPropertyValue("IsCellBackgroundTransparent", Boolean.FALSE); + oCPS2.setPropertyValue("CellBackColor",Integer.valueOf(13421823)); + } catch (Exception e) { + e.printStackTrace(System.err); + } + + + + //oooooooooooooooooooooooooooStep 4oooooooooooooooooooooooooooooooooooooooooo + // get the sheet an insert some data. + // Get the sheets from the document and then the first from this container. + // Now some data can be inserted. For this purpose get a Cell via + // getCellByPosition and insert into this cell via setValue() (for floats) + // or setFormula() for formulas and Strings + + + + XSpreadsheet xSheet=null; + + try { + System.out.println("Getting spreadsheet") ; + XSpreadsheets xSheets = myDoc.getSheets() ; + XIndexAccess oIndexSheets = UnoRuntime.queryInterface( + XIndexAccess.class, xSheets); + xSheet = UnoRuntime.queryInterface( + XSpreadsheet.class, oIndexSheets.getByIndex(0)); + + } catch (Exception e) { + System.out.println("Couldn't get Sheet " +e); + e.printStackTrace(System.err); + } + + + + System.out.println("Creating the Header") ; + + insertIntoCell(1,0,"JAN",xSheet,""); + insertIntoCell(2,0,"FEB",xSheet,""); + insertIntoCell(3,0,"MAR",xSheet,""); + insertIntoCell(4,0,"APR",xSheet,""); + insertIntoCell(5,0,"MAI",xSheet,""); + insertIntoCell(6,0,"JUN",xSheet,""); + insertIntoCell(7,0,"JUL",xSheet,""); + insertIntoCell(8,0,"AUG",xSheet,""); + insertIntoCell(9,0,"SEP",xSheet,""); + insertIntoCell(10,0,"OCT",xSheet,""); + insertIntoCell(11,0,"NOV",xSheet,""); + insertIntoCell(12,0,"DEC",xSheet,""); + insertIntoCell(13,0,"SUM",xSheet,""); + + + System.out.println("Fill the lines"); + + insertIntoCell(0,1,"Smith",xSheet,""); + insertIntoCell(1,1,"42",xSheet,"V"); + insertIntoCell(2,1,"58.9",xSheet,"V"); + insertIntoCell(3,1,"-66.5",xSheet,"V"); + insertIntoCell(4,1,"43.4",xSheet,"V"); + insertIntoCell(5,1,"44.5",xSheet,"V"); + insertIntoCell(6,1,"45.3",xSheet,"V"); + insertIntoCell(7,1,"-67.3",xSheet,"V"); + insertIntoCell(8,1,"30.5",xSheet,"V"); + insertIntoCell(9,1,"23.2",xSheet,"V"); + insertIntoCell(10,1,"-97.3",xSheet,"V"); + insertIntoCell(11,1,"22.4",xSheet,"V"); + insertIntoCell(12,1,"23.5",xSheet,"V"); + insertIntoCell(13,1,"=SUM(B2:M2)",xSheet,""); + + + insertIntoCell(0,2,"Jones",xSheet,""); + insertIntoCell(1,2,"21",xSheet,"V"); + insertIntoCell(2,2,"40.9",xSheet,"V"); + insertIntoCell(3,2,"-57.5",xSheet,"V"); + insertIntoCell(4,2,"-23.4",xSheet,"V"); + insertIntoCell(5,2,"34.5",xSheet,"V"); + insertIntoCell(6,2,"59.3",xSheet,"V"); + insertIntoCell(7,2,"27.3",xSheet,"V"); + insertIntoCell(8,2,"-38.5",xSheet,"V"); + insertIntoCell(9,2,"43.2",xSheet,"V"); + insertIntoCell(10,2,"57.3",xSheet,"V"); + insertIntoCell(11,2,"25.4",xSheet,"V"); + insertIntoCell(12,2,"28.5",xSheet,"V"); + insertIntoCell(13,2,"=SUM(B3:M3)",xSheet,""); + + insertIntoCell(0,3,"Brown",xSheet,""); + insertIntoCell(1,3,"31.45",xSheet,"V"); + insertIntoCell(2,3,"-20.9",xSheet,"V"); + insertIntoCell(3,3,"-117.5",xSheet,"V"); + insertIntoCell(4,3,"23.4",xSheet,"V"); + insertIntoCell(5,3,"-114.5",xSheet,"V"); + insertIntoCell(6,3,"115.3",xSheet,"V"); + insertIntoCell(7,3,"-171.3",xSheet,"V"); + insertIntoCell(8,3,"89.5",xSheet,"V"); + insertIntoCell(9,3,"41.2",xSheet,"V"); + insertIntoCell(10,3,"71.3",xSheet,"V"); + insertIntoCell(11,3,"25.4",xSheet,"V"); + insertIntoCell(12,3,"38.5",xSheet,"V"); + insertIntoCell(13,3,"=SUM(A4:L4)",xSheet,""); + + + + //oooooooooooooooooooooooooooStep 5oooooooooooooooooooooooooooooooooooooooooo + // apply the created cell style. + // For this purpose get the PropertySet of the Cell and change the + // property CellStyle to the appropriate value. + + + // change backcolor + chgbColor( 1 , 0, 13, 0, "My Style", xSheet ); + chgbColor( 0 , 1, 0, 3, "My Style", xSheet ); + chgbColor( 1 , 1, 13, 3, "My Style2", xSheet ); + + + + //oooooooooooooooooooooooooooStep 6oooooooooooooooooooooooooooooooooooooooooo + // insert a 3D chart. + // get the CellRange which holds the data for the chart and its RangeAddress + // get the TableChartSupplier from the sheet and then the TableCharts from it. + // add a new chart based on the data to the TableCharts. + // get the ChartDocument, which provide the Diagram. Change the properties + // Dim3D (3 dimension) and String (the title) of the diagram. + + + // insert a chart + + Rectangle oRect = new Rectangle(); + oRect.X = 500; + oRect.Y = 3000; + oRect.Width = 25000; + oRect.Height = 11000; + + XCellRange oRange = UnoRuntime.queryInterface( + XCellRange.class, xSheet); + XCellRange myRange = oRange.getCellRangeByName("A1:N4"); + XCellRangeAddressable oRangeAddr = UnoRuntime.queryInterface(XCellRangeAddressable.class, myRange); + CellRangeAddress myAddr = oRangeAddr.getRangeAddress(); + + CellRangeAddress[] oAddr = new CellRangeAddress[1]; + oAddr[0] = myAddr; + XTableChartsSupplier oSupp = UnoRuntime.queryInterface( + XTableChartsSupplier.class, xSheet); + + XTableChart oChart = null; + + System.out.println("Insert Chart"); + + XTableCharts oCharts = oSupp.getCharts(); + oCharts.addNewByName("Example", oRect, oAddr, true, true); + + // get the diagram and change some of the properties + + try { + oChart = (UnoRuntime.queryInterface( + XTableChart.class, UnoRuntime.queryInterface( + XNameAccess.class, oCharts).getByName("Example"))); + XEmbeddedObjectSupplier oEOS = UnoRuntime.queryInterface(XEmbeddedObjectSupplier.class, oChart); + XInterface oInt = oEOS.getEmbeddedObject(); + XChartDocument xChart = UnoRuntime.queryInterface( + XChartDocument.class,oInt); + XDiagram oDiag = xChart.getDiagram(); + System.out.println("Change Diagram to 3D"); + XPropertySet oCPS = UnoRuntime.queryInterface( + XPropertySet.class, oDiag ); + oCPS.setPropertyValue("Dim3D", Boolean.TRUE); + System.out.println("Change the title"); + Thread.sleep(200); + XPropertySet oTPS = UnoRuntime.queryInterface( + XPropertySet.class, xChart.getTitle() ); + oTPS.setPropertyValue("String","The new title"); + } catch (Exception e){ + System.err.println("Changing Properties failed "+e); + e.printStackTrace(System.err); + } + + System.out.println("done"); + System.exit(0); + } + + public static XSpreadsheetDocument openCalc(XComponentContext xContext) + { + //define variables + XMultiComponentFactory xMCF = null; + XComponentLoader xCLoader; + XSpreadsheetDocument xSpreadSheetDoc = null; + XComponent xComp = null; + + try { + // get the service manager from the office + xMCF = xContext.getServiceManager(); + + // create a new instance of the desktop + Object oDesktop = xMCF.createInstanceWithContext( + "com.sun.star.frame.Desktop", xContext ); + + // query the desktop object for the XComponentLoader + xCLoader = UnoRuntime.queryInterface( + XComponentLoader.class, oDesktop ); + + PropertyValue [] szEmptyArgs = new PropertyValue [0]; + String strDoc = "private:factory/scalc"; + + xComp = xCLoader.loadComponentFromURL(strDoc, "_blank", 0, szEmptyArgs ); + xSpreadSheetDoc = UnoRuntime.queryInterface( + XSpreadsheetDocument.class, xComp); + + } catch(Exception e){ + System.err.println(" Exception " + e); + e.printStackTrace(System.err); + } + + return xSpreadSheetDoc; + } + + + public static void insertIntoCell(int CellX, int CellY, String theValue, + XSpreadsheet TT1, String flag) + { + XCell xCell = null; + + try { + xCell = TT1.getCellByPosition(CellX, CellY); + } catch (com.sun.star.lang.IndexOutOfBoundsException ex) { + System.err.println("Could not get Cell"); + ex.printStackTrace(System.err); + } + + if (flag.equals("V")) { + xCell.setValue((new Float(theValue)).floatValue()); + } else { + xCell.setFormula(theValue); + } + + } + + public static void chgbColor( int x1, int y1, int x2, int y2, + String template, XSpreadsheet TT ) + { + XCellRange xCR = null; + try { + xCR = TT.getCellRangeByPosition(x1,y1,x2,y2); + } catch (com.sun.star.lang.IndexOutOfBoundsException ex) { + System.err.println("Could not get CellRange"); + ex.printStackTrace(System.err); + } + + XPropertySet xCPS = UnoRuntime.queryInterface( + XPropertySet.class, xCR ); + + try { + xCPS.setPropertyValue("CellStyle", template); + } catch (Exception e) { + System.err.println("Can't change colors chgbColor" + e); + e.printStackTrace(System.err); + } + } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |