加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

我的第一个 java 操作Openoffice 写spreadsheet文件

(2011-03-15 17:09:19)
标签:

杂谈

分类: 开发经验总结
我的第一个 java 操作Openoffice 写spreadsheet文件
for more detail access
 http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Spreadsheet/Handling_Spreadsheet_Documents_Files


import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
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;
import com.sun.star.uno.XComponentContext;

public class ConnOpenOffice {
    public static void main(String[] args) {
        try {

            String oooExecFolder = "C:/Program Files/OpenOffice.org 3/program/";
            XComponentContext xRemoteContext = com.sun.star.comp.helper.Bootstrap
                    .bootstrap();

            System.out.println("Connected to a running 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);
         }
    }
}

openoffice 只是显示21 21 42

0

阅读 收藏 喜欢 打印举报/Report
前一篇:2011年03月08日
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有