1*916729d0Smseidel /************************************************************** 2*916729d0Smseidel * 3*916729d0Smseidel * Licensed to the Apache Software Foundation (ASF) under one 4eba4d44aSLiu Zhe * or more contributor license agreements. See the NOTICE file 5eba4d44aSLiu Zhe * distributed with this work for additional information 6eba4d44aSLiu Zhe * regarding copyright ownership. The ASF licenses this file 7eba4d44aSLiu Zhe * to you under the Apache License, Version 2.0 (the 8eba4d44aSLiu Zhe * "License"); you may not use this file except in compliance 9eba4d44aSLiu Zhe * with the License. You may obtain a copy of the License at 10eba4d44aSLiu Zhe * 11eba4d44aSLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 12eba4d44aSLiu Zhe * 13eba4d44aSLiu Zhe * Unless required by applicable law or agreed to in writing, 14eba4d44aSLiu Zhe * software distributed under the License is distributed on an 15eba4d44aSLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16eba4d44aSLiu Zhe * KIND, either express or implied. See the License for the 17eba4d44aSLiu Zhe * specific language governing permissions and limitations 18eba4d44aSLiu Zhe * under the License. 19eba4d44aSLiu Zhe * 20eba4d44aSLiu Zhe *************************************************************/ 21eba4d44aSLiu Zhe 22eba4d44aSLiu Zhe package fvt.uno.sc.sheet; 23eba4d44aSLiu Zhe 24eba4d44aSLiu Zhe import static org.junit.Assert.*; 25eba4d44aSLiu Zhe import org.junit.After; 26eba4d44aSLiu Zhe import org.junit.AfterClass; 27eba4d44aSLiu Zhe import org.junit.Before; 28eba4d44aSLiu Zhe import org.junit.BeforeClass; 29eba4d44aSLiu Zhe import org.junit.Test; 30eba4d44aSLiu Zhe import org.openoffice.test.common.Testspace; 31eba4d44aSLiu Zhe import org.openoffice.test.uno.UnoApp; 32eba4d44aSLiu Zhe import testlib.uno.SCUtil; 33eba4d44aSLiu Zhe import com.sun.star.beans.XPropertySet; 34eba4d44aSLiu Zhe import com.sun.star.container.XIndexAccess; 35eba4d44aSLiu Zhe import com.sun.star.lang.XComponent; 36eba4d44aSLiu Zhe import com.sun.star.sheet.SheetLinkMode; 37eba4d44aSLiu Zhe import com.sun.star.sheet.XSheetLinkable; 38eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheet; 39eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheetDocument; 40eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheets; 41eba4d44aSLiu Zhe import com.sun.star.uno.UnoRuntime; 42eba4d44aSLiu Zhe import com.sun.star.util.XRefreshable; 43eba4d44aSLiu Zhe 44cfe4bce3SLi Feng Wang /** 45cfe4bce3SLi Feng Wang * Basic sheet operator testing 46cfe4bce3SLi Feng Wang * 47cfe4bce3SLi Feng Wang */ 48eba4d44aSLiu Zhe public class SheetBasicTest { 49eba4d44aSLiu Zhe UnoApp unoApp = new UnoApp(); 50eba4d44aSLiu Zhe XSpreadsheetDocument scDocument = null; 51eba4d44aSLiu Zhe XComponent scComponent = null; 52eba4d44aSLiu Zhe 53eba4d44aSLiu Zhe @BeforeClass 54eba4d44aSLiu Zhe public static void setUpBeforeClass() throws Exception { 55eba4d44aSLiu Zhe 56eba4d44aSLiu Zhe } 57eba4d44aSLiu Zhe 58eba4d44aSLiu Zhe @AfterClass 59eba4d44aSLiu Zhe public static void tearDownAfterClass() throws Exception { 60eba4d44aSLiu Zhe } 61eba4d44aSLiu Zhe 62eba4d44aSLiu Zhe @Before 63eba4d44aSLiu Zhe public void setUp() throws Exception { 64eba4d44aSLiu Zhe unoApp.start(); 65eba4d44aSLiu Zhe // New a SC document 66eba4d44aSLiu Zhe scComponent = unoApp.newDocument("scalc"); 67eba4d44aSLiu Zhe } 68eba4d44aSLiu Zhe 69eba4d44aSLiu Zhe @After 70eba4d44aSLiu Zhe public void tearDown() throws Exception { 71eba4d44aSLiu Zhe unoApp.closeDocument(scComponent); 72eba4d44aSLiu Zhe unoApp.close(); 73eba4d44aSLiu Zhe } 74eba4d44aSLiu Zhe 75cfe4bce3SLi Feng Wang /** 76cfe4bce3SLi Feng Wang * test insert a sheet, rename sheet name and delete sheet 77cfe4bce3SLi Feng Wang */ 78eba4d44aSLiu Zhe @Test 79eba4d44aSLiu Zhe public void insertRenameDeleteSheet() throws Exception { 80eba4d44aSLiu Zhe // Insert a sheet named aa after first sheet 81eba4d44aSLiu Zhe String sheetname = "aa"; 82eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 83eba4d44aSLiu Zhe XSpreadsheets spreadsheets = scDocument.getSheets(); 84eba4d44aSLiu Zhe spreadsheets.insertNewByName(sheetname, (short) 1); 85eba4d44aSLiu Zhe 86eba4d44aSLiu Zhe // active the sheet second sheet aa 87eba4d44aSLiu Zhe XSpreadsheet newSpreadSheet = SCUtil.getSCSheetByIndex(scDocument, 88eba4d44aSLiu Zhe (short) 1); 89eba4d44aSLiu Zhe SCUtil.setCurrentSheet(scDocument, newSpreadSheet); 90eba4d44aSLiu Zhe 91*916729d0Smseidel // get the new spreadsheet name 92eba4d44aSLiu Zhe assertEquals("actual should equals aa", sheetname, 93eba4d44aSLiu Zhe SCUtil.getSCSheetNameByIndex(scDocument, (short) 1)); 94eba4d44aSLiu Zhe 95eba4d44aSLiu Zhe // Change the Spreadsheet name 96eba4d44aSLiu Zhe String changedname = "SpeadsheetAfterChange"; 97eba4d44aSLiu Zhe SCUtil.setSCSheetNameByIndex(scDocument, (short) 1, changedname); 98eba4d44aSLiu Zhe 99eba4d44aSLiu Zhe // Save and reload document 100eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "TestSpreadsheet", "ods"); 101eba4d44aSLiu Zhe XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 102eba4d44aSLiu Zhe scDocument, "TestSpreadsheet.ods"); 103eba4d44aSLiu Zhe 104eba4d44aSLiu Zhe scDocument = scDocumentTemp; 105eba4d44aSLiu Zhe String sheetnameaftermove = SCUtil.getSCSheetNameByIndex(scDocument, 106eba4d44aSLiu Zhe (short) 1); 107eba4d44aSLiu Zhe 108eba4d44aSLiu Zhe // Verify the changed Spreadsheet name 109eba4d44aSLiu Zhe assertEquals("actual should equals SpeadsheetAfterChange", changedname, 110eba4d44aSLiu Zhe sheetnameaftermove); 111eba4d44aSLiu Zhe 112eba4d44aSLiu Zhe scDocument.getSheets().removeByName(changedname); 113eba4d44aSLiu Zhe 114eba4d44aSLiu Zhe assertFalse("actual should equals false", 115eba4d44aSLiu Zhe spreadsheets.hasByName(changedname)); 116eba4d44aSLiu Zhe SCUtil.save(scDocumentTemp); 117eba4d44aSLiu Zhe } 118eba4d44aSLiu Zhe 119cfe4bce3SLi Feng Wang /** 120*916729d0Smseidel * Test copy and paste sheet 121cfe4bce3SLi Feng Wang */ 122eba4d44aSLiu Zhe @Test 123eba4d44aSLiu Zhe public void copypastesheet() throws Exception { 124eba4d44aSLiu Zhe // Insert some value into cells 125eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 126eba4d44aSLiu Zhe String souceSheetName = "sourcesheet"; 127eba4d44aSLiu Zhe SCUtil.setSCSheetNameByIndex(scDocument, (short) 0, souceSheetName); 128eba4d44aSLiu Zhe String[][] stringValues = { { "", "Jan", "Feb", "Mar", "Apr", "Mai" }, 129eba4d44aSLiu Zhe { "Profit", "12.3", "43.2", "5.1", "76", "56.8" }, 130eba4d44aSLiu Zhe { "Rival in business", "12.2", "12.6", "17.7", "20.4", "100" }, }; 131eba4d44aSLiu Zhe XSpreadsheet sourceSpreadSheet = SCUtil.getSCSheetByName(scDocument, 132eba4d44aSLiu Zhe souceSheetName); 133eba4d44aSLiu Zhe // input strings into sheet1 134cfe4bce3SLi Feng Wang SCUtil.setTextToCellRange(sourceSpreadSheet, 0, 0, stringValues); 135eba4d44aSLiu Zhe // copy the sheet from sourcesheet to copysheet 136eba4d44aSLiu Zhe String newcopysheet = "copysheet"; 137eba4d44aSLiu Zhe XSpreadsheets spreadsheets = scDocument.getSheets(); 138eba4d44aSLiu Zhe spreadsheets.copyByName(souceSheetName, newcopysheet, (short) 2); 139eba4d44aSLiu Zhe 140eba4d44aSLiu Zhe // Save and reload document 141eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "TestCopysheet", "xls"); 142eba4d44aSLiu Zhe XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 143eba4d44aSLiu Zhe scDocument, "TestCopysheet.xls"); 144eba4d44aSLiu Zhe scDocument = scDocumentTemp; 145eba4d44aSLiu Zhe 146eba4d44aSLiu Zhe XSpreadsheet copysheet = SCUtil 147eba4d44aSLiu Zhe .getSCSheetByIndex(scDocument, (short) 2); 148eba4d44aSLiu Zhe String[][] CopystringValues = SCUtil.getTextFromCellRange(copysheet, 0, 149eba4d44aSLiu Zhe 0, 5, 2); 150eba4d44aSLiu Zhe assertArrayEquals("Expect string value should be stringValues", 151eba4d44aSLiu Zhe stringValues, CopystringValues); 152eba4d44aSLiu Zhe 153eba4d44aSLiu Zhe } 154eba4d44aSLiu Zhe 155cfe4bce3SLi Feng Wang /** 156cfe4bce3SLi Feng Wang * Test move sheet 157cfe4bce3SLi Feng Wang */ 158eba4d44aSLiu Zhe @Test 159eba4d44aSLiu Zhe public void movesheet() throws Exception { 160eba4d44aSLiu Zhe 161eba4d44aSLiu Zhe // new sc document 162eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 163eba4d44aSLiu Zhe XSpreadsheets spreadsheets = scDocument.getSheets(); 164eba4d44aSLiu Zhe 165eba4d44aSLiu Zhe // change the first sheet name and input same value into the sheet cell 166eba4d44aSLiu Zhe String sheetname = "sourcesheet"; 167eba4d44aSLiu Zhe SCUtil.setSCSheetNameByIndex(scDocument, (short) 0, sheetname); 168eba4d44aSLiu Zhe String[][] stringValues = { { "", "Jan", "Feb", "Mar", "Apr", "Mai" }, 169eba4d44aSLiu Zhe { "Profit", "12.3", "43.2", "5.1", "76", "56.8" }, 170eba4d44aSLiu Zhe { "Rival in business", "12.2", "12.6", "17.7", "20.4", "100" }, }; 171eba4d44aSLiu Zhe XSpreadsheet movesheet = SCUtil 172eba4d44aSLiu Zhe .getSCSheetByIndex(scDocument, (short) 0); 173cfe4bce3SLi Feng Wang SCUtil.setTextToCellRange(movesheet, 0, 0,stringValues); 174eba4d44aSLiu Zhe 175eba4d44aSLiu Zhe // Before move, get the 2nd sheet name 176eba4d44aSLiu Zhe String secondSheetNameBeforeMove = SCUtil.getSCSheetNameByIndex( 177eba4d44aSLiu Zhe scDocument, (short) 1); 178eba4d44aSLiu Zhe 179eba4d44aSLiu Zhe // move the first sheet 180eba4d44aSLiu Zhe spreadsheets.moveByName(sheetname, (short) 2); 181eba4d44aSLiu Zhe 182eba4d44aSLiu Zhe // Save and reload document 183eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "Testmovesheet", "xls"); 184eba4d44aSLiu Zhe XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 185eba4d44aSLiu Zhe scDocument, "Testmovesheet.xls"); 186eba4d44aSLiu Zhe scDocument = scDocumentTemp; 187eba4d44aSLiu Zhe 188eba4d44aSLiu Zhe // After move, get the first sheet name, and verify it same as 2nd sheet 189eba4d44aSLiu Zhe // name before move 190eba4d44aSLiu Zhe String firstsheetnameAfterMove = SCUtil.getSCSheetNameByIndex( 191eba4d44aSLiu Zhe scDocument, (short) 0); 192eba4d44aSLiu Zhe assertEquals("Expect result should be Sheet2", 193eba4d44aSLiu Zhe secondSheetNameBeforeMove, firstsheetnameAfterMove); 194eba4d44aSLiu Zhe 195eba4d44aSLiu Zhe // Get the target sheet name after move 196eba4d44aSLiu Zhe String sheetnameAfterMove = SCUtil.getSCSheetNameByIndex(scDocument, 197eba4d44aSLiu Zhe (short) 1); 198eba4d44aSLiu Zhe assertEquals("Expect result should be sourcesheet", sheetname, 199eba4d44aSLiu Zhe sheetnameAfterMove); 200eba4d44aSLiu Zhe 201eba4d44aSLiu Zhe // Check the cell value after move 202eba4d44aSLiu Zhe XSpreadsheet sheetaftermove = SCUtil.getSCSheetByIndex(scDocument, 203eba4d44aSLiu Zhe (short) 1); 204eba4d44aSLiu Zhe String[][] stringValuesaftermove = SCUtil.getTextFromCellRange( 205eba4d44aSLiu Zhe sheetaftermove, 0, 0, 5, 2); 206eba4d44aSLiu Zhe 207eba4d44aSLiu Zhe assertArrayEquals("Expect result should be stringValues", stringValues, 208eba4d44aSLiu Zhe stringValuesaftermove); 209eba4d44aSLiu Zhe } 210eba4d44aSLiu Zhe 211cfe4bce3SLi Feng Wang /** 212cfe4bce3SLi Feng Wang * Test hide and show sheet 213cfe4bce3SLi Feng Wang */ 214eba4d44aSLiu Zhe @Test 215eba4d44aSLiu Zhe public void hideShowSheet() throws Exception { 216eba4d44aSLiu Zhe // Insert a sheet named hide sheet after first sheet 217eba4d44aSLiu Zhe String sheetname = "hide sheet"; 218eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 219eba4d44aSLiu Zhe XSpreadsheets spreadsheets = scDocument.getSheets(); 220eba4d44aSLiu Zhe spreadsheets.insertNewByName(sheetname, (short) 1); 221eba4d44aSLiu Zhe 222eba4d44aSLiu Zhe // active the sheet second sheet "hide sheet" 223eba4d44aSLiu Zhe XSpreadsheet secondSpreadSheet = SCUtil.getSCSheetByIndex(scDocument, 224eba4d44aSLiu Zhe (short) 1); 225eba4d44aSLiu Zhe SCUtil.setCurrentSheet(scDocument, secondSpreadSheet); 226eba4d44aSLiu Zhe // get second sheet name and verify it should be "hide sheet" 227eba4d44aSLiu Zhe assertEquals("expect active sheet name will be hide sheet", sheetname, 228eba4d44aSLiu Zhe SCUtil.getSCSheetNameByIndex(scDocument, (short) 1)); 229eba4d44aSLiu Zhe 230eba4d44aSLiu Zhe // hide the sheet you insert 231eba4d44aSLiu Zhe XPropertySet sheetPropertySet = (XPropertySet) UnoRuntime 232eba4d44aSLiu Zhe .queryInterface(XPropertySet.class, secondSpreadSheet); 233eba4d44aSLiu Zhe boolean isvisiable = false; 234eba4d44aSLiu Zhe sheetPropertySet.setPropertyValue("IsVisible", isvisiable); 235eba4d44aSLiu Zhe 236eba4d44aSLiu Zhe // Save and reload document 237eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "Testhideshowsheet", "xls"); 238eba4d44aSLiu Zhe XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 239eba4d44aSLiu Zhe scDocument, "Testhideshowsheet.xls"); 240eba4d44aSLiu Zhe scDocument = scDocumentTemp; 241eba4d44aSLiu Zhe 242eba4d44aSLiu Zhe // get the active sheet name after hide sheet, it should be Sheet2 243eba4d44aSLiu Zhe String sheet2Name = SCUtil.getSCSheetNameByIndex(scDocument, (short) 2); 244eba4d44aSLiu Zhe String activesheetname = SCUtil.getSCActiveSheetName(scDocument); 245eba4d44aSLiu Zhe assertEquals("Expect sheet name should be Sheet2", sheet2Name, 246eba4d44aSLiu Zhe activesheetname); 247eba4d44aSLiu Zhe 248eba4d44aSLiu Zhe // show sheet "hide sheet" 249eba4d44aSLiu Zhe sheetPropertySet = (XPropertySet) UnoRuntime.queryInterface( 250eba4d44aSLiu Zhe XPropertySet.class, 251eba4d44aSLiu Zhe SCUtil.getSCSheetByIndex(scDocument, (short) 1)); 252eba4d44aSLiu Zhe isvisiable = true; 253eba4d44aSLiu Zhe sheetPropertySet.setPropertyValue("IsVisible", isvisiable); 254eba4d44aSLiu Zhe 255eba4d44aSLiu Zhe // active sheet "hide sheet" 256eba4d44aSLiu Zhe secondSpreadSheet = SCUtil.getSCSheetByIndex(scDocument, (short) 1); 257eba4d44aSLiu Zhe SCUtil.setCurrentSheet(scDocument, secondSpreadSheet); 258eba4d44aSLiu Zhe 259eba4d44aSLiu Zhe // Get current active sheet name, verify it same as "hide sheet" 260eba4d44aSLiu Zhe String currentactivesheetname = SCUtil.getSCActiveSheetName(scDocument); 261eba4d44aSLiu Zhe assertEquals("Expect active sheet name is hidesheet", sheetname, 262eba4d44aSLiu Zhe currentactivesheetname); 263eba4d44aSLiu Zhe SCUtil.save(scDocument); 264eba4d44aSLiu Zhe } 265eba4d44aSLiu Zhe 266cfe4bce3SLi Feng Wang /** 267cfe4bce3SLi Feng Wang * Test sheet tab color 268cfe4bce3SLi Feng Wang */ 269eba4d44aSLiu Zhe @Test 270eba4d44aSLiu Zhe public void sheetColor() throws Exception { 271eba4d44aSLiu Zhe // get first sheet propertyset 272eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 273eba4d44aSLiu Zhe XSpreadsheets spreadsheets = scDocument.getSheets(); 274eba4d44aSLiu Zhe XSpreadsheet firstSpreadSheet = SCUtil.getSCSheetByIndex(scDocument, 275eba4d44aSLiu Zhe (short) 0); 276eba4d44aSLiu Zhe XPropertySet sheet1PropertySet = (XPropertySet) UnoRuntime 277eba4d44aSLiu Zhe .queryInterface(XPropertySet.class, firstSpreadSheet); 278eba4d44aSLiu Zhe 279cfe4bce3SLi Feng Wang // Set sheet tab color to 111 280eba4d44aSLiu Zhe sheet1PropertySet.setPropertyValue("TabColor", 111); 281eba4d44aSLiu Zhe 282eba4d44aSLiu Zhe // copy the color sheet to new sheet 283eba4d44aSLiu Zhe spreadsheets.copyByName( 284eba4d44aSLiu Zhe SCUtil.getSCSheetNameByIndex(scDocument, (short) 0), 285eba4d44aSLiu Zhe "newsheet", (short) 3); 286eba4d44aSLiu Zhe 287eba4d44aSLiu Zhe // Save and reopen the document 288eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "Testcolorsheet", "ods"); 289eba4d44aSLiu Zhe XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp, 290eba4d44aSLiu Zhe scDocument, "Testcolorsheet.ods"); 291eba4d44aSLiu Zhe scDocument = scDocumentTemp; 292eba4d44aSLiu Zhe 293eba4d44aSLiu Zhe // Get first sheet color 294eba4d44aSLiu Zhe sheet1PropertySet = (XPropertySet) UnoRuntime.queryInterface( 295eba4d44aSLiu Zhe XPropertySet.class, 296eba4d44aSLiu Zhe SCUtil.getSCSheetByIndex(scDocument, (short) 0)); 297eba4d44aSLiu Zhe int firstSheetcolorid = (Integer) sheet1PropertySet 298eba4d44aSLiu Zhe .getPropertyValue("TabColor"); 299eba4d44aSLiu Zhe 300*916729d0Smseidel // Get the copied sheet color 301eba4d44aSLiu Zhe XPropertySet newsheetPropertySet = (XPropertySet) UnoRuntime 302eba4d44aSLiu Zhe .queryInterface(XPropertySet.class, 303eba4d44aSLiu Zhe SCUtil.getSCSheetByIndex(scDocument, (short) 3)); 304eba4d44aSLiu Zhe int copySheetcolorid = (Integer) newsheetPropertySet 305eba4d44aSLiu Zhe .getPropertyValue("TabColor"); 306eba4d44aSLiu Zhe 307eba4d44aSLiu Zhe // Verify first sheet color changed successfully 308eba4d44aSLiu Zhe assertEquals("Expect color should be 111", 111, firstSheetcolorid); 309eba4d44aSLiu Zhe 310eba4d44aSLiu Zhe // Verify first sheet color same as copy sheet color 311eba4d44aSLiu Zhe assertEquals("Expect color should be 111", firstSheetcolorid, 312eba4d44aSLiu Zhe copySheetcolorid); 313eba4d44aSLiu Zhe } 314eba4d44aSLiu Zhe 315cfe4bce3SLi Feng Wang /** 316cfe4bce3SLi Feng Wang * test insert sheet from other file 317cfe4bce3SLi Feng Wang */ 318b554e61dSDamjan Jovanovic // FIXME: locks up on update link confirmation dialog. 319b554e61dSDamjan Jovanovic @Test(timeout = 15000) 320eba4d44aSLiu Zhe public void insertSheetFromfile() throws Exception { 321eba4d44aSLiu Zhe // New a document source.xls, add value to 3 sheet 322eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 323eba4d44aSLiu Zhe XSpreadsheets spreadsheets = scDocument.getSheets(); 324eba4d44aSLiu Zhe XSpreadsheet firstSheet = SCUtil.getSCSheetByIndex(scDocument, 325eba4d44aSLiu Zhe (short) 0); 326eba4d44aSLiu Zhe XSpreadsheet secondSheet = SCUtil.getSCSheetByIndex(scDocument, 327eba4d44aSLiu Zhe (short) 1); 328eba4d44aSLiu Zhe XSpreadsheet thirdSheet = SCUtil.getSCSheetByIndex(scDocument, 329eba4d44aSLiu Zhe (short) 2); 330eba4d44aSLiu Zhe SCUtil.setFormulaToCell(firstSheet, 1, 2, "=2*2"); 331eba4d44aSLiu Zhe SCUtil.setFormulaToCell(secondSheet, 1, 2, "=2*2"); 332eba4d44aSLiu Zhe SCUtil.setFormulaToCell(thirdSheet, 1, 2, "=2*2"); 333eba4d44aSLiu Zhe 334eba4d44aSLiu Zhe // Save and close this document 335eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "source", "xls"); 336eba4d44aSLiu Zhe SCUtil.closeFile(scDocument); 337eba4d44aSLiu Zhe 338eba4d44aSLiu Zhe // get source document URL 339eba4d44aSLiu Zhe String SourcestoreUrl = Testspace.getUrl("output/sc/" + "source" + "." 340eba4d44aSLiu Zhe + "xls"); 341eba4d44aSLiu Zhe 342eba4d44aSLiu Zhe // New a document 343eba4d44aSLiu Zhe scComponent = unoApp.newDocument("scalc"); 344eba4d44aSLiu Zhe scDocument = SCUtil.getSCDocument(scComponent); 345eba4d44aSLiu Zhe spreadsheets = scDocument.getSheets(); 346eba4d44aSLiu Zhe // Insert firstexternalsheet sheet, link with Sheet1 in source document 347eba4d44aSLiu Zhe // and the link mode is NORMAL 348eba4d44aSLiu Zhe spreadsheets.insertNewByName("firstexternalsheet", (short) 3); 349eba4d44aSLiu Zhe XSpreadsheet firstexternalsheet = SCUtil.getSCSheetByIndex(scDocument, 350eba4d44aSLiu Zhe (short) 3); 351eba4d44aSLiu Zhe XSheetLinkable xfirstSheetLinkable = (XSheetLinkable) UnoRuntime 352eba4d44aSLiu Zhe .queryInterface(XSheetLinkable.class, firstexternalsheet); 353eba4d44aSLiu Zhe xfirstSheetLinkable.link(SourcestoreUrl, "", "MS Excel 97", "", 354eba4d44aSLiu Zhe SheetLinkMode.NORMAL); 355eba4d44aSLiu Zhe 356eba4d44aSLiu Zhe // Insert secondexternalsheet sheet, link with Sheet2 in source document 357eba4d44aSLiu Zhe // and the link mode is VALUE 358eba4d44aSLiu Zhe spreadsheets.insertNewByName("secondexternalsheet", (short) 4); 359eba4d44aSLiu Zhe XSpreadsheet secondexternalsheet = SCUtil.getSCSheetByIndex(scDocument, 360eba4d44aSLiu Zhe (short) 4); 361eba4d44aSLiu Zhe XSheetLinkable xsecondSheetLinkable = (XSheetLinkable) UnoRuntime 362eba4d44aSLiu Zhe .queryInterface(XSheetLinkable.class, secondexternalsheet); 363eba4d44aSLiu Zhe xsecondSheetLinkable.link(SourcestoreUrl, "Sheet2", "MS Excel 97", "", 364eba4d44aSLiu Zhe SheetLinkMode.VALUE); 365eba4d44aSLiu Zhe 366eba4d44aSLiu Zhe // Insert secondexternalsheet sheet, link with Sheet2 in source document 367eba4d44aSLiu Zhe // and the link mode is NONE 368eba4d44aSLiu Zhe spreadsheets.insertNewByName("thirdexternalsheet", (short) 5); 369eba4d44aSLiu Zhe XSpreadsheet thirdexternalsheet = SCUtil.getSCSheetByIndex(scDocument, 370eba4d44aSLiu Zhe (short) 5); 371eba4d44aSLiu Zhe XSheetLinkable xthirdSheetLinkable = (XSheetLinkable) UnoRuntime 372eba4d44aSLiu Zhe .queryInterface(XSheetLinkable.class, thirdexternalsheet); 373eba4d44aSLiu Zhe xthirdSheetLinkable.link(SourcestoreUrl, "Sheet3", "MS Excel 97", "", 374eba4d44aSLiu Zhe SheetLinkMode.NONE); 375eba4d44aSLiu Zhe 376eba4d44aSLiu Zhe // Verify firstexternalsheet 377eba4d44aSLiu Zhe assertEquals("Expect formula should be =2*2", "=2*2", 378eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(firstexternalsheet, 1, 2)); 379eba4d44aSLiu Zhe assertEquals("Expect formula result should be 4", "4", 380eba4d44aSLiu Zhe SCUtil.getTextFromCell(firstexternalsheet, 1, 2)); 381eba4d44aSLiu Zhe 382eba4d44aSLiu Zhe // Verify secondexternalsheet 383eba4d44aSLiu Zhe assertEquals("Expect formula should be 4", "4", 384eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(secondexternalsheet, 1, 2)); 385eba4d44aSLiu Zhe assertEquals("Expect formula result should be 4", "4", 386eba4d44aSLiu Zhe SCUtil.getTextFromCell(secondexternalsheet, 1, 2)); 387eba4d44aSLiu Zhe 388eba4d44aSLiu Zhe // Verify thirdexternalsheet 389eba4d44aSLiu Zhe assertEquals("Expect formula should be blank", "", 390eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(thirdexternalsheet, 1, 2)); 391eba4d44aSLiu Zhe assertEquals("Expect formula result should be blank", "", 392eba4d44aSLiu Zhe SCUtil.getTextFromCell(thirdexternalsheet, 1, 2)); 393eba4d44aSLiu Zhe 394eba4d44aSLiu Zhe // save document and verify the linked sheet again 395eba4d44aSLiu Zhe SCUtil.saveFileAs(scComponent, "linked", "ods"); 396eba4d44aSLiu Zhe XSpreadsheetDocument tempscDocument = SCUtil.reloadFile(unoApp, 397eba4d44aSLiu Zhe scDocument, "linked.ods"); 398eba4d44aSLiu Zhe scDocument = tempscDocument; 399eba4d44aSLiu Zhe firstexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 3); 400eba4d44aSLiu Zhe secondexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 4); 401eba4d44aSLiu Zhe thirdexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 5); 402eba4d44aSLiu Zhe 403eba4d44aSLiu Zhe // Verify firstexternalsheet 404eba4d44aSLiu Zhe assertEquals("Expect formula should be =2*2", "=2*2", 405eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(firstexternalsheet, 1, 2)); 406eba4d44aSLiu Zhe assertEquals("Expect formula result should be 4", "4", 407eba4d44aSLiu Zhe SCUtil.getTextFromCell(firstexternalsheet, 1, 2)); 408eba4d44aSLiu Zhe 409eba4d44aSLiu Zhe // Verify secondexternalsheet 410eba4d44aSLiu Zhe assertEquals("Expect formula should be 4", "4", 411eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(secondexternalsheet, 1, 2)); 412eba4d44aSLiu Zhe assertEquals("Expect formula result should be 4", "4", 413eba4d44aSLiu Zhe SCUtil.getTextFromCell(secondexternalsheet, 1, 2)); 414eba4d44aSLiu Zhe 415eba4d44aSLiu Zhe // Verify thirdexternalsheet 416eba4d44aSLiu Zhe assertEquals("Expect formula should be blank", "", 417eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(thirdexternalsheet, 1, 2)); 418eba4d44aSLiu Zhe assertEquals("Expect formula result should be blank", "", 419eba4d44aSLiu Zhe SCUtil.getTextFromCell(thirdexternalsheet, 1, 2)); 420eba4d44aSLiu Zhe 421eba4d44aSLiu Zhe // save and close document 422eba4d44aSLiu Zhe SCUtil.save(scDocument); 423eba4d44aSLiu Zhe SCUtil.closeFile(scDocument); 424eba4d44aSLiu Zhe 425*916729d0Smseidel // Open source document and change the value in source document 426eba4d44aSLiu Zhe XSpreadsheetDocument sourcescDocument = SCUtil.reloadFile(unoApp, 427eba4d44aSLiu Zhe scDocument, "source.xls"); 428eba4d44aSLiu Zhe firstSheet = SCUtil.getSCSheetByIndex(sourcescDocument, (short) 0); 429eba4d44aSLiu Zhe secondSheet = SCUtil.getSCSheetByIndex(sourcescDocument, (short) 1); 430eba4d44aSLiu Zhe thirdSheet = SCUtil.getSCSheetByIndex(sourcescDocument, (short) 2); 431eba4d44aSLiu Zhe SCUtil.setFormulaToCell(firstSheet, 1, 2, "=3*3"); 432eba4d44aSLiu Zhe SCUtil.setFormulaToCell(secondSheet, 1, 2, "=3*3"); 433eba4d44aSLiu Zhe SCUtil.setFormulaToCell(thirdSheet, 1, 2, "=3*3"); 434eba4d44aSLiu Zhe SCUtil.save(sourcescDocument); 435eba4d44aSLiu Zhe SCUtil.closeFile(sourcescDocument); 436eba4d44aSLiu Zhe 437eba4d44aSLiu Zhe // Open link document 438eba4d44aSLiu Zhe tempscDocument = SCUtil.reloadFile(unoApp, scDocument, "linked.ods"); 439eba4d44aSLiu Zhe scDocument = tempscDocument; 440eba4d44aSLiu Zhe spreadsheets = scDocument.getSheets(); 441eba4d44aSLiu Zhe 442eba4d44aSLiu Zhe firstexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 3); 443eba4d44aSLiu Zhe secondexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 4); 444eba4d44aSLiu Zhe thirdexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 5); 445eba4d44aSLiu Zhe 446eba4d44aSLiu Zhe // get Object SheetLinks for document 447eba4d44aSLiu Zhe XPropertySet sheetpropertyset = (XPropertySet) UnoRuntime 448eba4d44aSLiu Zhe .queryInterface(XPropertySet.class, scDocument); 449eba4d44aSLiu Zhe Object sheetLinks = sheetpropertyset.getPropertyValue("SheetLinks"); 450eba4d44aSLiu Zhe 451eba4d44aSLiu Zhe XIndexAccess xsheetlinks = (XIndexAccess) UnoRuntime.queryInterface( 452eba4d44aSLiu Zhe XIndexAccess.class, sheetLinks); 453eba4d44aSLiu Zhe 454eba4d44aSLiu Zhe // Refresh all links 455eba4d44aSLiu Zhe for (int i = 0; i < xsheetlinks.getCount(); i++) { 456eba4d44aSLiu Zhe Object sheetlink = xsheetlinks.getByIndex(i); 457eba4d44aSLiu Zhe XRefreshable xsheetRefreshable = (XRefreshable) UnoRuntime 458eba4d44aSLiu Zhe .queryInterface(XRefreshable.class, sheetlink); 459eba4d44aSLiu Zhe xsheetRefreshable.refresh(); 460eba4d44aSLiu Zhe } 461eba4d44aSLiu Zhe 462eba4d44aSLiu Zhe // Verify firstexternalsheet 463eba4d44aSLiu Zhe assertEquals("Expect formula should be =3*3", "=3*3", 464eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(firstexternalsheet, 1, 2)); 465eba4d44aSLiu Zhe assertEquals("Expect formula result should be 9", "9", 466eba4d44aSLiu Zhe SCUtil.getTextFromCell(firstexternalsheet, 1, 2)); 467eba4d44aSLiu Zhe 468eba4d44aSLiu Zhe // Verify secondexternalsheet 469eba4d44aSLiu Zhe assertEquals("Expect formula should be 9", "9", 470eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(secondexternalsheet, 1, 2)); 471eba4d44aSLiu Zhe assertEquals("Expect formula result should be 9", "9", 472eba4d44aSLiu Zhe SCUtil.getTextFromCell(secondexternalsheet, 1, 2)); 473eba4d44aSLiu Zhe 474eba4d44aSLiu Zhe // Verify thirdexternalsheet 475eba4d44aSLiu Zhe assertEquals("Expect formula should be blank", "", 476eba4d44aSLiu Zhe SCUtil.getFormulaFromCell(thirdexternalsheet, 1, 2)); 477eba4d44aSLiu Zhe assertEquals("Expect formula result should be blank", "", 478eba4d44aSLiu Zhe SCUtil.getTextFromCell(thirdexternalsheet, 1, 2)); 479eba4d44aSLiu Zhe 480eba4d44aSLiu Zhe // Save the document before close 481eba4d44aSLiu Zhe SCUtil.save(scDocument); 482eba4d44aSLiu Zhe 483eba4d44aSLiu Zhe } 484eba4d44aSLiu Zhe 485eba4d44aSLiu Zhe } 486