内容添加,以前是用的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. iOS - UIImageView 动画

    1.UIImageView 动画 1.1 播放图片集 播放图片集 @property (nonatomic, strong) UIImageView *playImageView; self.play ...

  2. php composer的学习之路(一)

    composer的介绍请看这里  http://docs.phpcomposer.com/00-intro.html composer的安装过程我就不介绍了,windows系统下跟其他安装没区别,一直 ...

  3. Python Web-第四周-Programs that Surf the Web(Using Python to Access Web Data)

    1.Understanding HTML 1.最简单的爬虫 import urllib fhand=urllib.urlopen('http://www.dr-chuck.com/page1.htm' ...

  4. Jenkins + Github持续集成构建Docker容器,维基百科&人工自能(AI)模块

    本文分两部分,第一部分是手动计划任务的方式构建Github上的Docker程序,第二部分是用Github webhook Trigger一个自动构建任务. Jenkins采用2.5版本Docker采用 ...

  5. 【BZOJ1899】午餐(动态规划)

    [BZOJ1899]午餐(动态规划) 题面 BZOJ 题解 我太弱了 这种\(dp\)完全做不动.. 首先,感性理解一些 如果所有人都要早点走, 那么,吃饭时间长的就先吃 吃饭时间短的就晚点吃 所以, ...

  6. 杜教筛:Bzoj3944: sum

    题意 求\(\sum_{i=1}^{n}\varphi(i)和\sum_{i=1}^{n}\mu(i)\) \(n <= 2^{31}-1\) 不会做啊... 只会线性筛,显然不能线性筛 这个时 ...

  7. 1.3 java与C++有什么异同

    相同点: 都是面向对象的语言,都使用了面向对象的思想(封装,继承,多态等),可重用性 不同点: 1.java没有指针,避免了指针可能引起的系统问题. 2.java不支持多重继承,C++可以.但java ...

  8. Spark ML源码分析之一 设计框架解读

    本博客为作者原创,如需转载请注明参考           在深入理解Spark ML中的各类算法之前,先理一下整个库的设计框架,是非常有必要的,优秀的框架是对复杂问题的抽象和解剖,对这种抽象的学习本身 ...

  9. 封装好的MD5加密

    /** * 不可逆加密类 为密码提供不可逆的加密运算,使用MD5算法 * * 使用方法: MD5 encrypt = new MD5(); encrypt.getMD5ofStr(str); //返回 ...

  10. Word 2007 封面、目录和正文页码单独设置

    word 2007 生成目录比较简单,即使不会,也可以百度,很快就能弄好.现在有如下需求: 1.封面去掉页码 2.目录页码从1开始,页码在页脚底部中间位置,格式为[1] 3.正文也从1开始,页码在页脚 ...