JAVA讀取Excel中內容(HSSF和Workbook兩種方法)


內容添加,以前是用的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);
        }   
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM