JAVA读取Excel中内容(HSSF和Workbook两种方法)
内容添加,以前是用的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两种方法)的更多相关文章
- Python 使用 xlwings 往 excel 中写入一行数据的两种方法
该方法跟上一篇写入一列的方法相反,代码如下: # -*- coding:utf-8 -*- import xlwings as xw list1 = [1,2,3,4,5] list2 = [[1], ...
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
- Java 获取*.properties配置文件中的内容 ,常见的两种方法
import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)
Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...
- [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)
http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
[转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...
- Oracle中spool命令实现的两种方法比较
---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...
随机推荐
- TensorFlow MNIST初级学习
MNIST MNIST 是一个入门级计算机视觉数据集,包含了很多手写数字图片,如图所示: 数据集中包含了图片和对应的标注,在 TensorFlow 中提供了这个数据集,我们可以用如下方法进行导入: f ...
- Intel_CS_WebRTC 验证性测试
机器: Centos 7.2 一.配置阿里云源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/Cen ...
- 使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景,想要去掉的话可以用下面这种方式
a,a:hover,a:active,a:visited,a:link,a:focus{ -webkit-tap-highlight-color:rgba(0,0,0,0); -webki ...
- .Net Core下 Redis的String Hash List Set和Sorted Set的例子
1.新建一个.Net Core控制台应用程序,用Nuget导入驱动 打开程序包管理控制台, 执行以下代码. PM> Install-Package ServiceStack.Redis 即可添加 ...
- 关于CS1061报错(XX不包含XXX的定义,并且找不到类型为XX的第一个参.....)的一种可能的解决的办法
在我编程中,我遇到了一个这样的报错, 可是我引用的product类中又确实定义了这么一个方法, protected void BindPageData(int categoryID) { Produc ...
- 【BZOJ3926】诸神眷顾的幻想乡(后缀自动机)
[BZOJ3926]诸神眷顾的幻想乡(后缀自动机) 题面 BZOJ 题解 广义后缀自动机啦 求多个串的不同子串个数? 当然是后缀自动机,最后只要把\(longest-parent.longest\)求 ...
- 【Webpack的使用指南 01】Webpack入门
使用Webpack有一段时间了,但是感觉之前学的用的都比较零散,所以在这里整理一下Webpack的使用知识,从入门到进阶. 创建项目 首先创建最简单的一个项目 npm init 得到以下项目结构: 安 ...
- ORM Basic
ORM即object relational mapping 对象关系映射程序,可以在操作数据库的时候使用自有的语言而不必使用数据库的语言. 在python中,最强大的ORM框架就是SQLAlchemy ...
- 2D变形transform的translate和rotate
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Scala编程快速入门系列(二)
目 录 一.Scala概述 二.Scala数据类型 三.Scala函数 四.Scala集合 五.Scala伴生对象 六.Scala trait 七.Actor 八.隐式转换与隐式参数 九.Sca ...