Java JopendDocument以编程方式创建电子表格并显示它

Java JopendDocument以编程方式创建电子表格并显示它,java,ods,Java,Ods,我正在尝试使用JOpenDocument创建/保存/预览电子表格。我读过很多例子,但没有一个能即时创建电子表格。所有关闭的示例开始加载一个现有ODS。 最后,创建过程可以工作,但我无法打开用ODSViewPanel保存的文件。 该文件可以用LibreOffice很好地打开,但在我的代码中抛出了一个异常。 代码如下: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException;

我正在尝试使用JOpenDocument创建/保存/预览电子表格。我读过很多例子,但没有一个能即时创建电子表格。所有关闭的示例开始加载一个现有ODS。 最后,创建过程可以工作,但我无法打开用ODSViewPanel保存的文件。 该文件可以用LibreOffice很好地打开,但在我的代码中抛出了一个异常。 代码如下:

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();
        }
    }

}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.util.Iterator;
导入java.util.logging.Logger;
导入javax.swing.JFrame;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.jopendocument.dom.spreadsheet.Sheet;
导入org.jopendocument.dom.spreadsheet.spreadsheet;
导入org.jopendocument.model.OpenDocument;
导入org.jopendocument.model.office.OfficeMasterStyles;
导入org.jopendocument.panel.ODSViewerPanel;
公开课考试{
私有最终静态记录器=Logger.getLogger(Test.class.getName());
公共静态void main(字符串[]args){
新测试();
}
公开考试(){
试一试{
//预演
最终电子表格ooSSheet=电子表格.create(1,1,1);
最终工作表oosheet=oosheet.getSheet(0);
oosheet.setRowCount(5);
oosheet.setColumnCount(5);
对于(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
oosheet.setValueAt(“DEMO”,i,j);
}
}
//普雷维萨拉平原区。
字符串tmpDir=System.getProperty(“java.io.tmpDir”);
字符串tmpOOSht=tmpDir+“/tmpoo.ods”;
文件tmpooFile=新文件(tmpOOSht);
如果(tmpooFile.exists())
tmpooFile.delete();
ooSSheet.saveAs(tmpooFile);
//德洛斯达托斯酒店
最终JFrame大型机=新JFrame(“查看器”);
最终OpenDocument ooDoc=新OpenDocument();
ooDoc.loadFrom(tmpOOSht);
ODSViewerPanel viewerPanel=新的ODSViewerPanel(ooDoc);
mainFrame.setContentPane(viewerPanel);
mainFrame.pack();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
主机设置位置(10,10);
mainFrame.setVisible(true);
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
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)
SaxContentUnmarshaller.log()太阳2015年3月15日20:38:09艺术展
content.xml:忽略:office:文档内容当前:null
SaxContentUnmarshaller.log()太阳2015年3月15日20:38:09艺术
转储属性:
SaxContentUnmarshaller.log()太阳2015年3月15日20:38:09艺术
“表:样式名称”->“ta0”
SaxContentUnmarshaller.log()太阳2015年3月15日20:38:09艺术
style.xml:忽略:office:文档样式当前:null
线程“main”java.lang.IllegalArgumentException中的异常:null不是有效的StyleMasterPage名称
位于org.jopendocument.model.office.OfficeMasterStyles.getMasterPageFromStyleName(未知源)
位于org.jopendocument.model.table.TableTable.getPageLayoutProperties(未知源)
位于org.jopendocument.model.OpenDocument.computePages(未知源)
位于org.jopendocument.model.OpenDocument.getPrintedPage(未知源)
位于org.jopendocument.renderer.ODTRenderer。(未知来源)
位于org.jopendocument.panel.ODSViewerPanel。(未知来源)
位于org.jopendocument.panel.ODSViewerPanel。(未知来源)
位于org.jopendocument.panel.ODSViewerPanel。(未知来源)
在ar.gov.santafe.mpa.crosscall.Test上(Test.java:68)
位于ar.gov.santafe.mpa.crosscall.Test.main(Test.java:33)

我无法创建有效的StyleMasterPage并将其设置为文档。如何创建一个有效的ODS文件以在一个ODSViewerPanel中显示它?

我使用这种非常直接的方法:

    SpreadSheet spreadSheet = SpreadSheet.create(1,20,50);

    Sheet sheet = spreadSheet.getSheet(0);

    int lineIndex = 1;
    for (String value : valueset) {
        sheet.setValueAt(value,1, lineIndex);

        lineIndex++;
    }

    spreadSheet.saveAs(new File("/home/me/example.ods"));