/* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ using System; using com.sun.star.beans; using com.sun.star.container; using com.sun.star.frame; using com.sun.star.lang; using com.sun.star.sheet; using com.sun.star.table; using com.sun.star.uno; try { XComponentContext xContext = NativeBootstrap.bootstrap(); if (xContext is null) Console.Error.WriteLine("Could not bootstrap office"); XMultiComponentFactory xServiceManager = xContext.getServiceManager(); IQueryInterface desktop = xServiceManager .createInstanceWithContext("com.sun.star.frame.Desktop", xContext); XComponentLoader xComponentLoader = desktop.query(); PropertyValue[] loadProps = Array.Empty(); XComponent xSpreadsheetComponent = xComponentLoader .loadComponentFromURL("private:factory/scalc", "_blank", 0, loadProps); XSpreadsheetDocument xSpreadsheetDocument = xSpreadsheetComponent .query(); XSpreadsheets xSpreadsheets = xSpreadsheetDocument.getSheets(); xSpreadsheets.insertNewByName("MySheet", 0); Type elemType = xSpreadsheets.getElementType(); Console.WriteLine(elemType.FullName); Any sheet = xSpreadsheets.getByName("MySheet"); XSpreadsheet xSpreadsheet = sheet.castOrDefault(); 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 = xCell.query(); xCellProps.setPropertyValue("CellStyle", new Any("Result")); XModel xSpreadsheetModel = xSpreadsheetComponent.query(); XController xSpreadsheetController = xSpreadsheetModel.getCurrentController(); XSpreadsheetView xSpreadsheetView = xSpreadsheetController.query(); xSpreadsheetView.setActiveSheet(xSpreadsheet); // Example usage of enum values xCellProps.setPropertyValue("VertJustify", new Any(CellVertJustify.TOP)); // Example usage of PropertyValue structs loadProps = new PropertyValue[1] { new PropertyValue() { Name = "AsTemplate", Value = new Any(true), } }; // Uncomment to load a Calc file as template //xSpreadsheetComponent = xComponentLoader.loadComponentFromURL( // "file:///c:/temp/DataAnalysys.ods", "_blank", 0, loadProps); // Example usage of XEnumerationAccess XCellRangesQuery xCellQuery = sheet.castOrDefault(); XSheetCellRanges xFormulaCells = xCellQuery.queryContentCells(CellFlags.FORMULA); XEnumerationAccess xFormulas = xFormulaCells.getCells(); XEnumeration xFormulaEnum = xFormulas.createEnumeration(); while (xFormulaEnum.hasMoreElements()) { Any formulaCell = xFormulaEnum.nextElement(); xCell = formulaCell.castOrDefault(); XCellAddressable xCellAddress = xCell.query(); Console.WriteLine($"Formula cell in column {xCellAddress.getCellAddress().Column}, row {xCellAddress.getCellAddress().Row} contains {xCell.getFormula()}"); } return 0; } catch (UnoException e) { Console.Error.WriteLine(e.Message); return 1; }