解讀POI操做之表格導出(生成多個sheet)

    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

相關文章
相關標籤/搜索