/* -*- 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((Float .valueOf(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: */
Messung V0.5 in Prozent C=88 H=99 G=93
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-04)
¤
*© Formatika GbR, Deutschland