Java OOXML电子表格中的默认单元格类型
我收到了奇怪的XLSX文件(OOXML)。以下是其工作表的一些代码片段(xl/worksheets/sheet1.xml):Java OOXML电子表格中的默认单元格类型,java,excel,apache-poi,openxml,libreoffice-calc,Java,Excel,Apache Poi,Openxml,Libreoffice Calc,我收到了奇怪的XLSX文件(OOXML)。以下是其工作表的一些代码片段(xl/worksheets/sheet1.xml): 33 444 1. 注意第二个单元格-它没有“t”属性。 根据(附录A.2,第3918页,第2301行),单元格的默认类型(如果未提及)为“n”(编号): 如果我试着打电话进来,我会得到数值的。没关系 但当我用LibreOffice打开文件时,我看到单元格的类型为“Text”: 有什么解释吗 另外,该文件由我处理该问题的MS Excel生成(感谢@AxelRich
33
444
1.
注意第二个单元格-它没有“t”属性。
根据(附录A.2,第3918页,第2301行),单元格的默认类型(如果未提及)为“n”(编号):
如果我试着打电话进来,我会得到数值的
。没关系
但当我用LibreOffice打开文件时,我看到单元格的类型为“Text”:
有什么解释吗
另外,该文件由我处理该问题的MS Excel生成(感谢@AxelRichter comment)
最主要的是字符串可以存储在数值
类型单元格。为此,使用特殊的@
格式
下面是代码(ApachePOI):
单元格类型和格式在Excel中是不同的@Gagravarr你是说getCellType()!=类别(在图片上)?单元格类型是关于文件格式的存储,加上一堆关于什么可以/不能做的东西。单元格数据格式是关于文件中的原始数字如何根据显示的
XML
:在
中,属性s
(样式索引)指向样式部分中的单元格样式,其中数字格式设置为@
(文本)。这意味着单元格使用数字格式文本进行格式化。这与属性t
(单元格数据类型)无关。@AxelRichter谢谢你的回答,我发现字符串可以以数字格式存储
<row r="2" spans="1:6" x14ac:dyDescent="0.25">
<c r="A2" s="11" t="s">
<v>33</v>
</c>
<c r="B2" s="10">
<v>444</v>
</c>
<c r="C2" s="5"/>
<c r="D2" s="12">
<v>1</v>
</c>
<c r="E2" s="5"/>
<c r="F2" s="3"/>
</row>
<xsd:attribute name="t" type="ST_CellType" use="optional" default="n"/>
String fs = c.getCellStyle().getDataFormatString();
if (BuiltinFormats.getBuiltinFormat(fs)==49){
String value = ((XSSFCell)c).getRawValue();
//do something
}