ich bin leider noch nicht über den DeveloperGuide (Java) hinaus. Mit loadComponentFromURL() will ich ein Calc Dokument als Vorlage laden. Leider bekomme ich eine NullPointerException wenn es getSheets() versucht.
Code: Alles auswählen
PropertyValue[] loadProps = new PropertyValue[0];
// get Calc Component
try {
xSpreadsheetComponent = xComponentLoader
.loadComponentFromURL("file://C:/BerichtTemplate.ods", "_blank", 0,
loadProps);
} catch (IOException e) {
logger.error(e.getMessage());
} catch (IllegalArgumentException e) {
logger.error(e.getMessage());
}
// get Calc Document
xSpreadsheetDocument = (XSpreadsheetDocument) UnoRuntime
.queryInterface(XSpreadsheetDocument.class,
xSpreadsheetComponent);
// get calc tables
xSpreadsheets = xSpreadsheetDocument.getSheets();
...oder irgendeine Art Tip.
Moderation,4: Betreff um Programmiersprache ergänzt
funktionieren tut es so. Aber es wird ein leeres Dokument geladen (mal die ganze Klasse):
Code: Alles auswählen
import org.apache.log4j.Logger;
import com.sun.star.beans.PropertyValue;
import com.sun.star.container.NoSuchElementException;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.io.IOException;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.lang.IndexOutOfBoundsException;
import com.sun.star.lang.WrappedTargetException;
import com.sun.star.lang.XComponent;
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;
/**
* startet das Office Dokument
*/
public class BerichtMonat {
private static Logger logger = Logger.getRootLogger();
private XComponentLoader xComponentLoader;
private XComponent xSpreadsheetComponent;
private XSpreadsheetDocument xSpreadsheetDocument;
private XSpreadsheets xSpreadsheets;
private Object sheet;
private XSpreadsheet xSpreadsheet;
public BerichtMonat(XComponentLoader xComponentLoader) {
// der Loader wird in der Action erstellt
this.xComponentLoader = xComponentLoader;
ini();
}
private void ini() {
PropertyValue[] loadProps = new PropertyValue[0];
try {
xSpreadsheetComponent = xComponentLoader
.loadComponentFromURL("private:factory/scalc", "_blank", 0,
loadProps);
} catch (IOException e) {
logger.error(e.getMessage());
} catch (IllegalArgumentException e) {
logger.error(e.getMessage());
}
xSpreadsheetDocument = (XSpreadsheetDocument) UnoRuntime
.queryInterface(XSpreadsheetDocument.class,
xSpreadsheetComponent);
xSpreadsheets = xSpreadsheetDocument.getSheets();
xSpreadsheets.insertNewByName("Bericht Monat", (short) 0);
try {
sheet = xSpreadsheets.getByName("Bericht Monat");
} catch (NoSuchElementException e) {
logger.error(e.getMessage());
} catch (WrappedTargetException e) {
logger.error(e.getMessage());
}
}
public void startDokument() {
// object -> XSpreedsheet
xSpreadsheet = (XSpreadsheet) UnoRuntime.queryInterface(XSpreadsheet.class, sheet);
fillDocument();
}
private void fillDocument() {
XCell xCell = null;
try {
xCell = xSpreadsheet.getCellByPosition(0, 0);
xCell.setValue(5); // set value to Cell
xCell = xSpreadsheet.getCellByPosition(0, 1);
xCell.setValue(21); // set value to Cell
xCell = xSpreadsheet.getCellByPosition(0, 2);
xCell.setFormula("=sum(A1:A2)"); // set Formula to Cell
} catch (IndexOutOfBoundsException e) {
logger.error(e.getMessage());
}
}
}