Я пытаюсь создать/сохранить/просмотреть таблицу с помощью JOpenDocument. Я прочитал много примеров, но никто не создал таблицу на лету. Все остальные примеры загружают один существующий ODS. Наконец, процесс создания процесса, но я не смог открыть файл, сохраненный с помощью ODSViewPanel. Файл открыт хорошо с LibreOffice, но генерирует исключение в моем коде. Вот код:jopendocument создать таблицу программно и показать ее
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.logging.Logger;
import javax.swing.JFrame;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
import org.jopendocument.model.OpenDocument;
import org.jopendocument.model.office.OfficeMasterStyles;
import org.jopendocument.panel.ODSViewerPanel;
public class Test {
private final static Logger LOGGER = Logger.getLogger(Test.class .getName());
public static void main(String[] args) {
new Test();
}
public Test() {
try {
// preparar el preview
final SpreadSheet ooSSheet = SpreadSheet.create(1, 1, 1);
final Sheet oosheet = ooSSheet.getSheet(0);
oosheet.setRowCount(5);
oosheet.setColumnCount(5);
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
oosheet.setValueAt("DEMO", i, j);
}
}
// grabar la planilla para poder previsualizarla.
String tmpDir = System.getProperty("java.io.tmpdir");
String tmpOOSht = tmpDir+"/tmpoo.ods";
File tmpooFile = new File(tmpOOSht);
if (tmpooFile.exists())
tmpooFile.delete();
ooSSheet.saveAs(tmpooFile);
// Preview de los datos
final JFrame mainFrame = new JFrame("Viewer");
final OpenDocument ooDoc = new OpenDocument();
ooDoc.loadFrom(tmpOOSht);
ODSViewerPanel viewerPanel = new ODSViewerPanel(ooDoc);
mainFrame.setContentPane(viewerPanel);
mainFrame.pack();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLocation(10, 10);
mainFrame.setVisible(true);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Если вы запустите его, вы увидите это исключение:
SaxContentUnmarshaller.log() Sun Mar 15 20:38:09 ART 2015
content.xml : ignoring :office:document-content current:null
SaxContentUnmarshaller.log() Sun Mar 15 20:38:09 ART 2015
Dump attributes:
SaxContentUnmarshaller.log() Sun Mar 15 20:38:09 ART 2015
'table:style-name' -> 'ta0'
SaxContentUnmarshaller.log() Sun Mar 15 20:38:09 ART 2015
style.xml : ignoring :office:document-styles current:null
Exception in thread "main" java.lang.IllegalArgumentException: null is not a valid StyleMasterPage name
at org.jopendocument.model.office.OfficeMasterStyles.getMasterPageFromStyleName(Unknown Source)
at org.jopendocument.model.table.TableTable.getPageLayoutProperties(Unknown Source)
at org.jopendocument.model.OpenDocument.computePages(Unknown Source)
at org.jopendocument.model.OpenDocument.getPrintedPage(Unknown Source)
at org.jopendocument.renderer.ODTRenderer.<init>(Unknown Source)
at org.jopendocument.panel.ODSViewerPanel.<init>(Unknown Source)
at org.jopendocument.panel.ODSViewerPanel.<init>(Unknown Source)
at org.jopendocument.panel.ODSViewerPanel.<init>(Unknown Source)
at ar.gov.santafe.mpa.crosscall.Test.<init>(Test.java:68)
at ar.gov.santafe.mpa.crosscall.Test.main(Test.java:33)
Я не мог создать действительный StyleMasterPage и установить его на docuement. Как создать действительный файл ODS, чтобы показать его в одной ODSViewerPanel?