Difference between revisions of "Documentation/DevGuide/FirstSteps/Example: Working with a Spreadsheet Document"
m |
|||
(14 intermediate revisions by 6 users not shown) | |||
Line 4: | Line 4: | ||
|PrevPage=Documentation/DevGuide/FirstSteps/Using Services | |PrevPage=Documentation/DevGuide/FirstSteps/Using Services | ||
|NextPage=Documentation/DevGuide/FirstSteps/Common Types | |NextPage=Documentation/DevGuide/FirstSteps/Common Types | ||
− | }} | + | }} |
− | + | {{Documentation/DevGuideLanguages|Documentation/DevGuide/FirstSteps/{{SUBPAGENAME}}}} | |
{{DISPLAYTITLE:Example: Working with a Spreadsheet Document}} | {{DISPLAYTITLE:Example: Working with a Spreadsheet Document}} | ||
− | In this example, we will ask the remote service manager to give us the remote <code>Desktop</code> object and use its <code>loadComponentFromURL()</code> method to create a new spreadsheet document. From the document we get its sheets container where we insert and access a new sheet by name. In the new sheet, we enter values into A1 and A2 and summarize them in A3. The cell style of the summarizing cell gets the cell style Result, so that it appears in italics, bold and underlined. Finally, we make our new sheet the active sheet, so that the user can see it. | + | In this example, we will use the simple bootstrap mechanism ([https://www.openoffice.org/api/docs/java/ref/com/sun/star/comp/helper/Bootstrap.html#Bootstrap() com.sun.star.comp.helper.Bootstrap.Bootstrap()]) to get the remote office context of a running office instance and ask the remote service manager to give us the remote <code><idls>com.sun.star.frame.Desktop</idls></code> object and use its <code><idlm>com.sun.star.frame.XComponentLoader:loadComponentFromURL</idlm>()</code> method to create a new spreadsheet document. From the document we get its sheets container where we insert and access a new sheet by name. In the new sheet, we enter values into A1 and A2 and summarize them in A3. The cell style of the summarizing cell gets the cell style Result, so that it appears in italics, bold and underlined. Finally, we make our new sheet the active sheet, so that the user can see it. |
− | Add | + | Add the following code in a new generated [https://wiki.openoffice.org/wiki/OpenOffice_Simple_UNO_Client_Application_Project_Type NetBeans UNO client application] project FirstLoadComponent: |
− | + | <!--[SOURCE:FirstSteps/FirstLoadComponent.java]--> | |
− | + | <syntaxhighlight lang="java"> | |
− | + | package ooo.sdk.devguide.firststeps; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | import com.sun.star.beans.PropertyValue; | ||
+ | import com.sun.star.beans.XPropertySet; | ||
+ | import com.sun.star.uno.XComponentContext; | ||
+ | import com.sun.star.comp.helper.Bootstrap; | ||
+ | import com.sun.star.container.XEnumeration; | ||
+ | import com.sun.star.container.XEnumerationAccess; | ||
+ | import com.sun.star.frame.XComponentLoader; | ||
+ | import com.sun.star.frame.XController; | ||
+ | import com.sun.star.frame.XModel; | ||
+ | import com.sun.star.lang.XComponent; | ||
+ | import com.sun.star.lang.XMultiComponentFactory; | ||
+ | import com.sun.star.sheet.XCellAddressable; | ||
+ | import com.sun.star.sheet.XCellRangesQuery; | ||
+ | import com.sun.star.sheet.XSheetCellRanges; | ||
+ | import com.sun.star.sheet.XSpreadsheet; | ||
+ | import com.sun.star.sheet.XSpreadsheetDocument; | ||
+ | import com.sun.star.sheet.XSpreadsheetView; | ||
+ | import com.sun.star.sheet.XSpreadsheets; | ||
+ | import com.sun.star.table.XCell; | ||
+ | import com.sun.star.uno.UnoRuntime; | ||
+ | public class FirstLoadComponent { | ||
+ | |||
+ | /** Creates a new instance of FirstLoadComponent */ | ||
+ | public FirstLoadComponent() { | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * @param args the command line arguments | ||
+ | */ | ||
+ | public static void main(String[] args) { | ||
+ | try { | ||
+ | // get the remote office component context | ||
+ | XComponentContext xRemoteContext = Bootstrap.bootstrap(); | ||
+ | if (xRemoteContext == null) { | ||
+ | System.err.println("ERROR: Could not bootstrap default Office."); | ||
+ | } | ||
+ | XMultiComponentFactory xRemoteServiceManager = xRemoteContext.getServiceManager(); | ||
+ | Object desktop = xRemoteServiceManager.createInstanceWithContext( | ||
+ | "com.sun.star.frame.Desktop", xRemoteContext); | ||
+ | XComponentLoader xComponentLoader = (XComponentLoader) | ||
+ | UnoRuntime.queryInterface(XComponentLoader.class, desktop); | ||
+ | PropertyValue[] loadProps = new PropertyValue[0]; | ||
+ | XComponent xSpreadsheetComponent = xComponentLoader.loadComponentFromURL("private:factory/scalc", "_blank", 0, loadProps); | ||
+ | XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument) | ||
+ | UnoRuntime.queryInterface(XSpreadsheetDocument.class, | ||
+ | xSpreadsheetComponent); | ||
+ | XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets(); | ||
+ | xSpreadsheets.insertNewByName("MySheet", (short)0); | ||
+ | com.sun.star.uno.Type elemType = xSpreadsheets.getElementType(); | ||
− | + | System.out.println(elemType.getTypeName()); | |
+ | Object sheet = xSpreadsheets.getByName("MySheet"); | ||
+ | XSpreadsheet xSpreadsheet = (XSpreadsheet)UnoRuntime.queryInterface( | ||
+ | XSpreadsheet.class, sheet); | ||
+ | |||
+ | XCell xCell = xSpreadsheet.getCellByPosition(0, 0); | ||
+ | xCell.setValue(21); | ||
+ | xCell = xSpreadsheet.getCellByPosition(0, 1); | ||
+ | xCell.setValue(21); | ||
+ | xCell = xSpreadsheet.getCellByPosition(0, 2); | ||
+ | xCell.setFormula("=sum(A1:A2)"); | ||
+ | |||
+ | XPropertySet xCellProps = (XPropertySet)UnoRuntime.queryInterface( | ||
+ | XPropertySet.class, xCell); | ||
+ | xCellProps.setPropertyValue("CellStyle", "Result"); | ||
+ | |||
+ | XModel xSpreadsheetModel = (XModel)UnoRuntime.queryInterface( | ||
+ | XModel.class, xSpreadsheetComponent); | ||
+ | XController xSpreadsheetController = xSpreadsheetModel.getCurrentController(); | ||
+ | XSpreadsheetView xSpreadsheetView = (XSpreadsheetView) | ||
+ | UnoRuntime.queryInterface(XSpreadsheetView.class, | ||
+ | xSpreadsheetController); | ||
+ | xSpreadsheetView.setActiveSheet(xSpreadsheet); | ||
+ | |||
+ | // ********************************************************* | ||
+ | // example for use of enum types | ||
+ | xCellProps.setPropertyValue("VertJustify", | ||
+ | com.sun.star.table.CellVertJustify.TOP); | ||
+ | |||
+ | |||
+ | // ********************************************************* | ||
+ | // example for a sequence of PropertyValue structs | ||
+ | // create an array with one PropertyValue struct, it contains | ||
+ | // references only | ||
+ | loadProps = new PropertyValue[1]; | ||
+ | |||
+ | // instantiate PropertyValue struct and set its member fields | ||
+ | PropertyValue asTemplate = new PropertyValue(); | ||
+ | asTemplate.Name = "AsTemplate"; | ||
+ | asTemplate.Value = new Boolean(true); | ||
+ | |||
+ | // assign PropertyValue struct to array of references for PropertyValue | ||
+ | // structs | ||
+ | loadProps[0] = asTemplate; | ||
+ | |||
+ | // load calc file as template | ||
+ | //xSpreadsheetComponent = xComponentLoader.loadComponentFromURL( | ||
+ | // "file:///c:/temp/DataAnalysys.ods", "_blank", 0, loadProps); | ||
+ | |||
+ | // ********************************************************* | ||
+ | // example for use of XEnumerationAccess | ||
+ | XCellRangesQuery xCellQuery = (XCellRangesQuery) | ||
+ | UnoRuntime.queryInterface(XCellRangesQuery.class, sheet); | ||
+ | XSheetCellRanges xFormulaCells = xCellQuery.queryContentCells( | ||
+ | (short)com.sun.star.sheet.CellFlags.FORMULA); | ||
+ | XEnumerationAccess xFormulas = xFormulaCells.getCells(); | ||
+ | XEnumeration xFormulaEnum = xFormulas.createEnumeration(); | ||
+ | |||
+ | while (xFormulaEnum.hasMoreElements()) { | ||
+ | Object formulaCell = xFormulaEnum.nextElement(); | ||
+ | xCell = (XCell)UnoRuntime.queryInterface(XCell.class, formulaCell); | ||
+ | XCellAddressable xCellAddress = (XCellAddressable) | ||
+ | UnoRuntime.queryInterface(XCellAddressable.class, xCell); | ||
+ | System.out.println("Formula cell in column " + | ||
+ | xCellAddress.getCellAddress().Column | ||
+ | + ", row " + xCellAddress.getCellAddress().Row | ||
+ | + " contains " + xCell.getFormula()); | ||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | catch( Exception e) { | + | catch (java.lang.Exception e){ |
e.printStackTrace(); | e.printStackTrace(); | ||
− | |||
} | } | ||
− | + | finally { | |
− | + | System.exit( 0 ); | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | ||
− | + | } | |
− | + | </syntaxhighlight> | |
− | |||
− | |||
− | |||
Alternatively, you can add ''FirstLoadComponent.java'' from the samples directory to your current project, it contains the changes shown above. | Alternatively, you can add ''FirstLoadComponent.java'' from the samples directory to your current project, it contains the changes shown above. | ||
Line 121: | Line 155: | ||
{{PDL1}} | {{PDL1}} | ||
− | [[Category:Documentation/ | + | [[Category:Documentation/Developer's Guide/First Steps]] |
Latest revision as of 11:15, 18 May 2022
In this example, we will use the simple bootstrap mechanism (com.sun.star.comp.helper.Bootstrap.Bootstrap()) to get the remote office context of a running office instance and ask the remote service manager to give us the remote Desktop
object and use its loadComponentFromURL()
method to create a new spreadsheet document. From the document we get its sheets container where we insert and access a new sheet by name. In the new sheet, we enter values into A1 and A2 and summarize them in A3. The cell style of the summarizing cell gets the cell style Result, so that it appears in italics, bold and underlined. Finally, we make our new sheet the active sheet, so that the user can see it.
Add the following code in a new generated NetBeans UNO client application project FirstLoadComponent:
package ooo.sdk.devguide.firststeps;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.uno.XComponentContext;
import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.container.XEnumeration;
import com.sun.star.container.XEnumerationAccess;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.frame.XController;
import com.sun.star.frame.XModel;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.sheet.XCellAddressable;
import com.sun.star.sheet.XCellRangesQuery;
import com.sun.star.sheet.XSheetCellRanges;
import com.sun.star.sheet.XSpreadsheet;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.sheet.XSpreadsheetView;
import com.sun.star.sheet.XSpreadsheets;
import com.sun.star.table.XCell;
import com.sun.star.uno.UnoRuntime;
public class FirstLoadComponent {
/** Creates a new instance of FirstLoadComponent */
public FirstLoadComponent() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
// get the remote office component context
XComponentContext xRemoteContext = Bootstrap.bootstrap();
if (xRemoteContext == null) {
System.err.println("ERROR: Could not bootstrap default Office.");
}
XMultiComponentFactory xRemoteServiceManager = xRemoteContext.getServiceManager();
Object desktop = xRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", xRemoteContext);
XComponentLoader xComponentLoader = (XComponentLoader)
UnoRuntime.queryInterface(XComponentLoader.class, desktop);
PropertyValue[] loadProps = new PropertyValue[0];
XComponent xSpreadsheetComponent = xComponentLoader.loadComponentFromURL("private:factory/scalc", "_blank", 0, loadProps);
XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument)
UnoRuntime.queryInterface(XSpreadsheetDocument.class,
xSpreadsheetComponent);
XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets();
xSpreadsheets.insertNewByName("MySheet", (short)0);
com.sun.star.uno.Type elemType = xSpreadsheets.getElementType();
System.out.println(elemType.getTypeName());
Object sheet = xSpreadsheets.getByName("MySheet");
XSpreadsheet xSpreadsheet = (XSpreadsheet)UnoRuntime.queryInterface(
XSpreadsheet.class, sheet);
XCell xCell = xSpreadsheet.getCellByPosition(0, 0);
xCell.setValue(21);
xCell = xSpreadsheet.getCellByPosition(0, 1);
xCell.setValue(21);
xCell = xSpreadsheet.getCellByPosition(0, 2);
xCell.setFormula("=sum(A1:A2)");
XPropertySet xCellProps = (XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, xCell);
xCellProps.setPropertyValue("CellStyle", "Result");
XModel xSpreadsheetModel = (XModel)UnoRuntime.queryInterface(
XModel.class, xSpreadsheetComponent);
XController xSpreadsheetController = xSpreadsheetModel.getCurrentController();
XSpreadsheetView xSpreadsheetView = (XSpreadsheetView)
UnoRuntime.queryInterface(XSpreadsheetView.class,
xSpreadsheetController);
xSpreadsheetView.setActiveSheet(xSpreadsheet);
// *********************************************************
// example for use of enum types
xCellProps.setPropertyValue("VertJustify",
com.sun.star.table.CellVertJustify.TOP);
// *********************************************************
// example for a sequence of PropertyValue structs
// create an array with one PropertyValue struct, it contains
// references only
loadProps = new PropertyValue[1];
// instantiate PropertyValue struct and set its member fields
PropertyValue asTemplate = new PropertyValue();
asTemplate.Name = "AsTemplate";
asTemplate.Value = new Boolean(true);
// assign PropertyValue struct to array of references for PropertyValue
// structs
loadProps[0] = asTemplate;
// load calc file as template
//xSpreadsheetComponent = xComponentLoader.loadComponentFromURL(
// "file:///c:/temp/DataAnalysys.ods", "_blank", 0, loadProps);
// *********************************************************
// example for use of XEnumerationAccess
XCellRangesQuery xCellQuery = (XCellRangesQuery)
UnoRuntime.queryInterface(XCellRangesQuery.class, sheet);
XSheetCellRanges xFormulaCells = xCellQuery.queryContentCells(
(short)com.sun.star.sheet.CellFlags.FORMULA);
XEnumerationAccess xFormulas = xFormulaCells.getCells();
XEnumeration xFormulaEnum = xFormulas.createEnumeration();
while (xFormulaEnum.hasMoreElements()) {
Object formulaCell = xFormulaEnum.nextElement();
xCell = (XCell)UnoRuntime.queryInterface(XCell.class, formulaCell);
XCellAddressable xCellAddress = (XCellAddressable)
UnoRuntime.queryInterface(XCellAddressable.class, xCell);
System.out.println("Formula cell in column " +
xCellAddress.getCellAddress().Column
+ ", row " + xCellAddress.getCellAddress().Row
+ " contains " + xCell.getFormula());
}
}
catch (java.lang.Exception e){
e.printStackTrace();
}
finally {
System.exit( 0 );
}
}
}
Alternatively, you can add FirstLoadComponent.java from the samples directory to your current project, it contains the changes shown above.
Content on this page is licensed under the Public Documentation License (PDL). |