Java表格導出的方式有不少,有前端彈出對話框的形式,有poi操做,有jxl操做,能夠說實現的形式多種多樣。下面我用的只是其中一個poi操做Excel表格,同時能夠在一張表格中生成多個sheet,後端實現,動態指定,無前端操做對話框。前端
記得導入poi相關jar包,下面直接看代碼吧:java
package test; import java.io.OutputStream; import java.util.List; 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; public class ExcelUtils { /** * @Description: 導出Excel * @param workbook * @param sheetNum (sheet的位置,0表示第一個表格中的第一個sheet) * @param sheetTitle (sheet的名稱) * @param headers (表格的列標題) * @param result (表格的數據) * @param out (輸出流) * @throws Exception */ public void exportExcel(HSSFWorkbook workbook, int sheetNum, String sheetTitle, String[] headers, List<List<String>> result, OutputStream out) throws Exception { // 生成一個表格 HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(sheetNum, sheetTitle); // 設置表格默認列寬度爲20個字節 sheet.setDefaultColumnWidth((short) 20); // 生成一個樣式 HSSFCellStyle style = workbook.createCellStyle(); // 設置這些樣式 style.setFillForegroundColor(HSSFColor.PALE_BLUE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 生成一個字體 HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.BLACK.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 把字體應用到當前的樣式 style.setFont(font); // 指定當單元格內容顯示不下時自動換行 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++; } } } }
使用時也很方便:apache
public static void main(String[] args) { try { //excel導出的路徑和名稱 OutputStream out = new FileOutputStream("D:\\test.xls"); //生成兩個sheet,不一樣的數據源和列標題 List<List<String>> data1 = new ArrayList<List<String>>(); List<List<String>> data2 = new ArrayList<List<String>>(); String[] headers1 = { "ID", "年齡","用戶名" }; String[] headers2 = { "ID", "用戶名" }; //注意int等其餘類型轉換成String類型 for (int i = 1; i < 5; i++) { List rowData = new ArrayList(); rowData.add(String.valueOf(i)); rowData.add(String.valueOf(i+20)); rowData.add("小明"+i+"號"); data1.add(rowData); } for (int i = 1; i < 5; i++) { List rowData = new ArrayList(); rowData.add(String.valueOf(i)); rowData.add("小明"+i+"號"); data2.add(rowData); } ExcelUtils eeu = new ExportExcelUtils(); HSSFWorkbook workbook = new HSSFWorkbook(); eeu.exportExcel(workbook, 0, "sheet1", headers1, data1, out); eeu.exportExcel(workbook, 1, "sheet2", headers2, data2, out); //將全部的數據一塊兒寫入,而後再關閉輸入流。 workbook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } }
從上面的調用能夠看出:後端
(1)excel保存的路徑和名稱能夠本身定義;字體
(2)數據源能夠用其餘地方獲取,而後再賦值添加到現有的data中;excel
(3)每一個sheet中的列能夠不一樣,也能夠相同;code
(4)生成的sheet的多少取決於你;ip
好了,上面就是一個簡單實用的excel導出方法,但願你們喜歡。it