1.前言

项目开发过程中需要读取excel文档,并将excel文档中的内容转化为xml文档并保存在本地文件中。

比如要读取如下格式的excel文档:

通过代码实例中如下的代码段可以运行excel中有空行:

if (cell == null) {       item.setText("");       e.addContent(item);       cellNum++;//如果存在空列,那么cellNum增加1,这一步很重要。       continue;}

2.代码示例。

package edu.sjtu.erplab.jdom;

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;

/** * 操作Excel表格的功能类*/public class ExcelReaderXMLWriter2 {

public static void main(String[] args) {try {            InputStream stream = new FileInputStream("d:\\userinfo2.xls");            File f = new File("D:\\temp5.xml");// 新建个file对象把解析之后得到的xml存入改文件中            writerXML(stream, f);// 将数据以xml形式写入文本        } catch (FileNotFoundException e) {            System.out.println("未找到指定路径的文件!");            e.printStackTrace();        } catch (IOException e) {// TODO Auto-generated catch block            e.printStackTrace();        }    }

private static void writerXML(InputStream stream, File f)throws IOException {        FileOutputStream fo = new FileOutputStream(f);// 得到输入流        Document doc = readExcell(stream);// 读取EXCEL函数        Format format = Format.getCompactFormat().setEncoding("gb2312")                .setIndent("");        XMLOutputter XMLOut = new XMLOutputter(format);// 在元素后换行,每一层元素缩排四格        XMLOut.output(doc, fo);        fo.close();    }

private static Document readExcell(InputStream stream) {        Element root = new Element("list");        Document doc = new Document(root);try {            HSSFWorkbook wb = new HSSFWorkbook(stream);int WbLength = wb.getNumberOfSheets();for (int i = 0; i < WbLength; i++) {                HSSFSheet shee = wb.getSheetAt(i);int length = shee.getLastRowNum();                System.out.println("行数:" + length);for (int j = 1; j <= length; j++) {                    HSSFRow row = shee.getRow(j);if (row == null) {continue;                    }int cellNum = row.getPhysicalNumberOfCells();// 获取一行中最后一个单元格的位置                    System.out.println("列数cellNum:" + cellNum);// int cellNum =16;                    Element e = null;                    e = new Element("USER");// Element[] es = new Element[16];                    for (int k = 0; k < cellNum; k++) {                        HSSFCell cell = row.getCell((short) k);                        String temp = get(k);                        System.out.print(k+"    "+temp+":");                        Element item = new Element(temp);if (cell == null) {                            item.setText("");                            e.addContent(item);                            cellNum++;//如果存在空列,那么cellNum增加1,这一步很重要。                            continue;                        }

else {                            String cellvalue = "";switch (cell.getCellType()) {// 如果当前Cell的Type为NUMERIC                            case HSSFCell.CELL_TYPE_NUMERIC:case HSSFCell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Date                                if (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,转化为Data格式

// 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00// cellvalue =                                    cell.getDateCellValue().toLocaleString();

// 方法2:这样子的data格式是不带带时分秒的:2011-10-12                                    Date date = cell.getDateCellValue();                                    SimpleDateFormat sdf = new SimpleDateFormat(                                            "yyyy-MM-dd");                                    cellvalue = sdf.format(date);                                    item.setText(cellvalue);

                                }// 如果是纯数字                                else {// 取得当前Cell的数值                                    cellvalue = String.valueOf((int)cell.getNumericCellValue());                                    item.setText(cellvalue);                                }break;                            }// 如果当前Cell的Type为STRIN                            case HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串                                cellvalue = cell.getRichStringCellValue()                                        .getString();                                item.setText(cellvalue);break;// 默认的Cell值                            default:                                cellvalue = " ";                                item.setText(cellvalue);                            }                            e.addContent(item);                            System.out.println(cellvalue);                        }                    }                    root.addContent(e);

                }

            }        } catch (Exception e) {

        }try {            stream.close();        } catch (IOException e) {

        }return doc;    }

private static String get(int k) {        String test = "";switch (k) {case 0:            test = "USERNAME";break;case 1:            test = "PASSWORD";break;case 2:            test = "SEX";break;case 3:            test = "AGE";break;case 4:            test = "BIRTHDAY";break;default:        }return test;

    }

}

转载于:https://www.cnblogs.com/xwdreamer/archive/2012/02/23/2364898.html

读取excel并将其转换为xml相关推荐

  1. android 读取excel数据并保存为xml文件

    今天,简单讲讲android如何  读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...

  2. excel xml mysql_数据库表转换为xml格式,excel转换为xml格式文件

    c#把sql数据库表转换为xml文件 1.连接sql数据库 public bool Open() { try { if (sqlconn == null) { sqlconn = new SqlCon ...

  3. 读取Excel的文本框,除了解析xml还可以用python调用VBA

    作者:小小明 Python读取Excel的文本框 基本需求 今天看到了一个很奇怪的问题,要读取Excel文件的文本框中的文本,例如这种: 本以为openxlpy可以读取,但查看openxlpy官方文档 ...

  4. 将Excel数据转换为XML

    与您可能想到的相反,并不是每个文档最初都是用XML编写的. 实际上,大多数文档是使用其他工具准备的,后来又转换为XML. 许多文档源自关系数据库(例如DB2)或Microsoft Office应用程序 ...

  5. php把excel变成数组,PHP excel读取excel文件转换为数组

    /* 备注:先去下载PHP EXCEL--http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=phpexcel&a ...

  6. python 读取excel太慢_Python 读取excel并转换为字典

    方法一:利用利用xlrd读取excel文件 其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可. 1.安装 xlrd pip install xlrd 2.读取文 ...

  7. 将excel表格数据转换为xml文本数据

    原文:http://blog.javayc.com/archives/12 这篇blog主要是讲述java中poi读取excel,并将excel中的数据转化为xml文本中的数据,而excel的版本包括 ...

  8. 基于Python读取Excel表格文件数据并转换为字典dict格式

      有时我们需要将一个Excel表格文件中的全部或一部分数据导入到Python并转换为字典格式,如何实现呢?   我们以如下所示的一个表格(.xlsx格式)作为简单的示例.其中,表格共有两列,第一列为 ...

  9. Java使用poi读取excel数据(excel可能很大,先转换为csv再读取)

      ------------配置------------   jdbc.properties中加入: excelUrl=/--xlsx文件目录路径/ (excelUrl + "xxxx.xl ...

最新文章

  1. 服务发现框架选型,Consul还是Zookeeper还是etcd
  2. 【Mysql】纯sql报表
  3. hdu 3962(AC自动机+矩阵优化dp)
  4. 【MySQL】navicat for mysql 10.1.7注册码
  5. Spring安全:防止暴力攻击
  6. 数据科学家需要掌握的10项统计技术,快来测一测吧
  7. jeecg boot一对多新增的附表不会主键是一个string_测试开发专题:spring-boot如何使用JPA进行双向一对多配置...
  8. python柱状图代码_python+matplotlib实现礼盒柱状图实例代码
  9. 英语总结系列(二十九):好好学英语
  10. 对象数组 —— 学生信息表
  11. 火影忍者 动漫 全集目录 分章节 精彩打斗剧集 思维导图整理
  12. 基于树莓派的人脸识别(Linux系统 百度智能云平台)
  13. 面向对象的15位、18位中国大陆身份证号码解析、验证工具
  14. Python科学绘图 南丁格尔图/玫瑰图
  15. mjs无法访问ftp文件解决
  16. 边缘计算与深度学习综述
  17. 将一个实体类复制到另一个实体类
  18. 找出一个二维数组中的鞍点,即该位置上的的元素,在该行上最大,该列上最小,也可能没有鞍点
  19. Mysql的卸载流程
  20. 视频格式转换软件推荐

热门文章

  1. SpringBoot精通系列-使用Mybatis Generator生成Dao层代码
  2. Java并发编程实战_[Java并发编程实战] 简介
  3. JSONObject转换JSON--将Date转换为指定格式
  4. centos8搭建glusterfs服务
  5. 关于spring cloud的几个核心组件
  6. Windows下常用的100个CMD指令以及常见的操作
  7. 软件开发的核心问题是什么
  8. Android 沉浸式状态栏
  9. 重载与覆盖(java)
  10. oracle“记录被另一个用户锁住”