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 ...
 
随机推荐
- python 字符串格式化输出 %d,%s及 format函数
			
旧式格式化方式:%s,%d 1.顺序填入格式化内容 s = "hello %s, hello %d"%("world", 100) print(s) 结果: ' ...
 - 原生JS实现tab切换--web前端开发
			
tab切换非常常见,应用非常广泛,比较实用,一般来说是一个网站必不可少的一个效果.例如:https://123.sogou.com/中的一个tab部分: 1.案例源代码 <!DOCTYPE ht ...
 - PyTorch官方中文文档:PyTorch中文文档
			
PyTorch中文文档 PyTorch是使用GPU和CPU优化的深度学习张量库. 说明 自动求导机制 CUDA语义 扩展PyTorch 多进程最佳实践 序列化语义 Package参考 torch to ...
 - canvas实现水波纹效果
			
本文将会从水波的基本原理开始,详细讲解在canvas中模拟水波扩散,分析并计算水波的能量分布,并通过振幅模拟水波对图像的折射效果,最后实现水波特效. 水波基本原理 首先复习一波高中物理知识. 波是指振 ...
 - Web前端有价值的博客文章汇总
			
一.HTML 二.CSS 1.深入理解position和z-index属性 :https://www.cnblogs.com/zhuzhenwei918/p/6112034.html 2.BFC(清除 ...
 - 命令行更新node和npm
			
Windows系统下: 查看版本的命令和Ubuntu下一样. 不同的是Windows下不能使用"n"包管理器来对NodeJS进行管理,在这里我们使用一种叫"gnvm&qu ...
 - handsontable 渲染实例
			
单元格选择完成后将触发事件afterSelectionEnd, 然后在js中: hot.addHook('afterSelectionEnd', function(r, c, r2, c2){ // ...
 - 将openface移植到vs2013
			
github上面的开源代码openface:https://github.com/TadasBaltrusaitis/OpenFace 可用于做人脸检测和头部姿态检测,该工程是在VS2015上建立的, ...
 - Angular4---起步----环境配置安装@angular/cli
			
学习angular,首先要搭建起angular的手脚架@angular/cli.首先需要NodeJS环境. 1.安装NodeJS 首先检查电脑是否安装了NodeJS环境,打开cmd命令行,运行node ...
 - SublimeText3插件安装及使用
			
之前写过一篇文章讲了安装PackageControl,这里就不做赘述了,需要的朋友移步到这篇文章:Sublime Text安装package control 安装插件方法:通过preferencs-- ...