廢話不多說直接上代碼
/**
* @Title: exportExcel
* @Description: 導出Excel的方法
* @param workbook
* @param sheetNum (sheet的位置,0表示第一個表格中的第一個sheet)
* @param sheetTitle (sheet的名稱)
* @param headers (表格的標題)
* @param result (表格的數據)
* @param out (輸出流)
* @throws Exception
*/
public Boolean exportExcel(HSSFWorkbook workbook, int sheetNum,
String sheetTitle, String[] headers, List<List<String>> result,
OutputStream out) {
Boolean res = false ;
try{
// 生成一個表格
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(sheetNum, sheetTitle);
// 設置表格默認列寬度爲20個字節
sheet.setDefaultColumnWidth((short) 20);
// 生成一個樣式
CellStyle style = workbook.createCellStyle();
// 設置這些樣式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setBorderRight(BorderStyle.THIN);
style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderLeft(BorderStyle.THIN);
style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderTop(BorderStyle.THIN);
style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBorderBottom(BorderStyle.THIN);
style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
/* Font dataFont = workbook.createFont();
dataFont.setFontName("Arial");
dataFont.setFontHeightInPoints((short) 10);
style.setFont(dataFont);
style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());*/
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 生成一個字體
Font headerFont = workbook.createFont();
headerFont.setFontName("Arial");
headerFont.setFontHeightInPoints((short) 10);
headerFont.setBold(true);
headerFont.setColor(IndexedColors.WHITE.getIndex());
// 把字體應用到當前的樣式
style.setFont(headerFont);
// 指定當單元格內容顯示不下時自動換行
style.setWrapText(true);
// 產生表格標題行
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell((short) i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text.toString());
}
// 遍歷集合數據,產生數據行
if (result != null) {
int index = 1;
for (List<String> m : result) {
row = sheet.createRow(index);
int cellIndex = 0;
for (String str : m) {
HSSFCell cell = row.createCell((short) cellIndex);
cell.setCellValue(str.toString());
cellIndex++;
}
index++;
}
}
res = true;
}catch (Exception e){
e.printStackTrace();
}
return res;
}
測試代碼:
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
OutputStream out = new FileOutputStream("D:\\test.xls");
List<List<String>> data = new ArrayList<List<String>>();
for (int i = 1; i < 5; i++) {
List rowData = new ArrayList();
rowData.add(String.valueOf(i));
rowData.add("東霖柏鴻");
data.add(rowData);
}
String[] headers = { "ID", "用戶名" };
ExportExcelUtils eeu = new ExportExcelUtils();
HSSFWorkbook workbook = new HSSFWorkbook();
eeu.exportExcel(workbook, 0, "採收計劃信息", headers, data, out);
eeu.exportExcel(workbook, 1, "人員配置", headers, data, out);
eeu.exportExcel(workbook, 2, "物資配置", headers, data, out);
//原理就是將所有的數據一起寫入,然後再關閉輸入流。
workbook.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
效果圖如下: