0

How to create a xls file using open office sdk? Please give Java example source code. Also needed to create word and power point files. I’m not able to get any examples

Below is the code I tried. It tries to open in Open office App, that I don't want. I want to generate the .ods file in the WebSphere App Server under AIX environment, using Java. I'm using it to generate a report and download it to front end (web app).

import ooo.connector.BootstrapSocketConnector;

import com.sun.star.beans.PropertyValue;
import com.sun.star.comp.helper.BootstrapException;
import com.sun.star.container.XIndexAccess;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.sheet.XSpreadsheet;
import com.sun.star.sheet.XSpreadsheetDocument;
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 Test {

/**
 * @param args
 */
public static void main(String[] args) {

    XComponentContext xContext = null;

    // get the remote office component context
    try {
        String folder = "C:\\Program Files (x86)\\OpenOffice 4\\program";
        xContext = BootstrapSocketConnector.bootstrap(folder);
    } catch (BootstrapException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    XSpreadsheetDocument myDoc = null;

    System.out.println("Opening an empty Calc document");
    myDoc = openCalc(xContext);

    XSpreadsheet xSheet = null;

    try {
        System.out.println("Getting spreadsheet");
        XSpreadsheets xSheets = myDoc.getSheets();
        XIndexAccess oIndexSheets = (XIndexAccess) UnoRuntime
                .queryInterface(XIndexAccess.class, xSheets);
        xSheet = (XSpreadsheet) UnoRuntime.queryInterface(
                XSpreadsheet.class, oIndexSheets.getByIndex(0));
    } catch (Exception e) {
        System.out.println("Couldn't get Sheet " + e);
        e.printStackTrace(System.err);
    }

System.out.println("Creating the Header") ;

    insertIntoCell(1,0,"JAN",xSheet,"");
    insertIntoCell(2,0,"FEB",xSheet,"");
    insertIntoCell(3,0,"MAR",xSheet,"");
    insertIntoCell(4,0,"APR",xSheet,"");
    insertIntoCell(5,0,"MAI",xSheet,"");
    insertIntoCell(6,0,"JUN",xSheet,"");
    insertIntoCell(7,0,"JUL",xSheet,"");
    insertIntoCell(8,0,"AUG",xSheet,"");
    insertIntoCell(9,0,"SEP",xSheet,"");
    insertIntoCell(10,0,"OCT",xSheet,"");
    insertIntoCell(11,0,"NOV",xSheet,"");
    insertIntoCell(12,0,"DEC",xSheet,"");
    insertIntoCell(13,0,"SUM",xSheet,"");


    System.out.println("Fill the lines");

    insertIntoCell(0,1,"Smith",xSheet,"");
    insertIntoCell(1,1,"42",xSheet,"V");
    insertIntoCell(2,1,"58.9",xSheet,"V");
    insertIntoCell(3,1,"-66.5",xSheet,"V");
    insertIntoCell(4,1,"43.4",xSheet,"V");
    insertIntoCell(5,1,"44.5",xSheet,"V");
    insertIntoCell(6,1,"45.3",xSheet,"V");
    insertIntoCell(7,1,"-67.3",xSheet,"V");
    insertIntoCell(8,1,"30.5",xSheet,"V");
    insertIntoCell(9,1,"23.2",xSheet,"V");
    insertIntoCell(10,1,"-97.3",xSheet,"V");
    insertIntoCell(11,1,"22.4",xSheet,"V");
    insertIntoCell(12,1,"23.5",xSheet,"V");
    insertIntoCell(13,1,"=SUM(B2:M2)",xSheet,"");


    insertIntoCell(0,2,"Jones",xSheet,"");
    insertIntoCell(1,2,"21",xSheet,"V");
    insertIntoCell(2,2,"40.9",xSheet,"V");
    insertIntoCell(3,2,"-57.5",xSheet,"V");
    insertIntoCell(4,2,"-23.4",xSheet,"V");
    insertIntoCell(5,2,"34.5",xSheet,"V");
    insertIntoCell(6,2,"59.3",xSheet,"V");
    insertIntoCell(7,2,"27.3",xSheet,"V");
    insertIntoCell(8,2,"-38.5",xSheet,"V");
    insertIntoCell(9,2,"43.2",xSheet,"V");
    insertIntoCell(10,2,"57.3",xSheet,"V");
    insertIntoCell(11,2,"25.4",xSheet,"V");
    insertIntoCell(12,2,"28.5",xSheet,"V");
    insertIntoCell(13,2,"=SUM(B3:M3)",xSheet,"");

    insertIntoCell(0,3,"Brown",xSheet,"");
    insertIntoCell(1,3,"31.45",xSheet,"V");
    insertIntoCell(2,3,"-20.9",xSheet,"V");
    insertIntoCell(3,3,"-117.5",xSheet,"V");
    insertIntoCell(4,3,"23.4",xSheet,"V");
    insertIntoCell(5,3,"-114.5",xSheet,"V");
    insertIntoCell(6,3,"115.3",xSheet,"V");
    insertIntoCell(7,3,"-171.3",xSheet,"V");
    insertIntoCell(8,3,"89.5",xSheet,"V");
    insertIntoCell(9,3,"41.2",xSheet,"V");
    insertIntoCell(10,3,"71.3",xSheet,"V");
    insertIntoCell(11,3,"25.4",xSheet,"V");
    insertIntoCell(12,3,"38.5",xSheet,"V");
    insertIntoCell(13,3,"=SUM(A4:L4)",xSheet,"");

}

public static void insertIntoCell(int CellX, int CellY, String theValue,
        XSpreadsheet TT1, String flag) {
    XCell xCell = null;

    try {
        xCell = TT1.getCellByPosition(CellX, CellY);
    } catch (com.sun.star.lang.IndexOutOfBoundsException ex) {
        System.err.println("Could not get Cell");
        ex.printStackTrace(System.err);
    }

    if (flag.equals("V")) {
        xCell.setValue((new Float(theValue)).floatValue());
    } else {
        xCell.setFormula(theValue);
    }

}

public static XSpreadsheetDocument openCalc(XComponentContext xContext) {
    // define variables
    XMultiComponentFactory xMCF = null;
    XComponentLoader xCLoader;
    XSpreadsheetDocument xSpreadSheetDoc = null;
    XComponent xComp = null;

    try {
        // get the servie manager rom the office
        xMCF = xContext.getServiceManager();

        // create a new instance of the the desktop
        Object oDesktop = xMCF.createInstanceWithContext(
                "com.sun.star.frame.Desktop", xContext);

        // query the desktop object for the XComponentLoader
        xCLoader = (XComponentLoader) UnoRuntime.queryInterface(
                XComponentLoader.class, oDesktop);

        PropertyValue[] szEmptyArgs = new PropertyValue[0];
        String strDoc = "private:factory/scalc";

        xComp = xCLoader.loadComponentFromURL(strDoc, "_blank", 0,
                szEmptyArgs);
        xSpreadSheetDoc = (XSpreadsheetDocument) UnoRuntime.queryInterface(
                XSpreadsheetDocument.class, xComp);

    } catch (Exception e) {
        System.err.println(" Exception " + e);
        e.printStackTrace(System.err);
    }

    return xSpreadSheetDoc;
}

}

  • Try the examples in the SDK under `sdk/examples/java`. If that does not do what you need, then provide more details and post the code that you tried. Also, OpenOffice is an inferior tool for creating .xls, .doc and .ppt files. Better create .ods, .odt, and .odp because MS Office 2007 and later can read such formats. – Jim K Apr 23 '18 at 19:08
  • Code put above. Most examples doesn’t even refer to local path to open / save .ods file! Why even simple questions are difficult to find! What are the jar files required and where I can get it? Can I create documents in Unix environment in WebSphere App server without open office app installed? I’m using to generate report! –  Apr 24 '18 at 09:07

0 Answers0