首页 > 学院 > 开发设计 > 正文

Excel转XML

2019-11-08 01:10:52
字体:
来源:转载
供稿:网友

使用JXL.JAR包,只能转换2007以前的Excel文件,代码如下:

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.jdom.output.xmlOutputter;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;public class ExcelToXML_JXL_2003 {	public static void main(String[] args) throws Exception{		Excel_2003();	}		public static void Excel_2003() throws Exception{		// 这里是生成工作簿		Workbook wb = null;		// 创建根节点;		Element root = new Element("sheet");		// 将根节点添加到文档中;		Document Doc = new Document(root);		InputStream instream = new FileInputStream("d:/AAA.xls");		wb = Workbook.getWorkbook(instream);		// 获取第一张Sheet表		Sheet sheet = wb.getSheet(0);		// 获取Sheet表中所包含的总列数		int columns = sheet.getColumns();		// 获取Sheet表中所包含的总行数		int rows = sheet.getRows();		// 获取指定单元格的对象引用		for (int i = 0; i < rows; i++) {			Element elements = new Element("tr");			for (int j = 0; j < columns; j++) {				Cell cell = sheet.getCell(j, i);				// str[i][j]=cell.getContents();//在此创建一个二维数组,获取单元格的数据				// 生成xml文件				elements.addContent(new Element("cell").setText(cell.getContents())); // 填写单元格的数据。				root.addContent(elements.detach());			}		}		Format format = Format.getPRettyFormat();		XMLOutputter XMLOut = new XMLOutputter(format);		XMLOut.output(Doc, new FileOutputStream("d:/books_xls.xml"));		System.out.println("Excel转换成XML成功!");	}}使用poi.jar,相关的包:

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;public class ExcelToXML_POI_2007 {	/**	 * 读取Excel文档	 * @param filePath	 * @throws Exception	 */	public static void read(String filePath) throws Exception {		String fileType = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length());		InputStream stream = new FileInputStream(filePath);		Workbook wb = null;		if (fileType.equals("xls")) {			wb = new HSSFWorkbook(stream);		} else if (fileType.equals("xlsx")) {			wb = new XSSFWorkbook(stream);		} else {			System.out.println("您输入的excel格式不正确");		}		Sheet sheet1 = wb.getSheetAt(0);		for (Row row : sheet1) {			for (Cell cell : row) {				System.out.print(cell.getStringCellValue() + "  ");			}			System.out.println();		}	}	/**	 * 生成Excel文档	 * @param outPath	 * @return	 * @throws Exception	 */	public static boolean write(String outPath) throws Exception {		String fileType = outPath.substring(outPath.lastIndexOf(".") + 1, outPath.length());		System.out.println(fileType);		// 创建工作文档对象		Workbook wb = null;		if (fileType.equals("xls")) {			wb = new HSSFWorkbook();		} else if (fileType.equals("xlsx")) {			wb = new XSSFWorkbook();		} else {			System.out.println("您的文档格式不正确!");			return false;		}		// 创建sheet对象		Sheet sheet1 = (Sheet) wb.createSheet("sheet1");		// 循环写入行数据		for (int i = 0; i < 5; i++) {			Row row = (Row) sheet1.createRow(i);			// 循环写入列数据			for (int j = 0; j < 8; j++) {				Cell cell = row.createCell(j);				cell.setCellValue("测试" + j);			}		}		// 创建文件流		OutputStream stream = new FileOutputStream(outPath);		// 写入数据		wb.write(stream);		// 关闭文件流		stream.close();		return true;	}	/**	 * Excel转换成XML	 * @param wb	 * @throws Exception	 */	private static void excelToXML(String filePath) throws Exception {		String fileType = filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length());		InputStream stream = new FileInputStream(filePath);		Workbook wb = null;		if (fileType.equals("xls")) {			wb = new HSSFWorkbook(stream);		} else if (fileType.equals("xlsx")) {			wb = new XSSFWorkbook(stream);		} else {			System.out.println("您输入的excel格式不正确");		}		// 创建根节点;		Element root = new Element("sheet");		// 将根节点添加到文档中;		Document Doc = new Document(root);		Sheet sheet1 = wb.getSheetAt(0);		for (Row row : sheet1) {			Element elements = new Element("tr");			for (Cell cell : row) {//				System.out.print(cell.getStringCellValue() + "  ");				elements.addContent(new Element("cell").setText(cell.getStringCellValue())); // 填写单元格的数据。				root.addContent(elements.detach());			}			Format format = Format.getPrettyFormat();			XMLOutputter XMLOut = new XMLOutputter(format);			XMLOut.output(Doc, new FileOutputStream("d:/books_xls.xml"));			System.out.println();		}	}	public static void main(String[] args) {		try {			ExcelToXML_POI_2007.excelToXML("d:/AAA.xlsx");//			ExcelToXML2.write("D:" + File.separator + "out.xlsx");//			ExcelToXML2.read("D:" + File.separator + "out.xlsx");		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}

另一种写法:

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.util.ArrayList;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;/** *  * @描述:测试excel读取 * 导入的jar包 * poi-3.8-beta3-20110606.jar * poi-ooxml-3.8-beta3-20110606.jar * poi-examples-3.8-beta3-20110606.jar * poi-excelant-3.8-beta3-20110606.jar * poi-ooxml-schemas-3.8-beta3-20110606.jar * poi-scratchpad-3.8-beta3-20110606.jar * xmlbeans-2.3.0.jar * dom4j-1.6.1.jar * jar包官网下载地址:http://poi.apache.org/download.html * 下载poi-bin-3.8-beta3-20110606.zipp */public class ExeclToXML {	/** 总行数 */	private int totalRows = 0;		/** 总列数 */	private int totalCells = 0;	/** 错误信息 */	private String errorInfo;	/** 构造方法 */	public ExeclToXML() {}	/**	 * @描述:得到总行数	 */	public int getTotalRows() {		return totalRows;	}	/**	 * @描述:得到总列数	 */	public int getTotalCells() {		return totalCells;	}	/**	 * @描述:得到错误信息	 */	public String getErrorInfo() {		return errorInfo;	}	/**	 * @描述:是否是2003的excel,返回true是2003	 */	public static boolean isExcel2003(String filePath) {		return filePath.matches("^.+//.(?i)(xls)$");	}	/**	 * @描述:是否是2007的excel,返回true是2007	 */	public static boolean isExcel2007(String filePath) {		return filePath.matches("^.+//.(?i)(xlsx)$");	}		/**	 * @描述:验证excel文件	 */	public boolean validateExcel(String filePath) {		/** 检查文件名是否为空或者是否是Excel格式的文件 */		if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {			errorInfo = "文件名不是excel格式";			return false;		}		/** 检查文件是否存在 */		File file = new File(filePath);		if (file == null || !file.exists()) {			errorInfo = "文件不存在";			return false;		}		return true;	}	/**	 * @描述:根据文件名读取excel文件	 */	public List<List<String>> read(String filePath) {		List<List<String>> dataLst = new ArrayList<List<String>>();		InputStream is = null;		try {			/** 验证文件是否合法 */			if (!validateExcel(filePath)) {				System.out.println(errorInfo);				return null;			}						/** 判断文件的类型,是2003还是2007 */			boolean isExcel2003 = true;			if (isExcel2007(filePath)) {				isExcel2003 = false;			}			/** 调用本类提供的根据流读取的方法 */			File file = new File(filePath);			is = new FileInputStream(file);			dataLst = read(is, isExcel2003);			is.close();		} catch (Exception ex) {			ex.printStackTrace();		} finally {			if (is != null) {				try {					is.close();				} catch (IOException e) {					is = null;					e.printStackTrace();				}			}		}		/** 返回最后读取的结果 */		return dataLst;	}	/**	 * @throws Exception 	 * @描述:根据流读取Excel文件	 */	public List<List<String>> read(InputStream inputStream, boolean isExcel2003) throws Exception {		List<List<String>> dataLst = null;		try {			/** 根据版本选择创建Workbook的方式 */			Workbook wb = null;			if (isExcel2003) {				wb = new HSSFWorkbook(inputStream);			} else {				wb = new XSSFWorkbook(inputStream);			}			dataLst = read(wb);		} catch (IOException e) {			e.printStackTrace();		}		return dataLst;	}	/**	 * @throws IOException 	 * @throws FileNotFoundException 	 * @描述:读取数据	 */	private List<List<String>> read(Workbook wb) throws Exception {		List<List<String>> dataLst = new ArrayList<List<String>>();				/** 得到第一个shell */		Sheet sheet = wb.getSheetAt(0);		/** 得到Excel的行数 */		this.totalRows = sheet.getPhysicalNumberOfRows();		/** 得到Excel的列数 */		if (this.totalRows >= 1 && sheet.getRow(0) != null) {			this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();		}		/** 循环Excel的行 */		for (int r = 0; r < this.totalRows; r++) {			Row row = sheet.getRow(r);			if (row == null) {				continue;			}			List<String> rowLst = new ArrayList<String>();			/** 循环Excel的列 */			for (int c = 0; c < this.getTotalCells(); c++) {				Cell cell = row.getCell(c);				String cellValue = "";				if (null != cell) {					// 以下是判断数据的类型					switch (cell.getCellType()) {					case HSSFCell.CELL_TYPE_NUMERIC: // 数字						cellValue = cell.getNumericCellValue() + "";						break;					case HSSFCell.CELL_TYPE_STRING: // 字符串						cellValue = cell.getStringCellValue();						break;					case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean						cellValue = cell.getBooleanCellValue() + "";						break;					case HSSFCell.CELL_TYPE_FORMULA: // 公式						cellValue = cell.getCellFormula() + "";						break;					case HSSFCell.CELL_TYPE_BLANK: // 空值						cellValue = "";						break;					case HSSFCell.CELL_TYPE_ERROR: // 故障						cellValue = "非法字符";						break;					default:						cellValue = "未知类型";						break;					}				}				rowLst.add(cellValue);			}			/** 保存第r行的第c列 */			dataLst.add(rowLst);		}				/**Excel转换成XML*/		this.excelToXML(sheet);				return dataLst;	}	/***	 * Excel转换成XML	 * @param sheet	 */	private void excelToXML(Sheet sheet) throws Exception {		// 创建根节点;		Element root = new Element("sheet");		// 将根节点添加到文档中;		Document Doc = new Document(root);		// 获取指定单元格的对象引用		for (Row row : sheet) {			Element elements = new Element("tr");			for (Cell cell : row) {				elements.addContent(new Element("cell").setText(cell.getStringCellValue())); // 填写单元格的数据。				root.addContent(elements.detach());			}		}		Format format = Format.getPrettyFormat();		XMLOutputter XMLOut = new XMLOutputter(format);		XMLOut.output(Doc, new FileOutputStream("d:/books_xls.xml"));//		System.out.println("Excel转换成XML成功!");	}	/**	 * @描述:main测试方法	 */	public static void main(String[] args) throws Exception {		ExeclToXML poi = new ExeclToXML();//		List<List<String>> list = poi.read("d:/AAA.xls");		List<List<String>> list = poi.read("d:/AAA.xlsx");		//		if (list != null) {//			for (int i = 0; i < list.size(); i++) {//				System.out.print("第" + (i+1) + "行");//				List<String> cellList = list.get(i);//				for (int j = 0; j < cellList.size(); j++) {//					System.out.print("    第" + (j + 1) + "列值:");//					System.out.print("    " + cellList.get(j));//				}//				System.out.println();//			}//		}	}}


上一篇:logback简易教程

下一篇:Detect Capital

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表