2015-04-30 44 views
0

我使用POI在现有电子表格中创建一行新的单元格。 POI允许您获取列默认样式,但没有相应的(尽可能接近我可以告诉)获取默认样式。我从我的用户界面得到一个字符串,我不知道如何设置单元格类型。如果字符串是双精度型,那么很好,它是NUMERIC。但是如果字符串指定日期,我怎样才能最好地检测它,以便它也被设置为NUMERIC?日期中有许多格式化类型,从单元格样式格式中检测类型是不切实际的。 POI是否支持基于格式进行解析的方式?apache poi获取默认列类型

+0

[DataFormatter](http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html)将采取格的内容格式+规则,并输出表示它的字符串。那是你需要的吗?还是你想要走另一条路? – Gagravarr

+0

不幸的是,我试图走另一条路。我已经将格式化的数据发送到用户界面。现在我试图从界面中取出一个字符串,并将其安装为一个全新的单元格,即一个没有已知类型的单元格。 – careysb

+0

您是否允许用户插入任何旧的随机文本,或者是否有一些您期望的已知格式? – Gagravarr

回答

0

设置单元格类型使用:

setCellType() 

如文档概述:

https://poi.apache.org/apidocs/

setCellType无效setCellType(INT单元格类型)设置单元格中键入(数字,公式或字符串)。如果该单元格当前包含值 ,则该值将转换为与新类型匹配(如果可能)。 然而,在这个过程中格式化通常会丢失。

如果您想要做的是为您的数字单元格获取一个字符串值,则可以使用 stop !.这不是做到这一点的方法。相反,要获取数值或布尔值或日期单元格的字符串值 ,请改为使用DataFormatter。

抛出:IllegalArgumentException - 如果指定的细胞 类型无效IllegalStateException - 如果当前值 不能转换到新的类型请参见:CELL_TYPE_NUMERIC, CELL_TYPE_STRING,CELL_TYPE_FORMULA,CELL_TYPE_BLANK, CELL_TYPE_BOOLEAN,CELL_TYPE_ERROR

+0

我正在创建一个全新的单元格 - 没有可用类型,只有列默认样式可用。如何确定它是否是'日期'单元格? – careysb

+0

例如:用户输入“4/30”,这是小数(数字),日期(数字)还是字符串? Excel设法通过了解列的样式来处理这个问题,但我没有看到我只能看到列的默认样式。 – careysb

+0

不知道excel是否知道列的样式,它似乎只是随机猜测,并不总是正确的,除非您明确将格式应用于单元格 – Gagravarr