首页 技术 正文
技术 2022年11月6日
0 收藏 692 点赞 1,240 浏览 4449 个字

内容添加,以前是用的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);
}
}}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,486
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,126
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,287