此篇介紹使用POI套件建立excel檔案
使用的版本為poi-3.8-20120326
將樣式建立一個lib可供擴展及取用
我把建立時會用到的部分都詳列註解在上面
希望可以協助在使用上有問題的user
如果有需要提示下載的部分
可參考另一篇檔案下載
code如下:
package tester;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.PrintSetup;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelTest {
// 欄位資料
private static String[] head = { "Item", "Quantity", "Price", "Total" };
private static Object[][] detail = { { "A",13,20 },
{ "B", 3, 100 }, { "C", 90, 3 } };
/*
* 建立一個CellStyle的格式Map,可儲存需要用到的各種格式類型
*/
private static Map<String, CellStyle> getStyles(Workbook wb) {
Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
// 欄位樣式
CellStyle style;
// 字體樣式
Font font;
// 設立新字體格式
font = wb.createFont();
//字體樣式
font.setFontName("標楷體");
//字體大小
font.setFontHeightInPoints((short) 20);
//粗體
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
// 設立新欄位格式
style = wb.createCellStyle();
// 欄位水平位置
style.setAlignment(CellStyle.ALIGN_CENTER);
// 欄位垂直位置
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
// 加入字體樣式
style.setFont(font);
styles.put("title", style);
font = wb.createFont();
font.setFontHeightInPoints((short) 13);
// 設定字體顏色
font.setColor(IndexedColors.WHITE.getIndex());
style = wb.createCellStyle();
//底色
style.setFillForegroundColor(IndexedColors.RED.getIndex());
//填滿
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setFont(font);
style.setAlignment(CellStyle.ALIGN_CENTER);
// 自動換行
style.setWrapText(true);
styles.put("head", style);
font = wb.createFont();
font.setFontHeightInPoints((short) 10);
style = wb.createCellStyle();
style.setAlignment(CellStyle.ALIGN_RIGHT);
//設定邊框大小
style.setBorderBottom((short) 1);
style.setBorderTop((short) 1);
style.setBorderLeft((short) 1);
style.setBorderRight((short) 1);
//設定邊框顏色
style.setBottomBorderColor(IndexedColors.BLUE.getIndex());
style.setTopBorderColor(IndexedColors.BLUE.getIndex());
style.setLeftBorderColor(IndexedColors.BLUE.getIndex());
style.setRightBorderColor(IndexedColors.BLUE.getIndex());
style.setFont(font);
styles.put("detail",style);
return styles;
}
public static void main(String[] args) throws IOException {
// 建立一個活頁簿
Workbook wb;
// XSSFWorkbook對應.xlsx檔案,若是97-2003 .xls 使用HSSFWorkbook
wb = new XSSFWorkbook();
Map<String, CellStyle> styles = getStyles(wb);
// 建立工作表
Sheet sheet = wb.createSheet();
// 設定sheet頁面
PrintSetup ps = sheet.getPrintSetup();
// 橫面列印 true
ps.setLandscape(true);
// 頁高
ps.setFitHeight((short) 1);
// 頁高
ps.setFitWidth((short) 1);
//頁首、頁尾 在excel中會再*2.5 變成cm
ps.setHeaderMargin((double)1);
ps.setFooterMargin((double)1.5);
// 列印時水平置中
sheet.setHorizontallyCenter(true);
// 調整為一頁
sheet.setFitToPage(true);
//頁面 上下左右 在excel中會再*2.5 變成cm
sheet.setMargin(sheet.BottomMargin,(short)1);
sheet.setMargin(sheet.TopMargin,(short)1);
sheet.setMargin(sheet.LeftMargin,(short)1);
sheet.setMargin(sheet.RightMargin,(short)1);
// 列、欄
Row row;
Cell cell;
// title
row = sheet.createRow(0);
row.setHeightInPoints((short) 30);
cell = row.createCell(0);
// 設定欄位格式
cell.setCellStyle(styles.get("title"));
// 欄位值
cell.setCellValue("測試標題一");
// 合併欄位
sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$D$1"));
// head
row = sheet.createRow(1);
row.setHeightInPoints((short) 20);
for(int i=0;i<head.length;i++){
cell=row.createCell(i);
cell.setCellValue(head[i]);
cell.setCellStyle(styles.get("head"));
}
//detail
for(int i=0;i<detail.length;i++){
row=sheet.createRow(i+2);
cell=row.createCell(0);
cell.setCellValue((String)detail[i][0]);
cell.setCellStyle(styles.get("detail"));
cell=row.createCell(1);
cell.setCellValue((Integer)detail[i][1]);
cell.setCellStyle(styles.get("detail"));
cell=row.createCell(2);
cell.setCellValue((Integer)detail[i][2]);
cell.setCellStyle(styles.get("detail"));
cell=row.createCell(3);
String fun="B"+(i+3)+"*C"+(i+3);
cell.setCellFormula(fun);
cell.setCellStyle(styles.get("detail"));
}
//儲存檔案
File file=new File("D:/","test.xlsx");
FileOutputStream out=new FileOutputStream(file);
wb.write(out);
out.close();
}
}
產出的excel表如下:

版面配置如下:

沒有留言:
張貼留言