代码只是实现的function,各位勿喷啊...
题目大概:
我们需要在一份包含有多个采购订单(purchase orders)的Excel文件中提取所有的PO NUMBER。
</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)); } }
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; } }