使用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);