博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读取excel并将其转换为xml
阅读量:5934 次
发布时间:2019-06-19

本文共 4532 字,大约阅读时间需要 15 分钟。

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

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/02/23/2364898.html,如需转载请自行联系原作者

你可能感兴趣的文章
各省光伏十三五规划汇总:总规模将超130GW
查看>>
《大数据时代》作者:当下数据隐私保护方式是完全错误的
查看>>
光伏亟待资本注入 业界呼吁第三方“风险评级”
查看>>
2016年网络安全的五大发展趋势
查看>>
郑州成立中原大数据产业联盟
查看>>
MySQL命令行导出数据库
查看>>
“想哭”之余的追问 IEEE数名专家多角度剖析勒索病毒事件
查看>>
Mozilla计划让Firefox浏览器支持WebKit前缀网站
查看>>
VR 的负面效应有那些?其实专家们也不太清楚
查看>>
《实施Cisco统一通信管理器(CIPT2)》一1.9 参考
查看>>
广告软件购买 Chrome 扩展植入广告
查看>>
《嵌入式设备驱动开发精解》——2.4 建立一个具体的嵌入式开发的小项目
查看>>
《MATLAB 7.0从入门到精通(修订版)》——第1章 MATLAB概述 1.1 MATLAB 7.0简介
查看>>
《为自己工作——世界顶级设计师成功法则》—第1章1.6节专业
查看>>
Tor 项目正尝试用 Rust 重构系统
查看>>
中国开发者真的需要 Siri 吗?
查看>>
Chrome OS 将支持指纹识别,全民普及的节奏?
查看>>
如何判断服务器被DDOS了?
查看>>
《Python参考手册(第4版•修订版)》——1.10 迭代与循环
查看>>
《Android 源码设计模式解析与实战》——第1章,第1.4节让项目拥有变化的能力——依赖倒置原则...
查看>>