1. 程式人生 > >POI導出excel文件樣式

POI導出excel文件樣式

exp alignment 字符串 arraylist void rac private 數字 n)

需求:

  公司業務和銀行掛鉤,各種形式的數據之間交互性比較強,這就涉及到了存儲形式之間的轉換

  比如數據庫數據與excel文件之間的轉換


解決:

  我目前使用過的是POI轉換數據庫和文件之間的數據,下邊上代碼

package org.triber.portal.model.area;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; public class AreaExcelUtil { /** * 導出excel * @param tableTileCH 表中文字段數組 * @param fileName 文件全路徑名 * @param list 數據集 * @param tableTileEN 映射字段集 */ public void
exportExcel (String[] tableTileCH, String fileName, List<?> list, String[] tableTileEN){ //文件不存在則創建文件 File file=new File(fileName); if(!file.exists()) { try { file.createNewFile(); } catch (IOException e) { System.out.println(
"failed to create file."); e.printStackTrace(); } } OutputStream out= null; try { out = new FileOutputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } //創建工作簿 HSSFWorkbook workbook=new HSSFWorkbook(); HSSFFont f=workbook.createFont(); f.setBold(true); f.setFontName("宋體"); f.setColor((short)100); HSSFCellStyle style = workbook.createCellStyle(); // 設置這些樣式 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 // 背景色 style.setFillForegroundColor(HSSFColor.YELLOW.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillBackgroundColor(HSSFColor.YELLOW.index); // 設置邊框 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 自動換行 style.setWrapText(true); HSSFSheet sheet=workbook.createSheet("shoot1"); sheet.setDefaultColumnWidth((short) 15); //這裏很關鍵,不設置這裏導出的列寬窄,數據不正確 /** * 寫入數據 */ HSSFRow row=sheet.createRow(0);//創建一行 row.setRowStyle(style); String str = ""; //生成列名 for (int i = 0; i < tableTileCH.length; i++) { //excel的格子單元 一行 HSSFCell cell = row.createCell(i); cell.setCellValue(tableTileCH[i]); } //生成列值 for (int i = 0; i < list.size(); i++) { HSSFRow dataRow = sheet.createRow(i + 1); for (int m = 0; m < tableTileCH.length; m++) { Map<String, Object> map = (Map<String, Object>) list.get(i); HSSFCell dataCell = dataRow.createCell(m); str = String.valueOf( map.get(tableTileEN[m])) == null ? "": String.valueOf(map.get(tableTileEN[m])); str = str.equals("null") ? "" : str; dataCell.setCellValue(str); } } //寫文件 try { workbook.write(out); } catch (IOException e) { e.printStackTrace(); } finally{ try { //關閉流 out.flush(); out.close(); workbook.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 從Excel此向數據庫導入數據 */ public List<Area> importExcel(FileInputStream fileInputStream) { List<Area> list = new ArrayList<Area>(); try { //創建Excel工作薄 HSSFWorkbook hwb = new HSSFWorkbook(fileInputStream); //得到第一個工作表 HSSFSheet sheet = hwb.getSheetAt(0); HSSFRow row = null; //表示工作表的總數 for(int i = 0; i < hwb.getNumberOfSheets(); i++){ sheet = hwb.getSheetAt(i); //行數 for(int j = 1; j < sheet.getLastRowNum(); j++){ row = sheet.getRow(j); Area area = new Area(); HSSFCell areaId = row.getCell(0); area.setAreaId(getCellValue(areaId)); HSSFCell areaDscr = row.getCell(1); area.setAreaDscr(getCellValue(areaDscr)); HSSFCell level = row.getCell(2); area.setLevel(getCellValue(level)); HSSFCell beginTime = row.getCell(3); area.setBeginTime(getCellValue(beginTime)); HSSFCell closeTime = row.getCell(4); area.setCloseTime(getCellValue(closeTime)); HSSFCell entryDis = row.getCell(5); if("是".equals(getCellValue(entryDis) )){ area.setEntryDis("1"); }else { area.setEntryDis("0");} HSSFCell entryCode = row.getCell(6); area.setEntryCode(getCellValue(entryCode)); HSSFCell oldCode = row.getCell(7); area.setOldCode(getCellValue(oldCode)); HSSFCell oldId = row.getCell(8); area.setOldId(getCellValue(oldId)); HSSFCell reviseTime = row.getCell(9); area.setReviseTime(getCellValue(reviseTime)); HSSFCell state = row.getCell(10); area.setState(getCellValue(state)); HSSFCell bigCollCode = row.getCell(11); area.setBigCollCode(getCellValue(bigCollCode)); //生成結果集 list.add(area); } } } catch (IOException e) { e.printStackTrace(); } return list; } /** * 判斷從Excel文件中解析出來數據的格式 * @param cell 待解析的單元格 * @return 字符串 */ private static String getCellValue(HSSFCell cell){ String value = null; if(null!=cell) { switch (cell.getCellType()) { //字符串 case HSSFCell.CELL_TYPE_STRING: { value = cell.getRichStringCellValue().getString(); break; } //數字 case HSSFCell.CELL_TYPE_NUMERIC: { if (HSSFDateUtil.isCellDateFormatted(cell)) { //如果是date類型則 ,獲取該cell的date值 Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); value = format.format(date); } else { long dd = (long) cell.getNumericCellValue(); value = dd + ""; } break; } case HSSFCell.CELL_TYPE_BLANK: { value = ""; break; } case HSSFCell.CELL_TYPE_FORMULA: { value = String.valueOf(cell.getCellFormula()); break; } //boolean型值 case HSSFCell.CELL_TYPE_BOOLEAN: { value = String.valueOf(cell.getBooleanCellValue()); break; } case HSSFCell.CELL_TYPE_ERROR: { value = String.valueOf(cell.getErrorCellValue()); break; } default: break; } } return value; } }

總結:

  以上就是POI導入導出的相關代碼,親測可用!

  

POI導出excel文件樣式