1、最近根據客戶需求,需要生成要求的excell 格式
索性研究了下用POI 生成這個excel的功能,poi可以合併單元格(合併列,全並行)及字體,邊框等,能滿足大部分格式樣式,寫了個簡單的測試列子,記錄下,以便後續查閱,也給有需要的人蔘考。
生成生報表文件格式需求如下
報表本身簡單,中間涉及到合併單元格,答案多選,及答案列下面ABCD選項要填入對答案下面對應列,如:
寫了個測試例子,貼上代碼:
package test.zhang.com;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
public class Test {
/**
* POI版本是3.6
*
* @param args
*/
public static void main(String[] args) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet name");
sheet.addMergedRegion(new CellRangeAddress(1, //從2行開始
2, //到3行結束(合併1到2行)
1, //從start列開始
1 //到第end列結束(合併start到end之間的列)
));
HSSFRow row = sheet.createRow(1);
HSSFCell cell = row.createCell(1);
cell.setCellValue("合併2,3行");
// 1.生成字體對象
HSSFFont font = wb.createFont();
font.setFontHeightInPoints((short) 10);
font.setFontName("新宋體");
font.setColor(HSSFColor.BLUE.index);
font.setBoldweight((short) 0.8);
// 2.生成樣式對象
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setFont(font); // 調用字體樣式對象
style.setWrapText(true);
// 增加表格邊框的樣式 例子
style.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);
style.setTopBorderColor(HSSFColor.GOLD.index);
style.setLeftBorderColor(HSSFColor.PLUM.index);
// 3.單元格應用樣式
cell.setCellStyle(style);
int start = 5;
int end = start + 4;
for(int tnum = 0;tnum < 3;tnum++){
sheet.addMergedRegion(new CellRangeAddress(0, //從0行開始
0, //到0行結束(就是不合並行)
start, //從start列開始
end //到第end列結束(合併start到end之間的列)
));
start = end + 2;//end + 1 列不合並
end = start + 4;//從end + 2 行開始合併(包括end + 2行)合併5個列
}
HSSFCellStyle style0 = wb.createCellStyle();
style0.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style0.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFRow row0 = sheet.createRow(0);
for(int i = 0;i < 25;i ++){
HSSFCell cell00 = row0.createCell(i);
cell00.setCellValue("test" + i);
cell00.setCellStyle(style0);
}
// 一下代碼表示在D3 cell 插入一段字符串
HSSFRow row2 = sheet.createRow(2);
HSSFCell cell23 = row2.createCell(3);
cell23.setCellValue("我就是個測試值 ");
HSSFCell cell22 = row2.createCell(2);
cell22.setCellValue(new HSSFRichTextString("啦啦撒哈拉"));
// 生成文件
FileOutputStream fileOut = new FileOutputStream("test.xls");
wb.write(fileOut);
fileOut.close();
}
}
運行生成文件內容:
基本滿足要求,其它把ABCD填入對應列就好實現了。