1. 程式人生 > >使用I/O流生成Excel檔案

使用I/O流生成Excel檔案

在Eclipse中新建專案GenerateExcel,並在其中建立一個GenerateExcel.java檔案。在該類中首先引入org.apache.poi包,然後通過其中的hssf類來實現Excel檔案的生成。核心程式碼如下所示:

public class GenerateExcel {								//建立Excel檔案
	// 新建一個Excel檔案,裡面新增5行5列的內容,另外新增兩個合併大單元格
	public void createExcel(String fileName) {
		File file = new File(fileName);						// 建立excel檔案物件
		FileOutputStream fOut = null;
		try {		
			HSSFWorkbook workbook = new HSSFWorkbook();	// 建立一個新的HSSFWorkbook物件
			HSSFSheet sheet = workbook.createSheet("myFirstExcel");// 建立一個Excel的工作表
			HSSFFont font = workbook.createFont();			// 建立字型,紅色、粗體
			font.setColor(HSSFFont.COLOR_RED);
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			HSSFFont font1 = workbook.createFont();
			font1.setColor(HSSFFont.COLOR_NORMAL);		// 建立字型,黑色、非粗體
			font1.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
			HSSFCellStyle cellStyle = workbook.createCellStyle();// 建立單元格的格式,如居中、左對齊等
			cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平方向上居中對齊
			cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直方向上居中對齊
			cellStyle.setFont(font); 						// 設定字型
			HSSFCellStyle cellStyle1 = workbook.createCellStyle();
			cellStyle1.setAlignment(HSSFCellStyle.ALIGN_LEFT);
			cellStyle1.setFont(font1);
			// 下面將建立一個4行3列的表。第一行為表頭
			int rowNum = 0;							// 行標
			int colNum = 0;								// 列標
			// 建立表頭資訊
			HSSFRow row = sheet.createRow((short) rowNum); // 在索引0的位置建立行
			HSSFCell cell = null; 						// 單元格
			for (colNum = 0; colNum < 5; colNum++) {
				cell = row.createCell((short) colNum);		// 在當前行的colNum列上建立單元格
				cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 定義單元格為字元型別
				// 定義編碼方式,為了支援中文,這裡使用了ENCODING_UTF_16
				cell.setCellStyle(cellStyle); // 為單元格設定格式
				cell.setCellValue("表頭-第" + (colNum + 1) + "列"); // 新增內容至單元格
			}
			rowNum++;
			for (; rowNum < 5; rowNum++) {
				row = sheet.createRow((short) rowNum);		// 新建第rowNum行
				for (colNum = 0; colNum < 5; colNum++) {	
					cell = row.createCell((short) colNum);	// 在當前行的colNum位置建立單元格
					cell.setCellStyle(cellStyle1);
					cell.setCellValue("表體-第" + rowNum + "行第" + (colNum + 1) + "列");
				}
			}
			rowNum = 5;								// 合併單元格
			for (; rowNum < 9; rowNum++) {
				row = sheet.createRow((short) rowNum);
				for (colNum = 0; colNum < 5; colNum++) {
					cell = row.createCell((short) colNum); 	// 在當前行的colNum位置建立單元格
				}
			}
			rowNum = 5;								// 建立第一個大單元格,高度為2,寬度為2
			colNum = 0;
			Region region = new Region(rowNum, (short) colNum, (rowNum + 1),
					(short) (colNum + 4));
			sheet.addMergedRegion(region);
			cell = sheet.getRow(rowNum).getCell((short) colNum); // 獲得第一個大單元格
			cell.setCellStyle(cellStyle);
			cell.setCellValue("合併行單元格");			
			rowNum = 7;								// 建立第二個大單元格,高度為2,寬度為3
			for (colNum = 0; colNum < 5; colNum++) {
				region = new Region(rowNum, (short) colNum, (rowNum + 1),
						(short) (colNum));
				sheet.addMergedRegion(region);				
				cell = sheet.getRow(rowNum).getCell((short) colNum);// 獲得第二個大單元格
				cell.setCellStyle(cellStyle);
				cell.setCellValue("合併列單元格");
			}
			fOut = new FileOutputStream(file);				// 新建一輸出檔案流
			workbook.write(fOut);// 將建立的內容寫到指定的Excel檔案中
			fOut.flush();
			fOut.close();								// 操作結束,關閉檔案
			System.out.println("Excel檔案建立成功!\nExcel檔案的存放路徑為:"
					+ file.getAbsolutePath());
		} catch (Exception e) {
			System.out.println("Excel檔案" + file.getAbsolutePath()
					+ "建立失敗\n其原因為:" + e);
		} finally {
			if (fOut != null) {
				try {
					fOut.close();
				} catch (IOException e1) {
				}
			}
		}
	}
	public static void main(String[] args) throws Exception {
		GenerateExcel excel = new GenerateExcel();
		String fileName = "D://Excel.xls";					// 指定生成Excel檔名稱
		excel.createExcel(fileName);
	}
}

Jakarta POI中最成熟的API就是HSSF。通過HSSF可以用Java程式碼來讀取、寫入和修改Excel檔案。首先我們需要引入包: import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.Region; 接著我們就可以建立Excel檔案了。把資料寫入Excel中必須經過以下步驟: (1)建立workbook物件。 HSSFWorkbook workbook=new HSSFWorkbook(); (2)通過workbook物件建立工作區物件並命名為test excel。 HSSFSheet sheet=workbook.createSheet(“test excel“); (3)由工作區物件建立行物件。 HSSFRow row=sheet.createRow(0); (4)由行物件建立單元格物件。 HSSFCell cell=row.createCell((short)1); (5)把資料寫入將單元格里。 Cell.setCellValue(“this is title”); (6)儲存Excel文件。 // import java.io.FileOutputStream; FileOutputStream out=FileOutputStream(“c:\test.xls”); workbook.write(out);

//將Excel文件儲存到C盤根目錄下test.xls out.close(); 【知識擴充套件】 我們再為大家講解一下如何設定字型和單元格樣式。通過HSSFFont和HSSFCellStyle類設定資料在Excel中顯示的字型、顏色、大小和單元格樣式。設定過程如下: (1)通過HSSFFont類建立字型物件。 HSSFFont font=workbook.createFont(); // 由workbook建立字型 (2)通過font來設定字型屬性。 font.setFontHeightPoints((short)8); //設定字型屬性 font.setFontHeight((short)HSSFFont.BOLDWEIGHT_NORMAL); // 設定字型屬性 font.setColor((short)(HSSFFont.COLOR_RED)); // 設定字型屬性 (3)通過HSSFCellStyle類建立單元格樣式物件。 HSSFCellStyle cellstyle=workbook.createCellStyle(); // 由workbook建立單元格樣式 (4)通過cellstyle來設定樣式屬性。 cellstyle.setFont(font); // 設定樣式屬性 (5)通過HSSFCell類建立單元格物件。 HSSFRow row=workbook.createRow((short)0); HSSFCell cell=row.createCell((short)1); (7)將樣式應用於單元格物件。 cell.setCellStyle(cellstyle); // 使用已建立的樣式