zoukankan      html  css  js  c++  java
  • 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("
    -------------");//顯示所有原始數據
                    }
                    
                    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("
    *************");//輸出人數最多的五個
                }//第一個排序
                
                
                    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("
    *************");//輸出人數總和最多前五
                
            }//第二个排序 
            catch (Exception e) {
                System.out.println("已运行xlRead() : " + e);
            }   
        }
    
    }
  • 相关阅读:
    解决“此计算机上已安装了试用版。必须先卸载以前安装的试用版后才能安装另一个试用版。”
    Windows 7 快捷键
    【译】部署Asp.Net MVC 网站到Winodws Azure
    jqGrid专题:搜索
    jqGrid专题:格式化数据
    jqGrid专题:事件文档
    jqGrid专题:方法文档
    jqGrid专题:数据加载
    jqGrid专题:参数文档
    jqGrid专题:jqGrid原理
  • 原文地址:https://www.cnblogs.com/GoForMyDream/p/5912737.html
Copyright © 2011-2022 走看看