读取excel并将其转换为xml
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,如需转载请自行联系原作者
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Effective C++构造函数析构函数Assignment运算符
在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。 11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符 12:在constructor中尽量initialization动作取代assignment工作 13:initialization list中的members初始化次序应该和其在class内的声明次序相同 14:总上base class拥有virtual destructor 15:令operator =传回*this的reference 16:在operator=中为所有data member赋值 17:在operator =中检查是否自己赋值给自己 11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符。 默认的copy construc...
- 下一篇
NoClassDefFoundError: org/slf4j/LoggerFactory和NoClassDefFoundError: or...
1.如果运行程序出现错误:“Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory”,这是因为项目缺少slf4j-api.jar和slf4j-log4j12.jar这两个jar包导致的错误。 2.如果运行程序出现错误:“java.lang.NoClassDefFoundError: org/apache/log4j/LogManager”,这是因为项目缺少log4j.jar这个jar包 3.错误:“Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.MDC.getCopyOfContextMap()Ljava/util/Map”,这是因为jar包版本冲突造成的。 slf4j-log4j12.jar版本信息: Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: ceki B...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题