Java OOXML电子表格中的默认单元格类型

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

我收到了奇怪的XLSX文件(OOXML)。以下是其工作表的一些代码片段(xl/worksheets/sheet1.xml):


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
}