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