經過poi的XSSF實現生成excel文件

maven導入依賴jar包:java

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.6</version>
        </dependency>

java代碼:apache

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Demo {

    public static void main(String[] args) {
        // 文件內容
        List<Object[]> rows = new ArrayList<Object[]>();
        rows.add(new String[] { "編號", "姓名", "成績" });
        rows.add(new Object[] { 1001, "張三", 87.5F });
        rows.add(new Object[] { 1002, "李四", 99.5F });
        rows.add(new Object[] { 1003, "王五", null });
        rows.add(new Object[] { 1004, "小六", 59F });

        // 文件路徑
        String folderPath = "E:\\tmp";

        // 文件名稱
        String fileName = "學生分數";

        // 生成文件
        new Demo().createExcelFile(rows, folderPath, fileName);
    }

    /**
     * 根據[文件內容&文件路徑&文件名稱],生成一個excel文件
     */
    private void createExcelFile(List<Object[]> rows, String folderPath, String fileName) {
        try {
            // 建立一個Workbook
            XSSFWorkbook wb = new XSSFWorkbook();

            // 建立一個Sheet
            XSSFSheet sheet = wb.createSheet(fileName);

            // 樣式1:設置列寬
            sheet.setColumnWidth(0, 2000); // 第一列的寬度爲2000
            sheet.setColumnWidth(1, 3000); // 第二列的寬度爲3000

            // 樣式1:設置單元格背景
            CellStyle titleStyle = wb.createCellStyle();
            titleStyle.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());
            titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);

            // 樣式1:設置單元格邊框
            titleStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); // 下邊框
            titleStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);// 左邊框
            titleStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);// 上邊框
            titleStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);// 右邊框

            // 樣式1:設置單元格字體
            Font font = wb.createFont();
            // font.setColor((short) 42); // 設置字體顏色
            font.setColor(HSSFColor.GREEN.index); // XSSFColor中未找到顏色和short數值的映射,使用HSSFColor來定位顏色的short值
            font.setFontName("黑體"); // 設置字體
            font.setFontHeightInPoints((short) 12);// 設置字體大小
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 粗體顯示
            titleStyle.setFont(font);

            // 樣式1:設置單元格居中
            titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

            // 樣式2:設置單元格居中
            CellStyle contentStyle = wb.createCellStyle();
            contentStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

            // 遍歷輸出每行
            for (int i = 0; i < rows.size(); i++) {
                // 建立一個row
                XSSFRow row = sheet.createRow(i);

                // 每一行的數據
                Object[] rowData = rows.get(i);

                // 遍歷生成每一個單元格
                for (int j = 0; j < rowData.length; j++) {
                    // 建立一個cell
                    XSSFCell cell = row.createCell(j);

                    // 樣式:設置單元格樣式
                    if (i == 0) {
                        cell.setCellStyle(titleStyle);// 使用樣式1
                    } else {
                        cell.setCellStyle(contentStyle);// 使用樣式2
                    }

                    // 若是爲空,就不作設值處理
                    if (null == rowData[j]) {
                        continue;
                    }

                    // 設值處理:假設只有四種類型的數據,若是還有其餘類型,根據須要,作格式轉換
                    // String類型數值
                    if (rowData[j].getClass() == String.class) {
                        cell.setCellValue((String) rowData[j]);
                    }
                    // double類型數值
                    else if (rowData[j].getClass() == double.class || rowData[j].getClass() == Double.class) {
                        cell.setCellValue((Double) rowData[j]);
                    }
                    // float類型數值
                    else if (rowData[j].getClass() == float.class || rowData[j].getClass() == Float.class) {
                        cell.setCellValue((Float) rowData[j]);
                    }
                    // integer類型數值
                    else if (rowData[j].getClass() == int.class || rowData[j].getClass() == Integer.class) {
                        cell.setCellValue((Integer) rowData[j]);
                    }
                }
            }

            // 文件路徑
            String filePath = folderPath + File.separator + fileName + ".xls";// 含文件名的全路徑,若是是2007及之後的版本,後綴可用.xlsx,向前兼容
            File file = new File(filePath);

            // 若是父目錄不存在,建立父目錄
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            // 若是已存在,刪除舊文件
            if (file.exists()) {
                file.delete();
            }

            // 將excel內容寫入到文件當中
            file.createNewFile();
            FileOutputStream fileOut = new FileOutputStream(file);
            wb.write(fileOut);
            fileOut.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
相關文章
相關標籤/搜索