xref: /AOO41X/test/testuno/source/testlib/uno/SCUtil.java (revision e6e6073ddaad3a04a985e8f05823629a884eb203)
1*e6e6073dSLiu Zhe /**************************************************************
2*e6e6073dSLiu Zhe  *
3*e6e6073dSLiu Zhe  * Licensed to the Apache Software Foundation (ASF) under one
4*e6e6073dSLiu Zhe  * or more contributor license agreements.  See the NOTICE file
5*e6e6073dSLiu Zhe  * distributed with this work for additional information
6*e6e6073dSLiu Zhe  * regarding copyright ownership.  The ASF licenses this file
7*e6e6073dSLiu Zhe  * to you under the Apache License, Version 2.0 (the
8*e6e6073dSLiu Zhe  * "License"); you may not use this file except in compliance
9*e6e6073dSLiu Zhe  * with the License.  You may obtain a copy of the License at
10*e6e6073dSLiu Zhe  *
11*e6e6073dSLiu Zhe  *   http://www.apache.org/licenses/LICENSE-2.0
12*e6e6073dSLiu Zhe  *
13*e6e6073dSLiu Zhe  * Unless required by applicable law or agreed to in writing,
14*e6e6073dSLiu Zhe  * software distributed under the License is distributed on an
15*e6e6073dSLiu Zhe  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*e6e6073dSLiu Zhe  * KIND, either express or implied.  See the License for the
17*e6e6073dSLiu Zhe  * specific language governing permissions and limitations
18*e6e6073dSLiu Zhe  * under the License.
19*e6e6073dSLiu Zhe  *
20*e6e6073dSLiu Zhe  *************************************************************/
21*e6e6073dSLiu Zhe 
22*e6e6073dSLiu Zhe 
23*e6e6073dSLiu Zhe package testlib.uno;
24*e6e6073dSLiu Zhe 
25*e6e6073dSLiu Zhe import java.util.HashMap;
26*e6e6073dSLiu Zhe 
27*e6e6073dSLiu Zhe import org.openoffice.test.common.FileUtil;
28*e6e6073dSLiu Zhe import org.openoffice.test.common.Testspace;
29*e6e6073dSLiu Zhe import org.openoffice.test.uno.UnoApp;
30*e6e6073dSLiu Zhe 
31*e6e6073dSLiu Zhe import com.sun.star.beans.PropertyValue;
32*e6e6073dSLiu Zhe import com.sun.star.beans.XPropertySet;
33*e6e6073dSLiu Zhe import com.sun.star.container.XIndexAccess;
34*e6e6073dSLiu Zhe import com.sun.star.container.XNamed;
35*e6e6073dSLiu Zhe import com.sun.star.frame.XController;
36*e6e6073dSLiu Zhe import com.sun.star.frame.XModel;
37*e6e6073dSLiu Zhe import com.sun.star.frame.XStorable;
38*e6e6073dSLiu Zhe import com.sun.star.lang.XComponent;
39*e6e6073dSLiu Zhe import com.sun.star.sheet.XSpreadsheet;
40*e6e6073dSLiu Zhe import com.sun.star.sheet.XSpreadsheetDocument;
41*e6e6073dSLiu Zhe import com.sun.star.sheet.XSpreadsheetView;
42*e6e6073dSLiu Zhe import com.sun.star.sheet.XSpreadsheets;
43*e6e6073dSLiu Zhe import com.sun.star.table.XCell;
44*e6e6073dSLiu Zhe import com.sun.star.table.XCellRange;
45*e6e6073dSLiu Zhe import com.sun.star.table.XColumnRowRange;
46*e6e6073dSLiu Zhe import com.sun.star.table.XTableColumns;
47*e6e6073dSLiu Zhe import com.sun.star.table.XTableRows;
48*e6e6073dSLiu Zhe import com.sun.star.text.XText;
49*e6e6073dSLiu Zhe import com.sun.star.uno.UnoRuntime;
50*e6e6073dSLiu Zhe import com.sun.star.util.XCloseable;
51*e6e6073dSLiu Zhe 
52*e6e6073dSLiu Zhe 
53*e6e6073dSLiu Zhe /**
54*e6e6073dSLiu Zhe  * Utilities of Spreadsheet
55*e6e6073dSLiu Zhe  *
56*e6e6073dSLiu Zhe  */
57*e6e6073dSLiu Zhe 
58*e6e6073dSLiu Zhe public class SCUtil {
59*e6e6073dSLiu Zhe 
60*e6e6073dSLiu Zhe 	private static final String scTempDir = "output/sc/"; //Spreadsheet temp file directory
61*e6e6073dSLiu Zhe 	private static HashMap filterName = new HashMap();
62*e6e6073dSLiu Zhe 
63*e6e6073dSLiu Zhe 	private SCUtil() {
64*e6e6073dSLiu Zhe 
65*e6e6073dSLiu Zhe 	}
66*e6e6073dSLiu Zhe 
67*e6e6073dSLiu Zhe 	/**
68*e6e6073dSLiu Zhe 	 * Get spreadsheet document object
69*e6e6073dSLiu Zhe 	 * @param xSpreadsheetComponent
70*e6e6073dSLiu Zhe 	 * @return
71*e6e6073dSLiu Zhe 	 * @throws Exception
72*e6e6073dSLiu Zhe 	 */
73*e6e6073dSLiu Zhe     public static XSpreadsheetDocument getSCDocument(XComponent xSpreadsheetComponent) throws Exception {
74*e6e6073dSLiu Zhe     	XSpreadsheetDocument xSpreadsheetDocument =
75*e6e6073dSLiu Zhe         		(XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, xSpreadsheetComponent);
76*e6e6073dSLiu Zhe 
77*e6e6073dSLiu Zhe         return xSpreadsheetDocument;
78*e6e6073dSLiu Zhe     }
79*e6e6073dSLiu Zhe 
80*e6e6073dSLiu Zhe     /**
81*e6e6073dSLiu Zhe      * Get sheet object by sheet name
82*e6e6073dSLiu Zhe      * @param xSpreadsheetDocument
83*e6e6073dSLiu Zhe      * @param sheetName
84*e6e6073dSLiu Zhe      * @return
85*e6e6073dSLiu Zhe      * @throws Exception
86*e6e6073dSLiu Zhe      */
87*e6e6073dSLiu Zhe 	public static XSpreadsheet getSCSheetByName(XSpreadsheetDocument xSpreadsheetDocument, String sheetName) throws Exception {
88*e6e6073dSLiu Zhe 		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
89*e6e6073dSLiu Zhe 		XSpreadsheet xSpreadsheet =
90*e6e6073dSLiu Zhe 				(XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, xSpreadsheets.getByName(sheetName));
91*e6e6073dSLiu Zhe 
92*e6e6073dSLiu Zhe 		return xSpreadsheet;
93*e6e6073dSLiu Zhe 	}
94*e6e6073dSLiu Zhe 
95*e6e6073dSLiu Zhe 	/**
96*e6e6073dSLiu Zhe 	 * Get sheet object by sheet index
97*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
98*e6e6073dSLiu Zhe 	 * @param index   (Short) 0,1,2,...
99*e6e6073dSLiu Zhe 	 * @return
100*e6e6073dSLiu Zhe 	 * @throws Exception
101*e6e6073dSLiu Zhe 	 */
102*e6e6073dSLiu Zhe 	public static XSpreadsheet getSCSheetByIndex(XSpreadsheetDocument xSpreadsheetDocument, short index) throws Exception {
103*e6e6073dSLiu Zhe 		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
104*e6e6073dSLiu Zhe 		XIndexAccess xIndexAccess =
105*e6e6073dSLiu Zhe 				(XIndexAccess) UnoRuntime.queryInterface(XIndexAccess.class, xSpreadsheets);
106*e6e6073dSLiu Zhe 		XSpreadsheet xSpreadsheet =
107*e6e6073dSLiu Zhe 				(XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, xIndexAccess.getByIndex(index));
108*e6e6073dSLiu Zhe 
109*e6e6073dSLiu Zhe 		return xSpreadsheet;
110*e6e6073dSLiu Zhe 	}
111*e6e6073dSLiu Zhe 
112*e6e6073dSLiu Zhe 	/**
113*e6e6073dSLiu Zhe 	 * Get sheet name by sheet index
114*e6e6073dSLiu Zhe 	 *
115*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
116*e6e6073dSLiu Zhe 	 * @param index
117*e6e6073dSLiu Zhe 	 *            (Short) 0,1,2,...
118*e6e6073dSLiu Zhe 	 * @return
119*e6e6073dSLiu Zhe 	 * @throws Exception
120*e6e6073dSLiu Zhe 	 */
121*e6e6073dSLiu Zhe 	public static String getSCSheetNameByIndex(
122*e6e6073dSLiu Zhe 			XSpreadsheetDocument xSpreadsheetDocument, short index)
123*e6e6073dSLiu Zhe 			throws Exception {
124*e6e6073dSLiu Zhe 		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
125*e6e6073dSLiu Zhe 		XIndexAccess xIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
126*e6e6073dSLiu Zhe 				XIndexAccess.class, xSpreadsheets);
127*e6e6073dSLiu Zhe 		XSpreadsheet xSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(
128*e6e6073dSLiu Zhe 				XSpreadsheet.class, xIndexAccess.getByIndex(index));
129*e6e6073dSLiu Zhe 		XNamed xsheetname = (XNamed) UnoRuntime.queryInterface(XNamed.class,
130*e6e6073dSLiu Zhe 				xSpreadsheet);
131*e6e6073dSLiu Zhe 		return xsheetname.getName();
132*e6e6073dSLiu Zhe 	}
133*e6e6073dSLiu Zhe 
134*e6e6073dSLiu Zhe 	/**
135*e6e6073dSLiu Zhe 	 * Set sheet name by sheet index
136*e6e6073dSLiu Zhe 	 *
137*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
138*e6e6073dSLiu Zhe 	 * @param index
139*e6e6073dSLiu Zhe 	 *            (Short) 0,1,2,...
140*e6e6073dSLiu Zhe 	 * @return
141*e6e6073dSLiu Zhe 	 * @throws Exception
142*e6e6073dSLiu Zhe 	 */
143*e6e6073dSLiu Zhe 	public static void setSCSheetNameByIndex(
144*e6e6073dSLiu Zhe 			XSpreadsheetDocument xSpreadsheetDocument, short index,
145*e6e6073dSLiu Zhe 			String sheetname) throws Exception {
146*e6e6073dSLiu Zhe 		XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
147*e6e6073dSLiu Zhe 		XIndexAccess xIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
148*e6e6073dSLiu Zhe 				XIndexAccess.class, xSpreadsheets);
149*e6e6073dSLiu Zhe 		XSpreadsheet xSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(
150*e6e6073dSLiu Zhe 				XSpreadsheet.class, xIndexAccess.getByIndex(index));
151*e6e6073dSLiu Zhe 		XNamed xsheetname = (XNamed) UnoRuntime.queryInterface(XNamed.class,
152*e6e6073dSLiu Zhe 				xSpreadsheet);
153*e6e6073dSLiu Zhe 		xsheetname.setName(sheetname);
154*e6e6073dSLiu Zhe 	}
155*e6e6073dSLiu Zhe 
156*e6e6073dSLiu Zhe 	/**
157*e6e6073dSLiu Zhe 	 * Get rows object
158*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
159*e6e6073dSLiu Zhe 	 * @return
160*e6e6073dSLiu Zhe 	 * @throws Exception
161*e6e6073dSLiu Zhe 	 */
162*e6e6073dSLiu Zhe 	public static XTableRows getSCRows(XSpreadsheet xSpreadsheet) throws Exception {
163*e6e6073dSLiu Zhe 		XColumnRowRange xColumnRowRange =
164*e6e6073dSLiu Zhe 				(XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xSpreadsheet);
165*e6e6073dSLiu Zhe 		XTableRows xTableRows = xColumnRowRange.getRows();
166*e6e6073dSLiu Zhe 
167*e6e6073dSLiu Zhe 		return xTableRows;
168*e6e6073dSLiu Zhe 	}
169*e6e6073dSLiu Zhe 
170*e6e6073dSLiu Zhe 	/**
171*e6e6073dSLiu Zhe 	 * Get columns object
172*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
173*e6e6073dSLiu Zhe 	 * @return
174*e6e6073dSLiu Zhe 	 * @throws Exception
175*e6e6073dSLiu Zhe 	 */
176*e6e6073dSLiu Zhe 	public static XTableColumns getSCColumns(XSpreadsheet xSpreadsheet) throws Exception {
177*e6e6073dSLiu Zhe 		XColumnRowRange xColumnRowRange =
178*e6e6073dSLiu Zhe 				(XColumnRowRange) UnoRuntime.queryInterface(XColumnRowRange.class, xSpreadsheet);
179*e6e6073dSLiu Zhe 		XTableColumns xTableColumns = xColumnRowRange.getColumns();
180*e6e6073dSLiu Zhe 
181*e6e6073dSLiu Zhe 		return xTableColumns;
182*e6e6073dSLiu Zhe 	}
183*e6e6073dSLiu Zhe 
184*e6e6073dSLiu Zhe 	/**
185*e6e6073dSLiu Zhe 	 * Set floating number into specific cell
186*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
187*e6e6073dSLiu Zhe 	 * @param column
188*e6e6073dSLiu Zhe 	 * @param row
189*e6e6073dSLiu Zhe 	 * @param value
190*e6e6073dSLiu Zhe 	 * @throws Exception
191*e6e6073dSLiu Zhe 	 */
192*e6e6073dSLiu Zhe 	public static void setValueToCell(XSpreadsheet xSpreadsheet, int column, int row, double value) throws Exception {
193*e6e6073dSLiu Zhe 		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
194*e6e6073dSLiu Zhe 		xCell.setValue(value);
195*e6e6073dSLiu Zhe 	}
196*e6e6073dSLiu Zhe 
197*e6e6073dSLiu Zhe 	/**
198*e6e6073dSLiu Zhe 	 * Set text into specific cell
199*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
200*e6e6073dSLiu Zhe 	 * @param column
201*e6e6073dSLiu Zhe 	 * @param row
202*e6e6073dSLiu Zhe 	 * @param text
203*e6e6073dSLiu Zhe 	 * @throws Exception
204*e6e6073dSLiu Zhe 	 */
205*e6e6073dSLiu Zhe 	public static void setTextToCell(XSpreadsheet xSpreadsheet, int column, int row, String text) throws Exception {
206*e6e6073dSLiu Zhe 		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
207*e6e6073dSLiu Zhe 		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
208*e6e6073dSLiu Zhe 		xText.setString(text);
209*e6e6073dSLiu Zhe 	}
210*e6e6073dSLiu Zhe 
211*e6e6073dSLiu Zhe 	/**
212*e6e6073dSLiu Zhe 	 * Set text into specific cell
213*e6e6073dSLiu Zhe 	 * @param xCell
214*e6e6073dSLiu Zhe 	 * @param text
215*e6e6073dSLiu Zhe 	 * @throws Exception
216*e6e6073dSLiu Zhe 	 */
217*e6e6073dSLiu Zhe 	public static void setTextToCell(XCell xCell, String text) throws Exception {
218*e6e6073dSLiu Zhe 		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
219*e6e6073dSLiu Zhe 		xText.setString(text);
220*e6e6073dSLiu Zhe 	}
221*e6e6073dSLiu Zhe 
222*e6e6073dSLiu Zhe 	/**
223*e6e6073dSLiu Zhe 	 * Set formula into specific cell
224*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
225*e6e6073dSLiu Zhe 	 * @param column
226*e6e6073dSLiu Zhe 	 * @param row
227*e6e6073dSLiu Zhe 	 * @param formula
228*e6e6073dSLiu Zhe 	 * @throws Exception
229*e6e6073dSLiu Zhe 	 */
230*e6e6073dSLiu Zhe 	public static void setFormulaToCell(XSpreadsheet xSpreadsheet, int column, int row, String formula) throws Exception {
231*e6e6073dSLiu Zhe 		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
232*e6e6073dSLiu Zhe 		xCell.setFormula(formula);
233*e6e6073dSLiu Zhe 	}
234*e6e6073dSLiu Zhe 
235*e6e6073dSLiu Zhe 	/**
236*e6e6073dSLiu Zhe 	 * Get value from specific cell
237*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
238*e6e6073dSLiu Zhe 	 * @param column
239*e6e6073dSLiu Zhe 	 * @param row
240*e6e6073dSLiu Zhe 	 * @return
241*e6e6073dSLiu Zhe 	 * @throws Exception
242*e6e6073dSLiu Zhe 	 */
243*e6e6073dSLiu Zhe 	public static double getValueFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
244*e6e6073dSLiu Zhe 		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
245*e6e6073dSLiu Zhe 		double cellValue = xCell.getValue();
246*e6e6073dSLiu Zhe 
247*e6e6073dSLiu Zhe 		return cellValue;
248*e6e6073dSLiu Zhe 	}
249*e6e6073dSLiu Zhe 
250*e6e6073dSLiu Zhe 	/**
251*e6e6073dSLiu Zhe 	 * Get text from specific cell
252*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
253*e6e6073dSLiu Zhe 	 * @param column
254*e6e6073dSLiu Zhe 	 * @param row
255*e6e6073dSLiu Zhe 	 *
256*e6e6073dSLiu Zhe 	 * @return
257*e6e6073dSLiu Zhe 	 * @throws Exception
258*e6e6073dSLiu Zhe 	 */
259*e6e6073dSLiu Zhe 	public static String getTextFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
260*e6e6073dSLiu Zhe 		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
261*e6e6073dSLiu Zhe 		XText xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
262*e6e6073dSLiu Zhe 
263*e6e6073dSLiu Zhe 		return xText.getString();
264*e6e6073dSLiu Zhe 	}
265*e6e6073dSLiu Zhe 
266*e6e6073dSLiu Zhe 	/**
267*e6e6073dSLiu Zhe 	 * Get formula string from specific cell
268*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
269*e6e6073dSLiu Zhe 	 * @param column
270*e6e6073dSLiu Zhe 	 * @param row
271*e6e6073dSLiu Zhe 	 * @return
272*e6e6073dSLiu Zhe 	 * @throws Exception
273*e6e6073dSLiu Zhe 	 */
274*e6e6073dSLiu Zhe 	public static String getFormulaFromCell(XSpreadsheet xSpreadsheet, int column, int row) throws Exception {
275*e6e6073dSLiu Zhe 		XCell xCell = xSpreadsheet.getCellByPosition(column, row);
276*e6e6073dSLiu Zhe 		String cellFormula = xCell.getFormula();
277*e6e6073dSLiu Zhe 
278*e6e6073dSLiu Zhe 		return cellFormula;
279*e6e6073dSLiu Zhe 	}
280*e6e6073dSLiu Zhe 
281*e6e6073dSLiu Zhe 	/**
282*e6e6073dSLiu Zhe 	 * Set numbers into a cell range
283*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
284*e6e6073dSLiu Zhe 	 * @param start_col
285*e6e6073dSLiu Zhe 	 * @param start_row
286*e6e6073dSLiu Zhe 	 * @param end_col
287*e6e6073dSLiu Zhe 	 * @param end_row
288*e6e6073dSLiu Zhe 	 * @param values
289*e6e6073dSLiu Zhe 	 * @throws Exception
290*e6e6073dSLiu Zhe 	 */
291*e6e6073dSLiu Zhe 	public static void setValueToCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row,  double[][] values) throws Exception {
292*e6e6073dSLiu Zhe 		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
293*e6e6073dSLiu Zhe 		XCell xCell = null;
294*e6e6073dSLiu Zhe 		for (int i = 0; i <= (end_row - start_row); i++ ) {
295*e6e6073dSLiu Zhe 			for(int j = 0; j <= (end_col - start_col); j++) {
296*e6e6073dSLiu Zhe 				xCell = xCellRange.getCellByPosition(j, i);
297*e6e6073dSLiu Zhe 				xCell.setValue(values[i][j]);
298*e6e6073dSLiu Zhe 			}
299*e6e6073dSLiu Zhe 		}
300*e6e6073dSLiu Zhe 	}
301*e6e6073dSLiu Zhe 
302*e6e6073dSLiu Zhe 	/**
303*e6e6073dSLiu Zhe 	 * Set text into a cell range
304*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
305*e6e6073dSLiu Zhe 	 * @param start_col
306*e6e6073dSLiu Zhe 	 * @param start_row
307*e6e6073dSLiu Zhe 	 * @param end_col
308*e6e6073dSLiu Zhe 	 * @param end_row
309*e6e6073dSLiu Zhe 	 * @param texts
310*e6e6073dSLiu Zhe 	 * @throws Exception
311*e6e6073dSLiu Zhe 	 */
312*e6e6073dSLiu Zhe 	public static void setTextToCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row,  String[][] texts) throws Exception {
313*e6e6073dSLiu Zhe 		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
314*e6e6073dSLiu Zhe 		XCell xCell = null;
315*e6e6073dSLiu Zhe 		XText xText = null;
316*e6e6073dSLiu Zhe 		for (int i = 0; i <= (end_row - start_row); i++ ) {
317*e6e6073dSLiu Zhe 			for(int j = 0; j <= (end_col - start_col); j++) {
318*e6e6073dSLiu Zhe 				xCell = xCellRange.getCellByPosition(j, i);
319*e6e6073dSLiu Zhe 				xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
320*e6e6073dSLiu Zhe 				xText.setString(texts[i][j]);
321*e6e6073dSLiu Zhe 			}
322*e6e6073dSLiu Zhe 		}
323*e6e6073dSLiu Zhe 	}
324*e6e6073dSLiu Zhe 
325*e6e6073dSLiu Zhe 	/**
326*e6e6073dSLiu Zhe 	 * Get number content from a cell range
327*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
328*e6e6073dSLiu Zhe 	 * @param start_col
329*e6e6073dSLiu Zhe 	 * @param start_row
330*e6e6073dSLiu Zhe 	 * @param end_col
331*e6e6073dSLiu Zhe 	 * @param end_row
332*e6e6073dSLiu Zhe 	 * @return
333*e6e6073dSLiu Zhe 	 * @throws Exception
334*e6e6073dSLiu Zhe 	 */
335*e6e6073dSLiu Zhe 	public static double[][] getValueFromCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row) throws Exception {
336*e6e6073dSLiu Zhe 		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
337*e6e6073dSLiu Zhe 		XCell xCell = null;
338*e6e6073dSLiu Zhe 		double[][] cellValues = new double[end_row - start_row+1][end_col - start_col +1];
339*e6e6073dSLiu Zhe 
340*e6e6073dSLiu Zhe 		for (int i = 0; i <= (end_row - start_row); i++ ) {
341*e6e6073dSLiu Zhe 			for(int j = 0; j <= (end_col - start_col); j++) {
342*e6e6073dSLiu Zhe 				xCell = xCellRange.getCellByPosition(j, i);
343*e6e6073dSLiu Zhe 				cellValues[i][j] = xCell.getValue();
344*e6e6073dSLiu Zhe 			}
345*e6e6073dSLiu Zhe 		}
346*e6e6073dSLiu Zhe 
347*e6e6073dSLiu Zhe 		return cellValues;
348*e6e6073dSLiu Zhe 	}
349*e6e6073dSLiu Zhe 
350*e6e6073dSLiu Zhe 	/**
351*e6e6073dSLiu Zhe 	 * Get text content from a cell range
352*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
353*e6e6073dSLiu Zhe 	 * @param start_col
354*e6e6073dSLiu Zhe 	 * @param start_row
355*e6e6073dSLiu Zhe 	 * @param end_col
356*e6e6073dSLiu Zhe 	 * @param end_row
357*e6e6073dSLiu Zhe 	 * @return
358*e6e6073dSLiu Zhe 	 * @throws Exception
359*e6e6073dSLiu Zhe 	 */
360*e6e6073dSLiu Zhe 	public static String[][] getTextFromCellRange(XSpreadsheet xSpreadsheet, int start_col, int start_row, int end_col, int end_row) throws Exception {
361*e6e6073dSLiu Zhe 		XCellRange xCellRange = xSpreadsheet.getCellRangeByPosition(start_col, start_row, end_col, end_row);
362*e6e6073dSLiu Zhe 		XCell xCell = null;
363*e6e6073dSLiu Zhe 		XText xText = null;
364*e6e6073dSLiu Zhe 		String[][] cellTexts = new String[end_row - start_row+1][end_col - start_col +1];
365*e6e6073dSLiu Zhe 
366*e6e6073dSLiu Zhe 		for (int i = 0; i <= (end_row - start_row); i++ ) {
367*e6e6073dSLiu Zhe 			for (int j = 0; j <= (end_col - start_col); j++) {
368*e6e6073dSLiu Zhe 				xCell = xCellRange.getCellByPosition(j, i);
369*e6e6073dSLiu Zhe 				xText = (XText) UnoRuntime.queryInterface(XText.class, xCell);
370*e6e6073dSLiu Zhe 				cellTexts[i][j] = xText.getString();
371*e6e6073dSLiu Zhe 			}
372*e6e6073dSLiu Zhe 		}
373*e6e6073dSLiu Zhe 
374*e6e6073dSLiu Zhe 		return cellTexts;
375*e6e6073dSLiu Zhe 	}
376*e6e6073dSLiu Zhe 
377*e6e6073dSLiu Zhe 	//TODO ZS - public static String[][] getAllFromCellRange
378*e6e6073dSLiu Zhe 
379*e6e6073dSLiu Zhe 	/**
380*e6e6073dSLiu Zhe 	 * Switch to specific sheet
381*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
382*e6e6073dSLiu Zhe 	 * @param xSpreadsheet
383*e6e6073dSLiu Zhe 	 */
384*e6e6073dSLiu Zhe 	public static void setCurrentSheet(XSpreadsheetDocument xSpreadsheetDocument, XSpreadsheet xSpreadsheet) throws Exception {
385*e6e6073dSLiu Zhe 		XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xSpreadsheetDocument);
386*e6e6073dSLiu Zhe 		XController xController = xModel.getCurrentController();
387*e6e6073dSLiu Zhe 		XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) UnoRuntime.queryInterface(XSpreadsheetView.class, xController);
388*e6e6073dSLiu Zhe 		xSpreadsheetView.setActiveSheet(xSpreadsheet);
389*e6e6073dSLiu Zhe 	}
390*e6e6073dSLiu Zhe 
391*e6e6073dSLiu Zhe 	/**
392*e6e6073dSLiu Zhe 	 * Get sheet object of current active sheet
393*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
394*e6e6073dSLiu Zhe 	 * @return
395*e6e6073dSLiu Zhe 	 */
396*e6e6073dSLiu Zhe 	public static XSpreadsheet getCurrentSheet(XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
397*e6e6073dSLiu Zhe 		XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xSpreadsheetDocument);
398*e6e6073dSLiu Zhe 		XController xController = xModel.getCurrentController();
399*e6e6073dSLiu Zhe 		XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) UnoRuntime.queryInterface(XSpreadsheetView.class, xController);
400*e6e6073dSLiu Zhe 		XSpreadsheet xSpreadsheet = xSpreadsheetView.getActiveSheet();
401*e6e6073dSLiu Zhe 
402*e6e6073dSLiu Zhe 		return xSpreadsheet;
403*e6e6073dSLiu Zhe 	}
404*e6e6073dSLiu Zhe 
405*e6e6073dSLiu Zhe 	/**
406*e6e6073dSLiu Zhe 	 * Get sheet object by sheet index
407*e6e6073dSLiu Zhe 	 *
408*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
409*e6e6073dSLiu Zhe 	 * @return
410*e6e6073dSLiu Zhe 	 * @throws Exception
411*e6e6073dSLiu Zhe 	 */
412*e6e6073dSLiu Zhe 	public static String getSCActiveSheetName(
413*e6e6073dSLiu Zhe 			XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
414*e6e6073dSLiu Zhe 		XModel xSpreadsheetModel = (XModel) UnoRuntime.queryInterface(
415*e6e6073dSLiu Zhe 				XModel.class, xSpreadsheetDocument);
416*e6e6073dSLiu Zhe 		XSpreadsheetView xSpeadsheetView = (XSpreadsheetView) UnoRuntime
417*e6e6073dSLiu Zhe 				.queryInterface(XSpreadsheetView.class,
418*e6e6073dSLiu Zhe 						xSpreadsheetModel.getCurrentController());
419*e6e6073dSLiu Zhe 		XSpreadsheet activesheet = xSpeadsheetView.getActiveSheet();
420*e6e6073dSLiu Zhe 		XNamed activesheetName = (XNamed) UnoRuntime.queryInterface(
421*e6e6073dSLiu Zhe 				XNamed.class, activesheet);
422*e6e6073dSLiu Zhe 		return activesheetName.getName();
423*e6e6073dSLiu Zhe 	}
424*e6e6073dSLiu Zhe 
425*e6e6073dSLiu Zhe 	/**
426*e6e6073dSLiu Zhe 	 * Set value of specific property from a cell
427*e6e6073dSLiu Zhe 	 * @param xCell
428*e6e6073dSLiu Zhe 	 * @param propName
429*e6e6073dSLiu Zhe 	 * @param value
430*e6e6073dSLiu Zhe 	 * @throws Exception
431*e6e6073dSLiu Zhe 	 */
432*e6e6073dSLiu Zhe 	public static void setCellProperties(XCell xCell, String propName, Object value) throws Exception {
433*e6e6073dSLiu Zhe 
434*e6e6073dSLiu Zhe 		XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xCell);
435*e6e6073dSLiu Zhe 		xPropertySet.setPropertyValue(propName, value);
436*e6e6073dSLiu Zhe 	}
437*e6e6073dSLiu Zhe 
438*e6e6073dSLiu Zhe 	/**
439*e6e6073dSLiu Zhe 	 * Get value of specific property from a cell
440*e6e6073dSLiu Zhe 	 * @param xCell
441*e6e6073dSLiu Zhe 	 * @param propName
442*e6e6073dSLiu Zhe 	 * @return
443*e6e6073dSLiu Zhe 	 * @throws Exception
444*e6e6073dSLiu Zhe 	 */
445*e6e6073dSLiu Zhe 	public static Object getCellProperties(XCell xCell, String propName) throws Exception {
446*e6e6073dSLiu Zhe 		XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xCell);
447*e6e6073dSLiu Zhe 		Object value = xPropertySet.getPropertyValue(propName);
448*e6e6073dSLiu Zhe 
449*e6e6073dSLiu Zhe 		return value;
450*e6e6073dSLiu Zhe 	}
451*e6e6073dSLiu Zhe 
452*e6e6073dSLiu Zhe 	/**
453*e6e6073dSLiu Zhe 	 * Clear temp file directory
454*e6e6073dSLiu Zhe 	 */
455*e6e6073dSLiu Zhe 	public static void clearTempDir() {
456*e6e6073dSLiu Zhe 		FileUtil.deleteFile(Testspace.getFile(Testspace.getPath(scTempDir)));
457*e6e6073dSLiu Zhe 	}
458*e6e6073dSLiu Zhe 
459*e6e6073dSLiu Zhe 	/**
460*e6e6073dSLiu Zhe 	 * Save file as specific file format into spreadsheet temp file folder.
461*e6e6073dSLiu Zhe 	 * @param scComponent
462*e6e6073dSLiu Zhe 	 * @param fileName  File name string without extension name (e.g. "sampleFile")
463*e6e6073dSLiu Zhe 	 * @param extName ("ods", "ots", "xls", "xlt", "csv")
464*e6e6073dSLiu Zhe 	 * @throws Exception
465*e6e6073dSLiu Zhe 	 */
466*e6e6073dSLiu Zhe 	public static void saveFileAs(XComponent scComponent, String fileName, String extName) throws Exception {
467*e6e6073dSLiu Zhe 
468*e6e6073dSLiu Zhe 		initFilterName();
469*e6e6073dSLiu Zhe 
470*e6e6073dSLiu Zhe 		String storeUrl = Testspace.getUrl(scTempDir + fileName + "." + extName);
471*e6e6073dSLiu Zhe 
472*e6e6073dSLiu Zhe 		PropertyValue[] storeProps = new PropertyValue[2];
473*e6e6073dSLiu Zhe 		storeProps[0] = new PropertyValue();
474*e6e6073dSLiu Zhe 		storeProps[0].Name = "FilterName";
475*e6e6073dSLiu Zhe 		storeProps[0].Value = filterName.get(extName);
476*e6e6073dSLiu Zhe 		storeProps[1] = new PropertyValue();
477*e6e6073dSLiu Zhe 		storeProps[1].Name = "Overwrite";
478*e6e6073dSLiu Zhe 		storeProps[1].Value = new Boolean(true);
479*e6e6073dSLiu Zhe 
480*e6e6073dSLiu Zhe 		XStorable scStorable =
481*e6e6073dSLiu Zhe 				(XStorable) UnoRuntime.queryInterface(XStorable.class, scComponent);
482*e6e6073dSLiu Zhe 		scStorable.storeAsURL(storeUrl, storeProps);
483*e6e6073dSLiu Zhe 	}
484*e6e6073dSLiu Zhe 
485*e6e6073dSLiu Zhe 	/**
486*e6e6073dSLiu Zhe 	 * Save file after open file.
487*e6e6073dSLiu Zhe 	 *
488*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
489*e6e6073dSLiu Zhe 	 * @throws Exception
490*e6e6073dSLiu Zhe 	 */
491*e6e6073dSLiu Zhe 	public static void save(XSpreadsheetDocument xSpreadsheetDocument)
492*e6e6073dSLiu Zhe 			throws Exception {
493*e6e6073dSLiu Zhe 
494*e6e6073dSLiu Zhe 		XStorable scStorable = (XStorable) UnoRuntime.queryInterface(
495*e6e6073dSLiu Zhe 				XStorable.class, xSpreadsheetDocument);
496*e6e6073dSLiu Zhe 		scStorable.store();
497*e6e6073dSLiu Zhe 
498*e6e6073dSLiu Zhe 	}
499*e6e6073dSLiu Zhe 
500*e6e6073dSLiu Zhe 
501*e6e6073dSLiu Zhe 	/**
502*e6e6073dSLiu Zhe 	 * Close specific opening spreadsheet file which has been saved
503*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
504*e6e6073dSLiu Zhe 	 * @throws Exception
505*e6e6073dSLiu Zhe 	 */
506*e6e6073dSLiu Zhe 	public static void closeFile(XSpreadsheetDocument xSpreadsheetDocument) throws Exception {
507*e6e6073dSLiu Zhe 		XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, xSpreadsheetDocument);
508*e6e6073dSLiu Zhe 		xCloseable.close(false);
509*e6e6073dSLiu Zhe 	}
510*e6e6073dSLiu Zhe 
511*e6e6073dSLiu Zhe 	/**
512*e6e6073dSLiu Zhe 	 * Close a opening file saved in spreadsheet temp file direction and reopen it in Spreadsheet. For save&reload test scenario only.
513*e6e6073dSLiu Zhe 	 * @param unoApp
514*e6e6073dSLiu Zhe 	 * @param xSpreadsheetDocument
515*e6e6073dSLiu Zhe 	 * @param fullFileName   File name with the extension name. (e.g. "sc.ods")
516*e6e6073dSLiu Zhe 	 * @return
517*e6e6073dSLiu Zhe 	 * @throws Exception
518*e6e6073dSLiu Zhe 	 */
519*e6e6073dSLiu Zhe 	public static XSpreadsheetDocument reloadFile(UnoApp unoApp, XSpreadsheetDocument xSpreadsheetDocument, String fullFileName) throws Exception {
520*e6e6073dSLiu Zhe 		closeFile(xSpreadsheetDocument);
521*e6e6073dSLiu Zhe 
522*e6e6073dSLiu Zhe 		String filePath = Testspace.getPath(scTempDir + fullFileName);
523*e6e6073dSLiu Zhe 		XSpreadsheetDocument xScDocument = UnoRuntime.queryInterface(XSpreadsheetDocument.class, unoApp.loadDocument(filePath));
524*e6e6073dSLiu Zhe 
525*e6e6073dSLiu Zhe 		return xScDocument;
526*e6e6073dSLiu Zhe 	}
527*e6e6073dSLiu Zhe 
528*e6e6073dSLiu Zhe 	/**
529*e6e6073dSLiu Zhe 	 * Initial the filter name list
530*e6e6073dSLiu Zhe 	 * @throws Exception
531*e6e6073dSLiu Zhe 	 */
532*e6e6073dSLiu Zhe 	private static void initFilterName() throws Exception {
533*e6e6073dSLiu Zhe 		if (filterName.size() > 0) {
534*e6e6073dSLiu Zhe 			return;
535*e6e6073dSLiu Zhe 		}
536*e6e6073dSLiu Zhe 
537*e6e6073dSLiu Zhe 		filterName.put("ods", "calc8");
538*e6e6073dSLiu Zhe 		filterName.put("ots", "calc8_template");
539*e6e6073dSLiu Zhe 		filterName.put("xls", "MS Excel 97");
540*e6e6073dSLiu Zhe 		filterName.put("xlt", "MS Excel 97 Vorlage/Template");
541*e6e6073dSLiu Zhe 		filterName.put("csv", "Text - txt - csv (StarCalc)");
542*e6e6073dSLiu Zhe 	}
543*e6e6073dSLiu Zhe 
544*e6e6073dSLiu Zhe }
545