JAVA读取Excel中内容(HSSF和Workbook两种方法)

时间:2024-03-09 10:54:28

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

}