内容添加,以前是用的HSSF,前几天帮同学写一个统计表用了Workbook,现在码一下。

---新内容(Workbook)---

  同学要统计一个xls表格,让表1里面的某一列内容对表2里面的每列进行匹配,匹配到第1列,在表1的另一列对应行设置1,就是一个简单的读取。要导入一个jxl操作包,这个包是专门对execel进行操作的。下面是代码。

 import java.io.File;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook; public class New {
public static void main(String args[]) {
try {
long stime=System.currentTimeMillis();
boolean flag=false;//设置检查标记
long count=0;//设置计数 Workbook bookResource = Workbook.getWorkbook(new File("resource.xls"));//打开表1
Workbook bookKeyWordLib = Workbook.getWorkbook(new File("keyWordLibNew.xls"));//打开表2 Workbook wb = Workbook.getWorkbook(new File("resourceWrite.xls"));//打开表3
// // 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook(new File("resourceWrite.xls"),
wb);
// // 添加一个工作表
WritableSheet sheet3 = book.getSheet(0); // 获得第一个工作表对象
Sheet sheet1 = bookResource.getSheet(0);
Sheet sheet2 = bookKeyWordLib.getSheet(0); // 得到第一列第一行的单元格
//行数 sheet1.getRows();
//列数 sheet1.getColumns(); for(int i=1;i<sheet1.getRows();i++)//对表1的每行进行循环
{ flag=false;//标记为false表示该行没有被检查或者检查过但是没有填值
for(int columns=0;columns<sheet2.getColumns();columns++)//取表2的列数作为限制
{
if(flag)
{
break;
}//该行检查过并且已经有值 检查下一行 for(int rows=1;rows<sheet2.getColumn(columns).length-1;rows++)//取表2每列的行数作为限制条件
{
if(sheet1.getCell(11, i).getContents().contains(
sheet2.getCell(columns, rows).getContents()))//匹配对应单元格的内容
{ sheet3.addCell(
new Label(9, i, new String(((Integer)(columns+1)).toString())));//设置对应单元格内容
System.out.println(columns+" "+rows);
count++;
flag=true;//标记为true
break;
} }
}
}
book.write(); System.out.println(count); bookResource.close();
bookKeyWordLib.close();
book.close();
wb.close();//关闭所有表 否侧表格会损坏
long etime=System.currentTimeMillis();
System.out.println(etime-stime);
} catch (Exception e) {
System.out.println(e.toString()); }
}
}

  这里用的时候要注意,目前我用的时候只能对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行數據
int j,i; for(j=; j<; j++){
for(i=; i<; i++){
HSSFRow row = sheet.getRow(i+);//Row
HSSFCell cell = row.getCell((short));//Cell
@SuppressWarnings("deprecation")
String s=cell.getStringCellValue();//读取单元格String内容 row = sheet.getRow(i+);//Row
cell = row.getCell((short)j);//Cell
int n=(int)cell.getNumericCellValue();//读取单元格Number内容 members[i]= new Member(s, n);//讀取的CityName和NumTravel放入members數組中 }
if(i==||j==){
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(+j);//年份输出
int m=;
for (Member member : members)
{ if(m==)break;
m++;
System.out.println(member);
}
System.out.println("\n*************");//輸出人數最多的五個
}//第一個排序 for(i=; i<; i++){
HSSFRow row = sheet.getRow(i+);//Row
HSSFCell cell = row.getCell((short));//Cell
@SuppressWarnings("deprecation")
String s=cell.getStringCellValue();//读取单元格String内容 int n=;
for(j=;j<;j++){
row = sheet.getRow(i+);//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=;
for (Member member : members)
{ if(m==)break;
m++;
System.out.println(member);
}
System.out.println("\n*************");//輸出人數總和最多前五 }//第二个排序
catch (Exception e) {
System.out.println("已运行xlRead() : " + e);
}
} }

JAVA读取Excel中内容(HSSF和Workbook两种方法)的更多相关文章

  1. Python 使用 xlwings 往 excel 中写入一行数据的两种方法

    该方法跟上一篇写入一列的方法相反,代码如下: # -*- coding:utf-8 -*- import xlwings as xw list1 = [1,2,3,4,5] list2 = [[1], ...

  2. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  3. Java 获取*.properties配置文件中的内容 ,常见的两种方法

    import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...

  4. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  5. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

  6. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  7. [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)

    http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...

  8. Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

    [转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...

  9. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...

随机推荐

  1. Jquery+Json+Handler文件结合应用实例

    1.页面script代码-[model数据.字符串] <script type="text/javascript" charset="utf-8" src ...

  2. 【视频编解码·学习笔记】11. 提取SPS信息程序

    一.准备工作: 回到之前SimpleH264Analyzer程序,找到SPS信息,并对其做解析 调整项目目录结构: 修改Global.h文件中代码,添加新数据类型UINT16,之前编写的工程中,UIN ...

  3. luogu【P2753】[USACO4.3]字母游戏Letter Game

    这个题...一开始看了很久题目(并且问了机房几个大佬)才明白题意.. (原题入口) 题意 大概是一开始给你一些字母出现的次数 你之后组成的单词(最多两个单词)每个字母出现次数 必须小于或等于标准(st ...

  4. 【BZOJ2882】工艺(后缀数组)

    [BZOJ2882]工艺(后缀数组) 题面 BZOJ权限题,我爱良心洛谷 题解 最容易的想法: 把字符串在后面接一份 然后求后缀数组就行了... #include<iostream> #i ...

  5. 【Luogu2900】土地征用(斜率优化,动态规划)

    [Luogu2900]土地征用(斜率优化,动态规划) 题面 Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块 ...

  6. 【Luogu3808】多项式乘法FFT(FFT)

    题目戳我 一道模板题 自己尝试证明了大部分... 剩下的还是没太证出来... 所以就是一个模板放在这里 以后再来补东西吧.... #include<iostream> #include&l ...

  7. Java 计算年龄

    public static String getAgeTxt(String birthTime,String beginTime,int level){ if(StringUtils.isBlank( ...

  8. 接触vsto,开发word插件的利器

    研究word插件有一段时间了,现在该是总结的时候了. 首先咱们来了解下什么是vsto?所谓vsto,就是vs面向office提供的一个开发平台.一个开发平台至少包含两个要素:开发工具(sdk)和运行环 ...

  9. 25.django Model

    django ORM基本配置 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 1.修改project数据库配置 (1)settigs.py里面 默认 DAT ...

  10. HBase新的客户端接口

    最近学习接触HBase的东西,看了<Habase in Action>,但里面关于HBase接口都是过时的接口,以下为HBase新的客户端接口: package com.n10k; imp ...