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;
    }

}

04-05 08:42