现在的位置: 首页 > 综合 > 正文

Java基础/读取Excel写入XML文件中

2018年02月04日 ⁄ 综合 ⁄ 共 3228字 ⁄ 字号 评论关闭

代码只是实现的function,各位勿喷啊...

题目大概:

我们需要在一份包含有多个采购订单(purchase orders)的Excel文件中提取所有的PO NUMBER。

附件中提供了该excel的文件以及输出文件格式,你需要使用Java语言或其他语言来完成这个转换过程。

输出格式:

<?xml version="1.0" encoding="utf-8" ?>

<PO_Data>

  <POs>

    <PO Number="" />

  </POs>

</PO_Data>

附件:

一个xls文件,这里就不附上附件了.

前记:

LZ很悲剧啊有木有!一个学生哪来那么多机会用各种第三方架包 掉各种API .. 所以LZ压根不熟悉 啥API啊..

悲剧的我,CSDN搜了一下,居然有N个人在提问,LZ奋然欣喜啊~~ 难道有现成的馍馍捡了??!

不过让LZ失望啊...提问的人都太懒了 都在等现成的答案 ~~ 悲剧啊,LZ等不起啊,LZ 25号之前就要回复啊~~ - -#

于是LZ开始自己捣鼓了~~

当LZ打开Excel的时候,瞬间泪崩啊!!~ 俺的Excel2003打开后居然是乱的!各种空白!!各种没顺序啊!! (还好不是乱码- -)

LZ没办法啊, 只能穷搜一下, FUCK -- OutOfMemory 超内存啊!! 顺然想到,哪能这样就给你过了呢??36000条数据啊!~

于是LZ 脑残的想了下, 用哪种搜索好?. 百无聊赖之余, LZ猛然发现Excel 要取某列数据,肯定是有一定规律的 !!

于是俺发现42列存放的是: LZ需要的值.. 瞬间复杂度从N^2 掉到了 N, 开心有木有!!~

原谅LZ废话这么多,上代码 ,注释写的很详细,也为了自己方便复习!!

import java.io.File;  
import java.io.FileOutputStream;
import java.io.IOException;  
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;  
import jxl.Sheet;  
import jxl.Workbook;  
import jxl.read.biff.BiffException; 

import org.jdom.Document;   
import org.jdom.Element;   
import org.jdom.JDOMException;   
import org.jdom.output.XMLOutputter;   
 

public class mainClass 
{  
		static List<po_number> list = new ArrayList<po_number>();
		static int number = 0;
		public static final String SAVE_URL = "D:/output_schema.xml";
		
		public static void main(String args[])
		{  
			mainClass mainclass = new mainClass();
			// 获得所有的PO NUMBER数据
			mainclass.getList();
			
			// 生成XML文件
		    try {  
		    		System.out.println("正在生成 xml 文件...");  
		    		mainclass.BuildXMLDoc();  
		    		System.out.println("生成成功,目标所在地址:"+SAVE_URL); 
		    } catch (Exception e) {  
		    		e.printStackTrace();  
		    }  
			
		}  
		
		public void getList(){
			
			//File.separator 返回文件分隔符 适应多平台 
		    File f=new File("E:"+File.separator+"Data"+File.separator+"input.xls");  
		
		    try {  
		        Workbook book=Workbook.getWorkbook(f);  
		        Sheet sheet=book.getSheet(0);   //获得第一个工作表对象  

		        for(int i=0;i<sheet.getRows();i++){
		        	Cell cell = sheet.getCell(35, i);  //获得单元格  
		        	Cell cell_2 = sheet.getCell(42, i);  //获得单元格 
		        	if(cell.getContents().equals("PO NUMBER:"))
		        	{
		        		number ++;
		        		String value = cell_2.getContents();
		        		int row = i;
		        		int low = 42;
		        		//System.out.println("row = "+row+" || low = "+low+" || value = "+value+"\n");
		        		list.add(new po_number(row, low, value));
		        	}
		        }
		        // System.out.println("共有数据 =>"+number);
		        
		    } catch (BiffException e) {  
		        // TODO Auto-generated catch block  
		        e.printStackTrace();  
		    } catch (IOException e) {  
		        // TODO Auto-generated catch block  
		        e.printStackTrace();  
		    }  
		}
		
		 public void BuildXMLDoc() throws IOException, JDOMException {  
		 
			 // 创建根节点 PO_Data;   
		        Element root = new Element("PO_Data"); 
		     // 根节点添加到文档中;   
		        Document Doc = new Document(root); 

		        for (int i = 0; i < list.size(); i++) {   
		        	
		            // 创建节点 POs;   
		            Element elements = new Element("POs");    
		            // 给 POs 节点添加属性 PO Number;    
		            
		            //elements.setAttribute("POs", " Number=" + list.get(i).string);  
		            //elements.addContent(new Element("PO Number").setText(list.get(i).string));  
		            // 创建子节点PO 
		            Element elements_po = new Element("PO");
		            elements_po.setAttribute("Number",list.get(i).string);
		            elements.addContent(elements_po);
		            
		            // 给父节点PO_Data添加POs子节点;  
		            root.addContent(elements);  
		        }  
		        XMLOutputter XMLOut = new XMLOutputter();  
		         
		        // 输出 output_schema.xml 文件;  
		        XMLOut.output(Doc, new FileOutputStream(SAVE_URL));  	        
		 }
} 

以及用到的一个bean类 po_number

public class po_number {

	int row;
	
	int low;
	
	String string;
	
	public po_number(int row,int low ,String string){
		this.row = row;
		this.low = low;
		this.string = string;
	}
	
	public int getRow(){
		return row;
	}
	
	public int getLow(){
		return low;
	}
	public String getString(){
		return string;
	}
	
	public void setRow(int row){
		this.row = row;
	}
	
	public void setLow(int low){
		this.low = low;
	}
	
	public void setString(String string){
		this.string = string;
	}
	
}

附件: 
jdom.jar  
  
        
jxl.jar
(前者为  操作XML的第三方架包  后者为 操作Excel的第三方架包)

抱歉!评论已关闭.