| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // __________ Imports __________ |
| |
| import com.sun.star.beans.PropertyValue; |
| import com.sun.star.container.XIndexAccess; |
| import com.sun.star.frame.XComponentLoader; |
| import com.sun.star.lang.XMultiComponentFactory; |
| import com.sun.star.sheet.XSpreadsheet; |
| import com.sun.star.sheet.XSpreadsheets; |
| import com.sun.star.sheet.XSpreadsheetDocument; |
| import com.sun.star.table.XCell; |
| import com.sun.star.uno.UnoRuntime; |
| import com.sun.star.uno.XComponentContext; |
| |
| |
| // __________ Implementation __________ |
| |
| /** Create a spreadsheet document and provide access to a sheet framework that |
| is then used to modify some number formats. |
| @author Eike Rathke |
| */ |
| public class Number_Formats |
| { |
| // __________ public members and methods __________ |
| |
| |
| // ____________________ |
| |
| public static void main( String args[] ) |
| { |
| try |
| { |
| Number_Formats aSample = new Number_Formats( args ); |
| aSample.doFunction(); |
| } |
| catch( Exception ex ) |
| { |
| System.err.println( "Sample caught exception! " + ex ); |
| ex.printStackTrace(); |
| System.exit(1); |
| } |
| |
| System.out.println( "Sample done." ); |
| System.exit(0); |
| } |
| |
| // ____________________ |
| |
| public void doFunction() throws RuntimeException, Exception |
| { |
| // Assume: |
| // com.sun.star.sheet.XSpreadsheetDocument maSpreadsheetDoc; |
| // com.sun.star.sheet.XSpreadsheet maSheet; |
| |
| // Query the number formats supplier of the spreadsheet document |
| com.sun.star.util.XNumberFormatsSupplier xNumberFormatsSupplier = |
| (com.sun.star.util.XNumberFormatsSupplier) |
| UnoRuntime.queryInterface( |
| com.sun.star.util.XNumberFormatsSupplier.class, maSpreadsheetDoc ); |
| |
| // Get the number formats from the supplier |
| com.sun.star.util.XNumberFormats xNumberFormats = |
| xNumberFormatsSupplier.getNumberFormats(); |
| |
| // Query the XNumberFormatTypes interface |
| com.sun.star.util.XNumberFormatTypes xNumberFormatTypes = |
| (com.sun.star.util.XNumberFormatTypes) |
| UnoRuntime.queryInterface( |
| com.sun.star.util.XNumberFormatTypes.class, xNumberFormats ); |
| |
| // Get the number format index key of the default currency format, |
| // note the empty locale for default locale |
| com.sun.star.lang.Locale aLocale = new com.sun.star.lang.Locale(); |
| int nCurrencyKey = xNumberFormatTypes.getStandardFormat( |
| com.sun.star.util.NumberFormat.CURRENCY, aLocale ); |
| |
| // Get cell range B3:B11 |
| com.sun.star.table.XCellRange xCellRange = |
| maSheet.getCellRangeByPosition( 1, 2, 1, 10 ); |
| |
| // Query the property set of the cell range |
| com.sun.star.beans.XPropertySet xCellProp = |
| (com.sun.star.beans.XPropertySet) |
| UnoRuntime.queryInterface( |
| com.sun.star.beans.XPropertySet.class, xCellRange ); |
| |
| // Set number format to default currency |
| xCellProp.setPropertyValue( "NumberFormat", new Integer(nCurrencyKey) ); |
| |
| // Get cell B3 |
| com.sun.star.table.XCell xCell = maSheet.getCellByPosition( 1, 2 ); |
| |
| // Query the property set of the cell |
| xCellProp = (com.sun.star.beans.XPropertySet) |
| UnoRuntime.queryInterface( |
| com.sun.star.beans.XPropertySet.class, xCell ); |
| |
| // Get the number format index key of the cell's properties |
| int nIndexKey = ((Integer) xCellProp.getPropertyValue( "NumberFormat" )).intValue(); |
| if ( nIndexKey != nCurrencyKey ) |
| System.out.println( "Number format doesn't match!" ); |
| |
| // Get the properties of the number format |
| com.sun.star.beans.XPropertySet xProp = xNumberFormats.getByKey( nIndexKey ); |
| |
| // Get the format code string of the number format's properties |
| String aFormatCode = (String) xProp.getPropertyValue( "FormatString" ); |
| System.out.println( "FormatString: `" + aFormatCode + "'" ); |
| |
| // Create an arbitrary format code |
| aFormatCode = "\"wonderful \"" + aFormatCode; |
| |
| // Test if it's already present |
| nIndexKey = xNumberFormats.queryKey( aFormatCode, aLocale, false ); |
| |
| // If not, add to number formats collection |
| if ( nIndexKey == -1 ) |
| { |
| try |
| { |
| nIndexKey = xNumberFormats.addNew( aFormatCode, aLocale ); |
| } |
| catch( com.sun.star.util.MalformedNumberFormatException ex ) |
| { |
| System.err.println( "Bad number format code: " + ex ); |
| ex.printStackTrace(); |
| nIndexKey = -1; |
| } |
| } |
| |
| // Set the new format at the cell |
| if ( nIndexKey != -1 ) |
| xCellProp.setPropertyValue( "NumberFormat", new Integer(nIndexKey) ); |
| |
| |
| // Set column containing the example values to optimal width to show |
| // the new format of cell B3 |
| com.sun.star.table.XColumnRowRange xColRowRange = |
| (com.sun.star.table.XColumnRowRange) |
| UnoRuntime.queryInterface(com.sun.star.table.XColumnRowRange.class, |
| maSheet); |
| |
| com.sun.star.container.XIndexAccess xIndexAccess = |
| (com.sun.star.container.XIndexAccess) |
| UnoRuntime.queryInterface(com.sun.star.container.XIndexAccess.class, |
| xColRowRange.getColumns()); |
| |
| com.sun.star.beans.XPropertySet xColPropSet = |
| (com.sun.star.beans.XPropertySet) |
| UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, |
| xIndexAccess.getByIndex(1)); |
| |
| xColPropSet.setPropertyValue( "OptimalWidth", new Boolean(true) ); |
| } |
| |
| // ____________________ |
| |
| public Number_Formats( String[] args ) throws java.lang.Exception |
| { |
| // get the remote office context. If necessary a new office |
| // process is started |
| maOfficeContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); |
| System.out.println("Connected to a running office ..."); |
| maServiceManager = maOfficeContext.getServiceManager(); |
| |
| // create a new spreadsheet document |
| XComponentLoader aLoader = (XComponentLoader) UnoRuntime.queryInterface( |
| XComponentLoader.class, maServiceManager.createInstanceWithContext( |
| "com.sun.star.frame.Desktop", maOfficeContext) ); |
| |
| maSpreadsheetDoc = (XSpreadsheetDocument) UnoRuntime.queryInterface( |
| XSpreadsheetDocument.class, |
| aLoader.loadComponentFromURL( "private:factory/scalc", |
| "_blank", |
| 0, |
| new PropertyValue[ 0 ] ) ); |
| |
| if ( !initSpreadsheet() ) |
| System.exit( 0 ); |
| } |
| |
| |
| // __________ private members and methods __________ |
| private final String msDataSheetName = "Data"; |
| |
| private XComponentContext maOfficeContext; |
| private XMultiComponentFactory maServiceManager; |
| private XSpreadsheetDocument maSpreadsheetDoc; |
| private XSpreadsheet maSheet; // the first sheet |
| |
| |
| // ____________________ |
| |
| /** init the first sheet |
| */ |
| private boolean initSpreadsheet() |
| { |
| boolean bOk = true; |
| XSpreadsheets aSheets = maSpreadsheetDoc.getSheets(); |
| try |
| { |
| XIndexAccess aSheetsIA = (XIndexAccess) UnoRuntime.queryInterface( XIndexAccess.class, aSheets ); |
| maSheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, aSheetsIA.getByIndex( 0 )); |
| |
| // enter some values in B3:B11 |
| for( int iCounter=1; iCounter < 10; iCounter++ ) |
| { |
| XCell aCell = maSheet.getCellByPosition( 1, 1 + iCounter ); |
| aCell.setValue( (double) iCounter ); |
| } |
| } |
| catch( Exception ex ) |
| { |
| System.err.println( "Couldn't initialize Spreadsheet Document: " + ex ); |
| ex.printStackTrace(); |
| bOk = false; |
| } |
| return bOk; |
| } |
| } |