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