java操做EXCELl和TXT實例

一、注意,要對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;
    }
    
}
相關文章
相關標籤/搜索