小编Ron*_*Ron的帖子

使用Apache POI在Microsoft Excel XSSF中存储电话号码

我有一个以字符串形式存储在Excel中的电话号码,Excel文件已成功创建,并且数据没有错误,但是每个电话号码旁边都有一个“数字存储为文本”错误。

我已经在线阅读了我应该使用excel随附的特殊电话号码格式或自定义的000-000-0000格式的信息。我可以使用excel程序进行设置,但不能通过Java代码进行设置。


我到处寻找有关setCellType和DataFormat的信息,但是我假设CellType必须为String,除了日期以外,我看不到如何使用DataFormat。

我也看过DataFormatter,但不了解如何使用它存储数据。看来这只是为了帮助读取数据。http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html


我该怎么做以下之一?

1)将单元格标记为“忽略错误”,以忽略“存储为文本的数字”错误
2)利用内置的Excel单元格格式“特殊>电话号码”

对于1),似乎存在一个通过保存和关闭文件而保留的标志,我不知道如何使用POI编辑或查看它。有一篇关于它的文章:

Excel文档的第669页和第670页涵盖FeatFormulaErr2,该文件夹保存在FeatRecord共享功能中,从理论上讲,该功能使您可以存储以下事实:对于单元格区域,应忽略“数字作为文本”

我们还获得了两个测试文件,一个带有警告,一个带有警告-46136-NoWarnings.xls和46136-WithWarnings.xls。但是我没有创建它们!

尼克 http://mail-archives.apache.org/mod_mbox/poi-user/201003.mbox/%3C27823222.post@talk.nabble.com%3E

看来这可以在VBA中完成,cell.Errors.Item(xlNumberAsText).Ignore = True但似乎没有POI等效项

java excel vba openxml excel-vba apache-poi

5
推荐指数
1
解决办法
3579
查看次数

用户对列进行排序后访问隐藏的 JTable 模型列

我有一个JTable被调用的transactionList,每一行代表一个Transaction,其中第一列保存实际Transaction对象,随后的每个列显示有关 的一些数据Transaction

我不希望该Transaction对象向用户显示,因此我将其从以下位置中删除ColumnModel

TableColumnModel cm = transactionList.getColumnModel();
cm.removeColumn(cm.getColumn(0));
transactionList.setColumnModel(cm);
Run Code Online (Sandbox Code Playgroud)

这非常有效,然后我可以Transaction使用以下方法检索所选内容:

(Transaction) transactionList.getModel().getValueAt(transactionList.getSelectedRow(), 0))
Run Code Online (Sandbox Code Playgroud)

当用户对表中的列进行排序时,问题就出现了,然后所选的行无法正确匹配。我通过更改上面的行来解决这个问题,以便我们直接从表中而不是从模型中获取所选行:

(Transaction) transactionList.getValueAt(transactionList.getSelectedRow(), 0));
Run Code Online (Sandbox Code Playgroud)

但现在 0 列不是我的隐藏Transaction对象,而只是它的第一个字段。


我也会尝试用另一种方式来解释。

在不允许对 JTable 列进行排序的情况下,这两个示例都有效:

1) 在第一列中显示 Transaction 对象(不要从 ColumnModel 中删除)

可以通过以下方式检索 Transaction 对象:

transactionList.getValueAt(transactionList.getSelectedRow(), 0));
Run Code Online (Sandbox Code Playgroud)

2) 在第一列中显示 Transaction 对象(从 ColumnModel 中删除)

可以通过以下方式检索 Transaction 对象:

transactionList.getModel().getValueAt(transactionList.getSelectedRow(), 0))
Run Code Online (Sandbox Code Playgroud)

如果我现在允许对列进行排序,#1 仍然有效。然而,方法 #2 现在将 JTable.getSelectedRow() 传递给 TableModel.getValueAt()。但这些索引不再相等,问题是 JTable 和 ColumnModel 不包含 Transaction 对象(只有 TableModel 包含)。

transactionList.getColumnCount(); …
Run Code Online (Sandbox Code Playgroud)

java swing model jtable tablemodel

2
推荐指数
1
解决办法
2652
查看次数

标签 统计

java ×2

apache-poi ×1

excel ×1

excel-vba ×1

jtable ×1

model ×1

openxml ×1

swing ×1

tablemodel ×1

vba ×1