內容添加,以前是用的HSSF,前幾天幫同學寫一個統計表用了Workbook,現在碼一下。
---新內容(Workbook)---
同學要統計一個xls表格,讓表1里面的某一列內容對表2里面的每列進行匹配,匹配到第1列,在表1的另一列對應行設置1,就是一個簡單的讀取。要導入一個jxl操作包,這個包是專門對execel進行操作的。下面是代碼。
1 import java.io.File; 2 import jxl.Sheet; 3 import jxl.Workbook; 4 import jxl.write.Label; 5 import jxl.write.WritableSheet; 6 import jxl.write.WritableWorkbook; 7 8 public class New { 9 public static void main(String args[]) { 10 try { 11 long stime=System.currentTimeMillis(); 12 boolean flag=false;//設置檢查標記 13 long count=0;//設置計數 14 15 Workbook bookResource = Workbook.getWorkbook(new File("resource.xls"));//打開表1 16 Workbook bookKeyWordLib = Workbook.getWorkbook(new File("keyWordLibNew.xls"));//打開表2 17 18 Workbook wb = Workbook.getWorkbook(new File("resourceWrite.xls"));//打開表3 19 // // 打開一個文件的副本,並且指定數據寫回到原文件 20 WritableWorkbook book = Workbook.createWorkbook(new File("resourceWrite.xls"), 21 wb); 22 // // 添加一個工作表 23 WritableSheet sheet3 = book.getSheet(0); 24 25 26 // 獲得第一個工作表對象 27 Sheet sheet1 = bookResource.getSheet(0); 28 Sheet sheet2 = bookKeyWordLib.getSheet(0); 29 30 // 得到第一列第一行的單元格 31 //行數 sheet1.getRows(); 32 //列數 sheet1.getColumns(); 33 34 for(int i=1;i<sheet1.getRows();i++)//對表1的每行進行循環 35 { 36 37 flag=false;//標記為false表示該行沒有被檢查或者檢查過但是沒有填值 38 for(int columns=0;columns<sheet2.getColumns();columns++)//取表2的列數作為限制 39 { 40 if(flag) 41 { 42 break; 43 }//該行檢查過並且已經有值 檢查下一行 44 45 for(int rows=1;rows<sheet2.getColumn(columns).length-1;rows++)//取表2每列的行數作為限制條件 46 { 47 if(sheet1.getCell(11, i).getContents().contains( 48 sheet2.getCell(columns, rows).getContents()))//匹配對應單元格的內容 49 { 50 51 52 sheet3.addCell( 53 new Label(9, i, new String(((Integer)(columns+1)).toString())));//設置對應單元格內容 54 System.out.println(columns+" "+rows); 55 count++; 56 flag=true;//標記為true 57 break; 58 } 59 60 } 61 } 62 } 63 book.write(); 64 65 System.out.println(count); 66 67 bookResource.close(); 68 bookKeyWordLib.close(); 69 book.close(); 70 wb.close();//關閉所有表 否側表格會損壞 71 long etime=System.currentTimeMillis(); 72 System.out.println(etime-stime); 73 } catch (Exception e) { 74 System.out.println(e.toString()); 75 76 } 77 } 78 }
這里用的時候要注意,目前我用的時候只能對xls進行操作,csv和xlsx等都暫時不行。
---舊內容(HSSF)---
台科JAVA的第一次作業是用Arrays.sort來排序一個Excel表格。老師已經給過Arrays.sort排序的一個例子了,看懂就行,只要能把Excel的導入JAVA就行。網上給出的方法是用POI(Apache POI),是一個JAVA的API for Microsoft Documents,也就是office都可以用這個POI來操作。
在完成這次作業的過程中也把以前不知道的Project,Packet,Class等幾個名字分清楚了,會往Project里面添加jar包了。library是類庫,是jar包的集合,而jar是class的集合。比如需要import.java.uitl.*;時就是把一個jar包引用進來,也就是jar包里面的class文件。
引用了一個Apache POI的jar,用的是3.0版本的。
package poi; import java.util.Arrays; import java.util.Comparator; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.io.FileInputStream; class Member { String CityName; int NumTravel; public Member(String f, int h) { CityName = f; NumTravel = h; } public String toString() { return CityName + ":"+ " " + NumTravel; } } //人數比較 class NumTravelComparator implements Comparator<Member> { @Override public int compare(Member a, Member b) { return b.NumTravel - a.NumTravel; } } public class CompDemo { public static String fileToBeRead = "D:\\travel.xls";//要打開的Excel的位置 public static void main(String[] args) { //對Excel的讀取 try { // 創建對Excel工作簿文件的引用 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead)); // 創建對工作表的引用 HSSFSheet sheet = workbook.getSheet("Sheet1");//讀取第一張工作表 Sheet1 Member members[] = new Member[36];//共36行數據 int j,i; for(j=1; j<13; j++){ for(i=0; i<36; i++){ HSSFRow row = sheet.getRow(i+1);//Row HSSFCell cell = row.getCell((short)0);//Cell @SuppressWarnings("deprecation") String s=cell.getStringCellValue();//讀取單元格String內容 row = sheet.getRow(i+1);//Row cell = row.getCell((short)j);//Cell int n=(int)cell.getNumericCellValue();//讀取單元格Number內容 members[i]= new Member(s, n);//讀取的CityName和NumTravel放入members數組中 } if(i==0||j==1){ for (Member member : members) { System.out.println(member); } System.out.println("\n-------------");//顯示所有原始數據 } System.out.println(""); NumTravelComparator c1 = new NumTravelComparator(); Arrays.sort(members, c1);//Arrays.sort排序 System.out.println(2001+j);//年份輸出 int m=0; for (Member member : members) { if(m==5)break; m++; System.out.println(member); } System.out.println("\n*************");//輸出人數最多的五個 }//第一個排序 for(i=0; i<36; i++){ HSSFRow row = sheet.getRow(i+1);//Row HSSFCell cell = row.getCell((short)0);//Cell @SuppressWarnings("deprecation") String s=cell.getStringCellValue();//讀取單元格String內容 int n=0; for(j=8;j<13;j++){ row = sheet.getRow(i+1);//Row cell = row.getCell((short)j);//Cell n+=(int)cell.getNumericCellValue();//讀取單元格Number內容並累加 } members[i]= new Member(s, n); } System.out.println(""); NumTravelComparator c1 = new NumTravelComparator(); Arrays.sort(members, c1);//排序 System.out.println("total"); int m=0; for (Member member : members) { if(m==5)break; m++; System.out.println(member); } System.out.println("\n*************");//輸出人數總和最多前五 }//第二個排序 catch (Exception e) { System.out.println("已運行xlRead() : " + e); } } }