代码只是实现的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的第三方架包)