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

标签 java excel apache-poi openxml libreoffice-calc

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

    <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>

注意第二个单元格 - 它没有“t”属性。 根据ECMA-376 (附录 A.2,第 3918 页,第 2301 行),单元格的默认类型(如果未提及)是“n”(数字):

<xsd:attribute name="t" type="ST_CellType" use="optional" default="n"/>

如果我尝试调用 getCellType()Apache POI ,我得到NUMERIC。没关系。

但是当我使用 LibreOffice 打开文件时,我看到单元格具有“文本”类型: enter image description here 对此有什么解释吗?

PS。该文件由 MS Excel 生成

最佳答案

我解决了这个问题(感谢@AxelRichter 评论)。

最主要的是字符串可以存储在NUMERIC类型的单元格中。为此,使用特殊的 @ 格式。

这里是代码(Apache POI):

String fs = c.getCellStyle().getDataFormatString();
if (BuiltinFormats.getBuiltinFormat(fs)==49){
    String value = ((XSSFCell)c).getRawValue();
    //do something
}

Link to BuiltinFormats

关于java - OOXML 电子表格中的默认单元格类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58303313/

相关文章:

java - iBatis 是动态 SQL 查询的正确选择吗?

java - Opencv中的嘴巴检测在android中检测多个区域

VBA:查看文件是否打开的两种方法

excel - VBA:如何对值列表使用like运算符?

java - 如何制作同时使用过滤器和 pretty-print 的 ObjectWriter?

java - Neo4j - 使用 Java 读取大量数据

python - 如何使用python在一个excel单元格中写一个列表

java - Apache POI : Is it possible to use SXSSF without temporary files?

java - Apache POI,表定位被忽略(.docx、xwpf)

java - 以不同格式获取 Apache POI 中的日期单元格内容