首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TableModel向JopenDocument添加行

如何使用TableModel向JopenDocument添加行
EN

Stack Overflow用户
提问于 2021-03-29 11:59:44
回答 2查看 227关注 0票数 1

我正在开发一个java应用程序,该应用程序读取文件template.ods,并使用JopenDocument填充对象数组。

基于IndexOutofBoundsException,我应该从工作表中获取TableModel,然后使用setValueAt(value,rowIndex,columnIndex)来修改它,但是一旦我这样做了,就会触发一个TableModel,下面是我的方法:

Main.class

代码语言:javascript
复制
public File generateODSFileWithTemplate(String fileName, Object[][] rows, File template) throws FileNotFoundException {

final Sheet sheet = SpreadSheet.createFromFile(template).getSheet(0);
sheet.getSpreadSheet().getTableModel("data").setValueAt("Hello from Main", 3, 1);
File outFile = new File(fileName);
sheet.getSpreadSheet().saveAs(outFile);

 return outFile;
}

template.ods

如果我使用以下方法在第一行中添加一个值:

代码语言:javascript
复制
sheet.getSpreadSheet().getTableModel("data").setValueAt("Hello from Main", 0, 0);

它可以工作,并更新列值。

我想知道我做错了什么来得到这个例外?

是否有一种方法直接将数组传递给TableModel,就像DefaultTableModel那样插入数据。

我正在使用OpenOffice创建template.ods

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-30 00:45:35

在处理散页文档时,我始终记得您可以滚动GUI到无穷大。哈哈。你知道我要做什么吗?我的意思是,必须有一种方法来确定文档的大小(行和列),因为我们不能存储一个没有值的无限大的文档。它也没有意义,所以我们必须说明它的大小。为此,先调用ensureColumnCount和/或ensureRowCount,然后在行索引3处设置单元格的值,因为在只包含1行的文件模型中根本没有分配行。或者,至少这就是我能理解我们得到IndexOutOfBoundsException的原因。

下面的代码演示了问题并按预期运行:

代码语言:javascript
复制
import javax.swing.table.DefaultTableModel;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;

public class Main {
    public static void main(final String[] args) {
        final SpreadSheet spread = SpreadSheet.createEmpty(new DefaultTableModel());
        final Sheet sheet = spread.getFirstSheet();
        try {
            sheet.setValueAt("Will fail", 4, 4);
        }
        catch (final RuntimeException x) {
            System.out.println(x.toString() + " thrown. Fixing...");
            sheet.ensureColumnCount(5);
            sheet.ensureRowCount(5);
            sheet.setValueAt("Hello world", 4, 4); //Will not throw.
        }
    }
}

Sheet是一个Table<SpreadSheet>,因此它为您提供了那些(必需的)方法。

票数 1
EN

Stack Overflow用户

发布于 2022-09-09 20:10:41

在最新的库版本1.3中也有一个bug。尝试使用jOpenDocument库的1.2版本。更多详细信息如下:https://www.mail-archive.com/libreoffice-bugs@lists.freedesktop.org/msg755833.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66853811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档