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