zoukankan      html  css  js  c++  java
  • Excel2007格式分析和XML解析

    1.    excel2007是使用xml格式来存储的,把一个excel文件后缀改为.zip,打开之后就直接可以看到一个excel文件对应的xml格式的文件了。

    这里面有几部分



     



     

    对于docProps目录下  这里core是文件的创建时间和修改时间,标题,主题和作者app是文档的其他属性,文档类型,版本,是否只读,是否共享,安全属性等文档属性信息。


     2.xl目录下是文档的具体内容信息

    先看workbook.xml

    workbook.xml文件包含一对<sheets>标签,其中的每个<sheet>元素都代表Excel 2007文件中的一个,工作表的名称就是其name属性的值,这里有三个sheet。

    xl/_rels/workbook.xml.rels定义每个sheetid对应的sheet内容文件sheet1.xml,共享的单元格内容文件sharedstring.xml,样式文件style.xml是当前单元格的样式字体,颜色等样式的xml配置。

    Theme存放的是当前的设置导航栏的默认样式。这两个看看大概也就能明白。

    关键我们看看下面每个sheet的内容格式,

     

    打开一个sheet1.xml看看

    
    
     我们找到对应的第一行第一列的值索引为2对应到sharedStrings.xml里面的index的值,这里si从0开始,第三个即为index为2的值,刚好跟我们的excel的A1值符合

    而A1的s=9对应的样式style.xml我们也看看,找到cellXfs里面的第9个,不过这里又引用fontid字体样式,borderid样式,numfmtId格式等

    
    

    最重要的是对于单元格的空值是没有v标签的,那么使用xml解析的时候就需要特别处理下,下面这个是官方示例程序,我做了修改,黄色部分是添加解析空单元格情况下座位默认空值添加到rowlist上,这样rowlist就完整了,不会因为一行空单元格就不往rowlist添加,造成无法判断是哪列为空,也无法验证某些列非必填下的判断。(使用的是POI)

    那么xml怎么解析如下这个空单元格呢

    <c r="C1" s="10" />

    下面private boolean cellNull; 这个就是添加来判断是否为空单元格的

     
  • 相关阅读:
    远程发送和接收数据流生成图片
    iTextSharp 设置 PDF 所有页面背景图功能
    iTextSharp 生成 PDF 问题集合
    C# 中 IL/MSIL , CTS , CLS , CLR , JIT 分别是什么 ?
    django创建项目2 jojo
    selenium键盘操作 jojo
    python格式化 jojo
    安装了Django后,执行djangoadmin.py无法创建工程的解决办法 jojo
    django创建项目1 jojo
    python自带模块模拟鼠标和键盘操作 jojo
  • 原文地址:https://www.cnblogs.com/tinytiny/p/3356900.html
Copyright © 2011-2022 走看看