一、注意,要對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; } }