一、注意,要对EXCEL表格进行操做,则须要下载导入jxl.jar包或POI,才能使用对表格操做的一些类和接口及方法java
注:Collection接口是java集合框架的最顶层接口,是Sort接口和List接口的父接口;Set接口是一个不能包含重复元素的接口;List接口是一个有序的集合,可包含重复的元素;Map是一种包含键值对的元素的集合,Map不能包含重复的键,每一个键最多可映射一个值。c++
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(); } } }
2、如下是先建立一个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; } }