读写 excel 和 xml

Posted MrPeng

tags:

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

一、新建一个excel表格 

 

 二、新建一个java 工程导入 jxl-2.6.12.jar (用来解析excel的api)

三、新建一个相应的实体类 user

package cn.rebuild;

import java.util.ArrayList;
import java.util.List;

public class User {
	//定义实体集合
	public static List<User> list = new ArrayList<User>();
	
	private String name;
	private String age;
	private String address;
	private String phone;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
	@Override
	public String toString() {
		return "[ name = " + name + ", age = " + age + ", address = " + address + ", phone = " + phone + " ]";
	}
}

  

 

四、建一个读excel文件内容的类ReadFromExcel

package cn.rebuild;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class ReadFromExcel {
		public static void readExcelFile(String filePath) {  
			try {
				InputStream is = new FileInputStream(filePath);
				Workbook rwb = Workbook.getWorkbook(is);
				// 获得总的Sheets,得到sheet的层数
				Sheet[] sheets = rwb.getSheets();
				int sheetLen = sheets.length;
				// 获得第一个Sheets 的结果
				jxl.Sheet rs = rwb.getSheet(0);
				int num_row = rs.getRows();
				int num_column = rs.getColumns();
				for (int j = 0; j < num_row; j++) {
					User user = new User();
					// 得到第j行的所有值
					Cell[] cell = rs.getRow(j);
					for (int column_index = 0; column_index < num_column; column_index++) {
						// 得到第j行,第column_indexs列的值
						String value = cell[column_index].getContents();
						System.out.print(value + " ");
						//从第二行开始将值存入到实体里面并添加到list中
						if (j >= 1) {
							String columnValue = rs.getRow(j)[column_index].getContents();
							switch(column_index){
								case 1 : user.setName(columnValue);;break;
								case 2 : user.setAge(columnValue);;break;
								case 3 : user.setAddress(columnValue);;break;
								case 4 : user.setPhone(columnValue);;break;
								default : System.out.print("");break;
								}
						}
					}
					System.out.println("");
					if (j >= 1) {
						User.list.add(user);
					}
				}
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
}

  

 五、将excel文件中的内容写入到xml文件中

package cn.rebuild;

import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import cn.excel.test.Main;
import cn.rebuild.ReadFromExcel;

public class CreateXML {
	
	public static DocumentBuilderFactory dbf = null;
	public static DocumentBuilder db = null;
	public static Document doc = null;
	public static TransformerFactory tff = null;
	public static Transformer tf = null;
	public static Source in = null;
	public static Result out = null;
	public static String xmlpath = null;

	public static void init() throws Exception {
		dbf = DocumentBuilderFactory.newInstance();// 实例化工厂类
		dbf.setValidating(false);// 不进行有效性检查
		dbf.setNamespaceAware(true);
		db = dbf.newDocumentBuilder();// 实例化DocumentBuilder类
		doc = (Document) db.newDocument();// 实例化Document类
		tff = TransformerFactory.newInstance();
		tf = tff.newTransformer();
		in = new DOMSource((Node) doc);
	}

	/**
	 * 生成xml 文件
	 * @param axmlpath
	 */
	public static void ProuduceXml(String axmlpath) {

		try {
			Element users = ((org.w3c.dom.Document) doc).createElement("users");// 生产根元素users
			doc.createElement("users");
			((Node) doc).appendChild(users);// 将根元素添加到根节点后面

			for (int i = 0; i < User.list.size(); i++) {
				Element user = ProuduceElement(User.list.get(i).getName(),
						User.list.get(i).getAge(), User.list.get(i).getAddress(),
						User.list.get(i).getPhone());
				users.appendChild(user);

			}
			xmlpath = axmlpath;
			out = new StreamResult(new FileOutputStream(xmlpath));// 生成输出源
			tf.transform(in, out);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}

	public static Element ProuduceElement(String aname, String _age, String _address, String _phone) throws Exception {

		Element user = ((org.w3c.dom.Document) doc).createElement("student");// 生成student元素(students的子元素)
		Element name = ((org.w3c.dom.Document) doc).createElement("name");// 创建name子元素
		name.appendChild(((org.w3c.dom.Document) doc).createTextNode(aname));// 在name元素后添加文本节点
		user.appendChild(name);// 添加student的子元素name

		// 设置student的属性id的值

		Element age = doc.createElement("age");
		age.appendChild(doc.createTextNode(_age));
		user.appendChild(age);

		Element address = doc.createElement("address");
		address.appendChild(doc.createTextNode(_address));
		user.appendChild(address);

		Element phone = doc.createElement("phone");
		phone.appendChild(doc.createTextNode(_phone));
		user.appendChild(phone);
		return user;
	}
	
	public static void createXMLFile(String xmlpath) {
		try {
			CreateXML.init();
			CreateXML.ProuduceXml(xmlpath);
		} catch (Exception e) {
			System.out.println("main:\\n" + e.getMessage());
		}
	}
}

 六、测试类

package cn.rebuild;

public class Start {
	public static void main(String[] args) {
		//读excel内容
		ReadFromExcel.readExcelFile("d://temp/user.xls");
		//将excel文件内容写到xml并保存到指定路径
		CreateXML.createXMLFile("d://temp/user.xml");
	}
}

 七、结果

 

以上是关于读写 excel 和 xml的主要内容,如果未能解决你的问题,请参考以下文章

POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

unity下跨平台excel读写

Java-jxl插件Excel文件读写报错jxl.read.biff.BiffException: Unable to recognize OLE stream

Java-jxl插件Excel文件读写报错jxl.read.biff.BiffException: Unable to recognize OLE stream

C# 读写xmlexcelwordaccess

python读写Excel