OOXML,XLSX分析

Posted tootwo2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OOXML,XLSX分析相关的知识,希望对你有一定的参考价值。

07以上的xlsx是使用了OOXML和zip,将后缀修改为.zip,就可以看到文件,主要分析xl目录下的文件,如图:

 

主要数据文件在xl目录下面

styles.xml里面存放着excel的样式数据

很容易看出包含,字体,边框,单元格样式信息。

sharedStrings.xml存储的excel中的字符串,excel中的字符串都是放在这个里面,共享字符串,所以往往excel的文件会比txt小。

worksheets里面是excel的sheet文件

打开xml

 

其中r="C2"表示excel的C2这个单元格,t="s"表示该单元格是字符串,val是2表示在sharedStrings.xml里面第二个共享的字符串。

其中r="N2"表示excel的N2这个单元格,s="2"表示该单元格有样式,在styles.xml里面的cellXfs里面的第3个样式(0是第一个)。

仔细分析cellXfs会发现<xf borderId="0" fillId="0" fontId="0" numFmtId="0" xfId="0"/>里面有numFmtId,表示数字的格式,每个数字代表不同的样式,看POI的源码org.apache.poi.ss.usermodel.BuiltinFormats里面能找到每个数字代表的含义:

0, "General"

1, "0"

2, "0.00"

3, "#,##0"

4, "#,##0.00"

5, "$#,##0_);($#,##0)"

6, "$#,##0_);[Red]($#,##0)"

7, "$#,##0.00);($#,##0.00)"

8, "$#,##0.00_);[Red]($#,##0.00)"

9, "0%"

0xa, "0.00%"

0xb, "0.00E+00"

0xc, "# ?/?"

0xd, "# ??/??"

0xe, "m/d/yy"

0xf, "d-mmm-yy"

0x10, "d-mmm"

0x11, "mmm-yy"

0x12, "h:mm AM/PM"

0x13, "h:mm:ss AM/PM"

0x14, "h:mm"

0x15, "h:mm:ss"

0x16, "m/d/yy h:mm"

// 0x17 - 0x24 reserved for international and undocumented

0x25, "#,##0_);(#,##0)"

0x26, "#,##0_);[Red](#,##0)"

0x27, "#,##0.00_);(#,##0.00)"

0x28, "#,##0.00_);[Red](#,##0.00)"

0x29, "_(* #,##0_);_(* (#,##0);_(* \\"-\\"_);_(@_)"

0x2a, "_($* #,##0_);_($* (#,##0);_($* \\"-\\"_);_(@_)"

0x2b, "_(* #,##0.00_);_(* (#,##0.00);_(* \\"-\\"??_);_(@_)"

0x2c, "_($* #,##0.00_);_($* (#,##0.00);_($* \\"-\\"??_);_(@_)"

0x2d, "mm:ss"

0x2e, "[h]:mm:ss"

0x2f, "mm:ss.0"

0x30, "##0.0E+0"

0x31, "@"

以上是关于OOXML,XLSX分析的主要内容,如果未能解决你的问题,请参考以下文章

java 关于xlsx(xls) 和 csv 文件的数据解析

HTMLDocument.Iterator 类型不是一般错误

Java操作Excel之POI简单例子

Java读写Excel之POI超入门(转)

Apache-POI 简单应用

数据分析&数据挖掘pandas数据合并