PIO讀取excel文件,java實現

藍星花發表於2017-11-15

要下載一個poi-3.0.jar(直接點選就可以下載)檔案

下載完之後就加到classpath就能編譯通過,然後就行了

先建立一個工作簿物件new HSSFWorkbook(new FileInputStream(filepath)),然後在建立工作表 workbook.getSheetAt(0)0表示sheet1,也可以直接用getSheet("Sheet1")這個引數可以是工作表名,然後在遍歷所有的單元格,並讀取資料,遍歷的時候要注意單元格的格式,有兩種,分為數字和字串,所以要進行判斷,額,r.getCell((short)j).getCellType() == 1,這個是字串用getStringCellValue()獲取,然後如果是getCellType()是0的話,則是數字內容,用getNumericCellValue()獲取,然後讀取excel檔案結束了。

具體建立excel檔案的方法也是差不多。。先createSheet()建立工作表,然後不斷的createRow(),createCell()建立單元行和列。。然後用輸出流直接輸出就行了。

package socket;

import java.io.*;
import org.apache.poi.hssf.usermodel.*;
public class ReaderWriterFile {
	public String readExcelFile(String filename) {
		StringBuffer result = new StringBuffer();
		String fileToBeRead = filename;
		// 建立對Excel工作簿檔案的引用
		HSSFWorkbook workbook = null;
		try {
			workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
			// 建立對工作表的引用。
			HSSFSheet sheet = workbook.getSheetAt(0);
			// HSSFSheet sheet = workbook.getSheet("Sheet1");
			// 便利所有單元格,讀取單元格
			int row_num = sheet.getLastRowNum();
			for (int i = 0; i < row_num; i++) {
				HSSFRow r = sheet.getRow(i);
				int cell_num = r.getLastCellNum();
				for (int j = 0; j < cell_num; j++) {
					//System.out.println(r.getCell((short)j).getCellType());
					if(r.getCell((short)j).getCellType() == 1){
						result.append(r.getCell((short) j).getStringCellValue());
					}else{
						result.append(r.getCell((short) j).getNumericCellValue());
					}
					result.append("\t");
				}
				result.append("\n");
			}
		} catch (FileNotFoundException e) {
			System.out.println("檔案沒找到 : " + e);
		} catch (IOException e) {
			System.out.println("已執行IO異常: " + e);
		}
		return result.toString();

	}

	public void writeExcel(String path, String content) {
		String outputFile = path;
		String data = content;

		try {
			// 建立新的Excel 工作簿
			HSSFWorkbook workbook = new HSSFWorkbook();
			// 在Excel工作簿中建一工作表,其名為預設值
			HSSFSheet sheet = workbook.createSheet();

			String[] rows = data.split("\n");
			for (int i = 0; i < rows.length; i++) {
				HSSFRow row = sheet.createRow((short) i);
				String[] cells = rows[i].split("\t");
				for (int j = 0; j < cells.length; j++) {
					HSSFCell cell = row.createCell((short) j);
					cell.setCellType(HSSFCell.CELL_TYPE_STRING);
					cell.setCellValue(cells[j]);
				}
			}
			// 新建一輸出檔案流
			FileOutputStream fOut = new FileOutputStream(outputFile);
			// 把相應的Excel 工作簿存檔
			workbook.write(fOut);
			fOut.flush();
			// 操作結束,關閉檔案
			fOut.close();
			System.out.println(path + "檔案生成完畢...");

		} catch (FileNotFoundException e) {
			System.out.println("檔案沒找到 : " + e);
		} catch (IOException e) {
			System.out.println("已執行IO異常 : " + e);
		}
	}

	public String readWordFile(String filename) {
		return "";
	}

	public static void main(String[] arg) {
		ReaderWriterFile rw = new ReaderWriterFile();
		String res = rw.readExcelFile("E:/三國將領聚類.xls");
		System.out.println(res);
		rw.writeExcel("D:\\out.xls", res);
	}
}




相關文章