summaryrefslogtreecommitdiff
path: root/odk/examples/java/Spreadsheet
diff options
context:
space:
mode:
authorRüdiger Timm <rt@openoffice.org>2003-04-17 08:50:03 +0000
committerRüdiger Timm <rt@openoffice.org>2003-04-17 08:50:03 +0000
commitc1ad1ef9c49527ccff7df125798cd38055cbc5f5 (patch)
tree628e53f8a8f72e959d2e539d2fb5d5315d7b3d69 /odk/examples/java/Spreadsheet
parent72cbca1e53248fa799c1afd31902f22512672bb7 (diff)
INTEGRATION: CWS sdk01 (1.1.2); FILE ADDED
2003/04/10 11:41:31 jsc 1.1.2.2: #108799# use new naming convention for uno components 2003/03/12 14:59:13 jsc 1.1.2.1: #108153# moved from calc/CalcAddin directory
Diffstat (limited to 'odk/examples/java/Spreadsheet')
-rw-r--r--odk/examples/java/Spreadsheet/EuroAdaption.java370
1 files changed, 370 insertions, 0 deletions
diff --git a/odk/examples/java/Spreadsheet/EuroAdaption.java b/odk/examples/java/Spreadsheet/EuroAdaption.java
new file mode 100644
index 000000000000..9d8127711773
--- /dev/null
+++ b/odk/examples/java/Spreadsheet/EuroAdaption.java
@@ -0,0 +1,370 @@
+//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
+// Name: EuroAdaption
+//***************************************************************************
+//
+// comment: Step 1: connect to the office an get the MSF
+// Step 2: open an empty Calc document
+// Step 3: enter a example text, set the numberformat to DM
+// Step 4: change the numberformat to EUR (Euro)
+// Step 5: use the DM/EUR factor on each cell with a content
+//
+//***************************************************************************
+// date : Tue August 22 2000
+//
+//***************************************************************************
+
+
+import com.sun.star.container.XIndexAccess;
+import com.sun.star.container.XEnumerationAccess;
+import com.sun.star.container.XEnumeration;
+
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.AnyConverter;
+
+// access the implementations via names
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.beans.XPropertySet;
+
+// access the implementations via names
+import com.sun.star.comp.servicemanager.ServiceManager;
+
+import com.sun.star.connection.XConnector;
+import com.sun.star.connection.XConnection;
+
+import com.sun.star.bridge.XUnoUrlResolver;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+import com.sun.star.uno.XNamingService;
+import com.sun.star.uno.XComponentContext;
+
+import com.sun.star.table.XCell;
+import com.sun.star.table.XCellRange;
+import com.sun.star.sheet.XSpreadsheet;
+import com.sun.star.sheet.XSheetCellRanges;
+import com.sun.star.sheet.XCellFormatRangesSupplier;
+import com.sun.star.sheet.XCellRangesQuery;
+
+import com.sun.star.util.XNumberFormats;
+import com.sun.star.util.XNumberFormatsSupplier;
+import com.sun.star.lang.Locale;
+import com.sun.star.util.NumberFormat;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XMultiComponentFactory;
+
+public class EuroAdaption {
+
+ public static void main(String args[]) {
+ String sConnectionString = "uno:socket,host=localhost,port=8100;urp;StarOffice.NamingService";
+
+ // It is possible to use a different connection string, passed as argument
+ if ( args.length == 1 ) {
+ sConnectionString = args[0];
+ }
+
+ XMultiServiceFactory xMSF = null;
+ try {
+ xMSF = connect( sConnectionString );
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ System.exit( 0 );
+ }
+
+ if( xMSF != null ) System.out.println("Connected to "+ sConnectionString );
+
+ // You need the desktop to create a document
+ com.sun.star.frame.XDesktop xDesktop = null;
+ xDesktop = getDesktop( xMSF );
+
+ // create a sheet document
+ com.sun.star.sheet.XSpreadsheetDocument xSheetdocument = null;
+ xSheetdocument = ( com.sun.star.sheet.XSpreadsheetDocument ) createSheetdocument( xDesktop );
+ System.out.println( "Create a new Spreadsheet" );
+
+
+ // get the collection of all sheets from the document
+ com.sun.star.sheet.XSpreadsheets xSheets = null;
+ xSheets = (com.sun.star.sheet.XSpreadsheets) xSheetdocument.getSheets();
+
+ // the Action Interface provides methods to hide actions, like inserting data, on a sheet, that increase the performance
+ com.sun.star.document.XActionLockable xActionInterface = null;
+ xActionInterface = (com.sun.star.document.XActionLockable) UnoRuntime.queryInterface(
+ com.sun.star.document.XActionLockable.class, xSheetdocument );
+
+ // lock all actions
+ xActionInterface.addActionLock();
+
+ com.sun.star.sheet.XSpreadsheet xSheet = null;
+ try {
+ // get via the index access the first sheet
+ com.sun.star.container.XIndexAccess xElements = (com.sun.star.container.XIndexAccess)
+ UnoRuntime.queryInterface( com.sun.star.container.XIndexAccess.class, xSheets );
+
+ // specify the first sheet from the spreadsheet
+ xSheet = (com.sun.star.sheet.XSpreadsheet) UnoRuntime.queryInterface(
+ com.sun.star.sheet.XSpreadsheet.class, xElements.getByIndex( 0 ));
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+
+ // get the interface to apply and create new numberformats
+ XNumberFormatsSupplier xNumberFormatSupplier = null;
+ xNumberFormatSupplier = (XNumberFormatsSupplier) UnoRuntime.queryInterface(
+ XNumberFormatsSupplier.class, xSheetdocument );
+ XNumberFormats xNumberFormats = null;
+ xNumberFormats = xNumberFormatSupplier.getNumberFormats();
+
+ // insert some example data in a sheet
+ createExampleData( xSheet, xNumberFormats );
+ System.out.println( "Insert example data and use the number format with the currency 'DM'" );
+
+ // Change the currency from the cells from DM to Euro
+ Convert( xSheet, xNumberFormats, "DM", "EUR", 1.95583f );
+ System.out.println( "Change the number format to EUR and divide the values with the factor 1.95583" );
+
+ // remove all locks, the user see all changes
+ xActionInterface.removeActionLock();
+
+ System.out.println("done");
+ System.exit(0);
+ }
+
+
+ public static void Convert( XSpreadsheet xSheet, XNumberFormats xNumberFormats, String sOldSymbol, String sNewSymbol, float fFactor ) {
+ try {
+ Locale xLanguage = new Locale();
+ xLanguage.Country = "de"; // Germany -> DM
+ xLanguage.Language = "de"; // German
+
+ // Numberformat string with sNewSymbol
+ String sSimple = "0 [$" + sNewSymbol + "]";
+ // create a number format key with the sNewSymbol
+ int iSimpleKey = NumberFormat( xNumberFormats, sSimple, xLanguage );
+
+ // you have to use the FormatSupplier interface to get the CellFormat enumeration
+ XCellFormatRangesSupplier xCellFormatSupplier = (XCellFormatRangesSupplier)
+ UnoRuntime.queryInterface(XCellFormatRangesSupplier.class, xSheet );
+
+ // getCellFormatRanges() has the interfaces for the enumeration
+ XEnumerationAccess xEnumerationAccess = (XEnumerationAccess)
+ UnoRuntime.queryInterface( XEnumerationAccess.class,
+ xCellFormatSupplier.getCellFormatRanges() );
+ XEnumeration xRanges = xEnumerationAccess.createEnumeration();
+
+ while( xRanges.hasMoreElements() ) {
+ // the enumeration returns a cellrange
+ XCellRange xCellRange = (XCellRange) UnoRuntime.queryInterface(
+ XCellRange.class, xRanges.nextElement());
+
+ // the PropertySet the get and set the properties from the cellrange
+ XPropertySet xCellProp = ( XPropertySet ) UnoRuntime.queryInterface(
+ XPropertySet.class, xCellRange );
+
+ // getPropertyValue returns an Object, you have to cast it to type that you need
+ Object oNumberObject = xCellProp.getPropertyValue( "NumberFormat" );
+ int iNumberFormat = ((Integer) oNumberObject).intValue();
+
+ // get the properties from the cellrange numberformat
+ XPropertySet xFormat = (XPropertySet) xNumberFormats.getByKey( iNumberFormat );
+
+ short fType = ((Short) xFormat.getPropertyValue("Type")).shortValue();
+ String sCurrencySymbol = ((String) xFormat.getPropertyValue("CurrencySymbol")).toString();
+
+ // change the numberformat only on cellranges with a currency numberformat
+ if( ( (fType & com.sun.star.util.NumberFormat.CURRENCY) > 0) &&
+ ( sCurrencySymbol.compareTo( sOldSymbol ) == 0 ) ) {
+ AnyConverter aAnyConv = new AnyConverter();
+ boolean bThousandSep = aAnyConv.toBoolean(
+ xFormat.getPropertyValue("ThousandsSeparator"));
+ boolean bNegativeRed = aAnyConv.toBoolean(xFormat.getPropertyValue("NegativeRed"));
+ short fDecimals = aAnyConv.toShort(xFormat.getPropertyValue("Decimals"));
+ short fLeadingZeros = aAnyConv.toShort(xFormat.getPropertyValue("LeadingZeros"));
+ Locale oLocale = (Locale) aAnyConv.toObject(
+ new com.sun.star.uno.Type(Locale.class),xFormat.getPropertyValue("Locale"));
+
+ // create a new numberformat string
+ String sNew = xNumberFormats.generateFormat( iSimpleKey, oLocale, bThousandSep, bNegativeRed, fDecimals, fLeadingZeros );
+ // get the NumberKey from the numberformat
+ int iNewNumberFormat = NumberFormat( xNumberFormats, sNew, oLocale );
+
+ // set the new numberformat to the cellrange DM->EUR
+ xCellProp.setPropertyValue( "NumberFormat", new Integer( iNewNumberFormat ) );
+
+ // interate over all cells from the cellrange with an content and use the DM/EUR factor
+ XCellRangesQuery xCellRangesQuery = (XCellRangesQuery) UnoRuntime.queryInterface(
+ com.sun.star.sheet.XCellRangesQuery.class, xCellRange );
+ XSheetCellRanges xSheetCellRanges = xCellRangesQuery.queryContentCells(
+ (short) com.sun.star.sheet.CellFlags.VALUE );
+
+ if( xSheetCellRanges.getCount() > 0 ) {
+ XEnumerationAccess xCellEnumerationAccess = xSheetCellRanges.getCells();
+ XEnumeration xCellEnumeration = xCellEnumerationAccess.createEnumeration();
+
+ while( xCellEnumeration.hasMoreElements() ) {
+ XCell xCell = (XCell) UnoRuntime.queryInterface(
+ XCell.class, xCellEnumeration.nextElement());
+ xCell.setValue( (double) xCell.getValue() / fFactor );
+ }
+ }
+ }
+ }
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+ }
+
+
+ public static int NumberFormat( XNumberFormats xNumberFormat, String sFormat, com.sun.star.lang.Locale xLanguage ) {
+ int nRetKey = 0;
+
+ try {
+ // exists the numberformat
+ nRetKey = xNumberFormat.queryKey( sFormat, xLanguage, true );
+
+ // if not, create a new one
+ if( nRetKey == -1 ) {
+ nRetKey = xNumberFormat.addNew( sFormat, xLanguage );
+ if( nRetKey == -1 )
+ nRetKey = 0;
+ }
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+
+ return( nRetKey );
+ }
+
+
+ public static void createExampleData( XSpreadsheet xSheet, XNumberFormats xNumberFormat ) {
+
+ // enter in a cellrange numbers and change the numberformat to DM
+ XCell xCell = null;
+ XCellRange xCellRange = null;
+
+ try {
+ Locale xLanguage = new Locale();
+ xLanguage.Country = "de"; // Germany -> DM
+ xLanguage.Language = "de"; // German
+
+ // Numberformat string from DM
+ String sSimple = "0 [$DM]";
+
+ // get the numberformat key
+ int iNumberFormatKey = NumberFormat( xNumberFormat, sSimple, xLanguage );
+
+ for( int iCounter=1; iCounter < 10; iCounter++ ) {
+ // get one cell and insert a number
+ xCell = xSheet.getCellByPosition( 2, 1 + iCounter );
+ xCell.setValue( (double) iCounter * 2 );
+ xCellRange = xSheet.getCellRangeByPosition( 2, 1 + iCounter, 2, 1 + iCounter );
+
+ // get the ProperySet from the cell, to change the numberformat
+ XPropertySet xCellProp = ( XPropertySet ) UnoRuntime.queryInterface(
+ XPropertySet.class, xCellRange );
+ xCellProp.setPropertyValue( "NumberFormat", new Integer(iNumberFormatKey) );
+ }
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+ }
+
+
+ public static XMultiServiceFactory connect( String connectStr )
+ throws com.sun.star.uno.Exception,
+ com.sun.star.uno.RuntimeException, Exception {
+ // Get component context
+ XComponentContext xcomponentcontext =
+ com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(
+ null );
+
+ // initial serviceManager
+ XMultiComponentFactory xLocalServiceManager =
+ xcomponentcontext.getServiceManager();
+
+ // create a connector, so that it can contact the office
+ Object xUrlResolver = xLocalServiceManager.createInstanceWithContext(
+ "com.sun.star.bridge.UnoUrlResolver", xcomponentcontext );
+ XUnoUrlResolver urlResolver = (XUnoUrlResolver)UnoRuntime.queryInterface( XUnoUrlResolver.class, xUrlResolver );
+
+ Object rInitialObject = urlResolver.resolve( connectStr );
+
+ XNamingService rName = (XNamingService)UnoRuntime.queryInterface(XNamingService.class, rInitialObject );
+
+ XMultiServiceFactory xMSF = null;
+ if( rName != null ) {
+ System.err.println( "got the remote naming service !" );
+ Object rXsmgr = rName.getRegisteredObject("StarOffice.ServiceManager" );
+
+ xMSF = (XMultiServiceFactory)
+ UnoRuntime.queryInterface( XMultiServiceFactory.class, rXsmgr );
+ }
+
+ return ( xMSF );
+ }
+
+
+ public static com.sun.star.frame.XDesktop getDesktop( XMultiServiceFactory xMSF ) {
+ XInterface xInterface = null;
+ com.sun.star.frame.XDesktop xDesktop = null;
+
+ if( xMSF != null ) {
+ try {
+ xInterface = (XInterface) xMSF.createInstance("com.sun.star.frame.Desktop");
+ xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface(com.sun.star.frame.XDesktop.class, xInterface);
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+ }
+ else
+ System.out.println( "Can't create a desktop. null pointer !" );
+
+ return xDesktop;
+ }
+
+
+ public static com.sun.star.sheet.XSpreadsheetDocument createSheetdocument( com.sun.star.frame.XDesktop xDesktop ) {
+ com.sun.star.sheet.XSpreadsheetDocument aSheetDocument = null;
+
+ try {
+ com.sun.star.lang.XComponent xComponent = null;
+ xComponent = CreateNewDocument( xDesktop, "scalc" );
+
+ aSheetDocument = (com.sun.star.sheet.XSpreadsheetDocument) UnoRuntime.queryInterface(com.sun.star.sheet.XSpreadsheetDocument.class, xComponent);
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+
+ return aSheetDocument;
+ }
+
+ protected static com.sun.star.lang.XComponent CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType ) {
+ String sURL = "private:factory/" + sDocumentType;
+
+ com.sun.star.lang.XComponent xComponent = null;
+ PropertyValue xValues[] = new PropertyValue[1];
+
+ com.sun.star.frame.XComponentLoader xComponentLoader = null;
+ XInterface xInterface = null;
+
+ PropertyValue[] xEmptyArgs = new PropertyValue[0];
+
+ xComponentLoader = (com.sun.star.frame.XComponentLoader) UnoRuntime.queryInterface(com.sun.star.frame.XComponentLoader.class, xDesktop );
+
+ try {
+ xComponent = xComponentLoader.loadComponentFromURL( sURL, "_blank", 0, xEmptyArgs);
+ }
+ catch( Exception e) {
+ e.printStackTrace(System.out);
+ }
+
+ return xComponent ;
+ }
+
+}