1、注意,要对EXCEL表格进行操作,则需要下载导入jxl.jar包或POI,才能使用对表格操作的一些类和接口及方法
注:Collection接口是java集合框架的最顶层接口,是Sort接口和List接口的父接口;Set接口是一个不能包含重复元素的接口;List接口是一个有序的集合,可包含重复的元素;Map是一种包含键值对的元素的集合,Map不能包含重复的键,每个键最多可映射一个值。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.CellFormat;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class ReadEXCEL {
// static String fileName = "";//定义全局变量
public static void main(String args[]) {
// readExcelCell();
// createFile();
// updateExcel();
// readAllCell();
// modifyExcel("test.xls");
// createbook();//相当于创建表模板
// updatebook();
// createBookToUrl();
// updateBookToUrl();
// getWorkBookName();
createTxtfile();
}
public static void createTxtfile() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHMMSS");
String fileName = sdf.format(new Date()) + ".txt";
String filePath = "D:/myselenium/TestJava/result/" + fileName;
File file = new File(filePath);
try {
if (!file.exists()) {//判断该文件是否已经存在,不存在就新建
file.createNewFile();
/* try {// 1. 利用PrintStream写文件
FileOutputStream out = new FileOutputStream(file);
PrintStream p = new PrintStream(out);
p.println("I'm the text to be write");
} catch (FileNotFoundException e) {
e.printStackTrace();
}*/
//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
//append 为true就是在文件末尾追加内容,为false就是覆盖。
FileOutputStream out = new FileOutputStream(file, true);
StringBuffer sb = new StringBuffer();
sb.append("I'm the text to be write");
out.write(sb.toString().getBytes("utf-8"));//将 b.length 个字节从指定 byte 数组写入此文件输出流中。
out.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 封装一个创建excel文件的方法,返回一个WritableWorkbook
public static WritableWorkbook createbook() {
try {
File file = new File(getWorkBookName());
String fileName = file.getName();
System.out.println(fileName);
WritableWorkbook book = Workbook.createWorkbook(new File(fileName));// "text2.xls"
WritableSheet sheet = book.createSheet("第一页", 0);
book.write();// 写入数据并关闭文件
book.close();
return book;// book在这里是局部变量,所以,这条RETURN语句只能放在TRY语句里面
} catch (Exception e) {
e.printStackTrace();
return null;// 此语句必须要有,如果捕获到异常,则返回空--针对代码块都在异常语句TRy
// CATCH内时,当要返回值时,都得有返回语句
}
}
// java在后台生成excel时如何将生成的文件放到自己指定的目录下面
public static File createBookToUrl() {
String fileName = getWorkBookName();
File file = new File("D:/myselenium/TestJava/result/" + fileName);
WritableWorkbook wwb;
try {
wwb = Workbook.createWorkbook(file);
WritableSheet sheet = wwb.createSheet("第一页", 0);
// 如果只创建工作薄,而不创建工作表的话,打开工作薄会报异常,则创建工作薄必须再创建一个工作表才算是完整的工作薄
int columns = 5;
int rows = 4;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
sheet.addCell(new Label(j, i, "第" + j + "列第" + i + "行"));
}
}
wwb.write();
wwb.close();
return file;
} catch (Exception e) {
e.printStackTrace();
return null;
}
// return file;
}
// 用JAVA对指定路径下的已存在的EXCEL文件进行写入或修改操作
public static void updateBookToUrl() {
File file = createBookToUrl();
try {
Workbook workbook = Workbook.getWorkbook(file);// 这里获取到的工作薄是只读的
WritableWorkbook wwb = Workbook.createWorkbook(file, workbook);// 这里创建的副本工作薄才是可写的
/*
* WritableSheet sheet = wwb.getSheet(0); Label lbl = new Label(0,
* 0, "测试TEST"); sheet.addCell(lbl);
*/
WritableSheet[] sheets = wwb.getSheets();// 用于后续循环写入不同的工作表,就必须
// 用WritableSheet,是可写的,而不能用Sheet,因为Sheet类是只读的
for (int i = 0; i < sheets.length; i++) {
WritableSheet sheet1 = sheets[i];
for (int r = 0; r < sheet1.getRows(); r++) {
for (int c = 0; c < sheet1.getColumns(); c++) {
Cell cell = sheet1.getCell(c, r);
System.out.println(cell.getContents());
if (r % 2 == 0 && c % 2 == 0) {
sheet1.addCell(new Label(c, r,
"dddddddddddddddddddddd"));
}
}
}
}
wwb.write();
wwb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取当前日期作为文件名
public static String getWorkBookName() {
try {
Date now = new Date(); // new Date()为获取当前系统时间
// 设置日期格式
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HHmmss");// 可以方便地修改日期格式
String date = dateFormat.format(now);// 把当前日期以定义的日期格式转化为string
File file = new File("D:/myselenium/TestJava/result/" + date
+ ".xls");
String fileName = file.getName();
// System.err.println(fileName);
return fileName;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static File getWorkBookName1() {
try {
Date now = new Date(); // new Date()为获取当前系统时间
// 设置日期格式
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HHmmss");// 可以方便地修改日期格式
String date = dateFormat.format(now);// 把当前日期以定义的日期格式转化为string
File file = new File("D:/myselenium/TestJava/result/" + date
+ ".xls");
String fileName = file.getName();
System.err.println(fileName);
return file;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// 调用以上封装方法createbook("text2.xls"),往里面修改数据
public static void updatebook() {
String bookName = getWorkBookName();
WritableWorkbook book = createbook();// 先创建一个文件
// WritableWorkbook book=createBookToUrl();//明天测试这个方法,如何修改数据
try {
Workbook wb = Workbook.getWorkbook(new File(bookName));// 再获取这个文件
WritableWorkbook wtwb = Workbook.createWorkbook(new File(bookName),
wb);// 创建副本并数据写入原文件中
WritableSheet sheet = wtwb.getSheet(0);// 获取第一个工作表
WritableCell cell = sheet.getWritableCell(0, 0);// 获取第一行第一列的单元格
CellFormat cf = cell.getCellFormat();
Label label = new Label(0, 0, "我是中国人");
// label.setCellFormat(cf);//重新设置格式后执行会报错,则在此注释
sheet.addCell(label);
wtwb.write();
wtwb.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 生成Excel的类
public static void createFile() {
try {
// 打开文件
// WritableWorkbook
// 是用与操作可写工作簿的,其中的方法有创建可写工作表、复制工作表、设置工作簿背景RGB、移除工作表等操作
WritableWorkbook book = Workbook
.createWorkbook(new File("test.xls"));// 创建一个新的文件
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("第一页", 0);
WritableSheet sheet1 = book.createSheet("第二页", 1);// 添加一个工作表
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// 以及单元格内容为test
Label label = new Label(0, 0, "test");
Label label1 = new Label(0, 1, "test1");
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
sheet1.addCell(label1);
jxl.write.Number number = new jxl.write.Number(1, 0, 555.1111);
jxl.write.Number number1 = new jxl.write.Number(1, 1, 555.22222);
jxl.write.Number number2 = new jxl.write.Number(1, 0, 555.22223);
sheet.addCell(number);
sheet.addCell(new jxl.write.Number(1, 1, 555.22222));
sheet1.addCell(number1);
sheet1.addCell(number2);
// 写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
// 读取Excel的类
public static void readExcelCell() {
try {
Workbook book = Workbook.getWorkbook(new File("test.xls"));
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(0, 0);
String result = cell1.getContents();
System.out.println(result);
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static void updateExcel() {
try {
// Excel获得文件
Workbook wb = Workbook.getWorkbook(new File("test.xls"));
// 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook(
new File("test.xls"), wb);// 如果想在原文件上修改,则必须打开一个副本指定数据写到原文件中
// WritableWorkbook book = Workbook.createWorkbook(new
// File("test.xls"));
// 没有创建副本,如果直接用以上语句来写数据的话,会覆盖原文件内容
// 另外,要对表格做修改操作,必须创建写入的操作对象
// 添加一个工作表
WritableSheet sheet = book.createSheet("第5页", 4);
sheet.addCell(new Label(0, 0, "第5页的测试数据"));
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
public static void readAllCell() {
try {
Workbook book = Workbook.getWorkbook(new File("test.xls"));
Sheet sheet = book.getSheet(0);
int column = sheet.getColumns();
int row = sheet.getRows();
System.out.println(column);
System.out.println(row);
System.out.println(sheet.getCell(1, 1).getContents());
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
Cell cell = sheet.getCell(j, i);
String getcellresult = cell.getContents();
System.out.println(getcellresult + "\t");
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void modifyExcel(String excelpath) {
try {
// jxl.Workbook wb = null; // 创建一个workbook对象
Workbook wb = Workbook.getWorkbook(new File(excelpath));// 直接这样定义可以不写文件输入流对象,后面直接创建副本即可对表格修改操作
/*
* try { //注:经多次测试,不加输入流对象,获取单元格格式,并处理格式后,修改该单元格数据,执行程序
* ,会报错,执行不成功;如果不加输入流,想修改该单元格数据,则不要处理单元格格式,执行程序,可执行成功 InputStream is
* = new FileInputStream(excelpath); // 创建一个文件流,读入Excel文件 wb =
* Workbook.getWorkbook(is); // 将文件流写入到workbook对象 } catch
* (BiffException e) { // TODO Auto-generated catch block
* e.printStackTrace(); } catch (IOException e) { // TODO
* Auto-generated catch block e.printStackTrace(); }
*/
// jxl.Workbook 对象是只读的,所以如果要修改Excel,需要创建一个可读的副本,副本指向原Excel文件(即下面的new
// File(excelpath))
jxl.write.WritableWorkbook wbe = Workbook.createWorkbook(new File(
excelpath), wb);// 创建workbook的副本
WritableSheet sheet = wbe.getSheet(0); // 获取第一个sheet,且是一个写的对象,这里不能直接用Sheet类
// WritableCell cell =sheet.getWritableCell(0, 0);//获取第一个单元格
Cell cell = sheet.getCell(3, 3);
// jxl.format.CellFormat cf = cell.getCellFormat();//获取第一个单元格的格式
CellFormat cf = cell.getCellFormat();
jxl.write.Label lbl = new jxl.write.Label(3, 3,
"修改后的值HUA HUAlili111");// 将第一个单元格的值改为“修改後的值”
// lbl.setCellFormat(cf);// 将修改后的单元格的格式设定成跟原来一样
sheet.addCell(lbl);// 将改过的单元格保存到sheet
wbe.write();// 将修改保存到workbook --》一定要保存
wbe.close();// 关闭workbook,释放内存 ---》一定要释放内存
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二、以下是先创建一个EXCEL文件且写入一些数据,然后再对该文件进行修改,代码如下:
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class Test123{
public static void main(String[] args) {
// getWorkBookFile();
writeExcel();
}
private static void writeExcel(){
File file = getWorkBookFile();
try {
Workbook rw = Workbook.getWorkbook(file);
//创建可写入的Excel工作薄对象
WritableWorkbook wwb=Workbook.createWorkbook(file, rw);
//读取原表各个单元格的数据并打印到控制台
Sheet[] sheets = rw.getSheets();//读取工作表数量,即这个对象不能用来做写入操作
//获取目标表的第一个sheet
WritableSheet sheet3 = wwb.getSheet(0);
for(int s = 0 ; s < sheets.length;s++){
Sheet sheet = sheets[s];
int rows = sheet.getRows();
int columns = sheet.getColumns();
for(int r=0;r<rows;r++){
for(int c = 0 ; c< columns;c++){
Cell cell = sheet.getCell(c, r);
String contents = cell.getContents();
System.err.println("第"+r+"行,第"+c+"列的内容为:"+contents);
//将原表的偶数行偶数列的的数据修改为你好
if(r%2 ==0 && c%2==0){//取余为0,就是被整除才是偶数列
sheet3.addCell(new Label(c, r, "你好"));//WritableSheet这个对象才可以操作写入
}
}
}
}
//写入Excel对象
wwb.write();
//关闭可写入的Excel对象
wwb.close();
//关闭只读的Excel对象
rw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static File getWorkBookFile(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String dateStr = sdf.format(new Date());
String fileName = dateStr+".xls";
File file = null;
try {
//创建只读的Excel工作薄的对象
file = new File("D:/myselenium/TestJava/result/"+fileName);
WritableWorkbook wwb = Workbook.createWorkbook(file);
WritableSheet sheet = wwb.createSheet("sheet1", 0);
int columns = 10;
int rows = 5;
for(int r = 0 ; r < rows;r++){
for(int c = 0 ; c < columns;c++){
sheet.addCell(new Label(c, r, "第"+r+"行,第"+c+"列"));
}
}
//写入Excel对象
wwb.write();
//关闭可写入的Excel对象
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
return file;
}
}