Java Poi操作Excel写入数据并设置style

时间:2024-05-22 21:40:13

1、向Excel中写入数据,并再追加一遍相同的数据

ExcelWriter.writeToExcel方法可以向指定excel表中写入mapList中的数据;

ExcelWriter.addToExcel方法可以向指定excel表中追加mapLit中的数据;

  1. package excelUtils;
  2.     
  3. import java.io.*;
  4. import java.util.*;
  5.     
  6. import org.apache.poi.xssf.usermodel.XSSFCell;
  7. import org.apache.poi.xssf.usermodel.XSSFRow;
  8. import org.apache.poi.xssf.usermodel.XSSFSheet;
  9. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  10.     
  11. public class ExcelWriter {
  12.     
  13.     private static XSSFWorkbook workbook = null;
  14.     
  15.     public static void main(String[] args) {
  16.         String fileDir = "D:/test.xlsx";
  17.         String sheetName = "sheet1";
  18.         String[] titleRow = { "title1", "title2", "title3", "title4", "title5", "title6" };
  19.         
  20.         List<Map<String, String>> mapList = new ArrayList<Map<String, String>>();
  21.         for (int i = 0; i < 5; i++) {
  22.             Map<String, String> map = new HashMap<String, String>();
  23.             map.put(titleRow[0], "" + (i + 1) + "行第1");
  24.             map.put(titleRow[1], "" + (i + 1) + "行第2");
  25.             map.put(titleRow[2], "" + (i + 1) + "行第3");
  26.             map.put(titleRow[3], "" + (i + 1) + "行第4");
  27.             map.put(titleRow[4], "" + (i + 1) + "行第5");
  28.             map.put(titleRow[5], "" + (i + 1) + "行第6");
  29.             mapList.add(map);
  30.         }
  31.         writeToExcel(fileDir, sheetName, titleRow, mapList);
  32.         addToExcel(fileDir, sheetName, mapList);
  33.     }
  34.     
  35.     /**
  36.      *根据标题,mapList写入制定excel表中
  37.      *
  38.      *@param fileDir
  39.      *@param sheetName
  40.      *@param titleRow
  41.      *@param mapList
  42.      */
  43.     public static void writeToExcel(String fileDir, String sheetName, String[] titleRow,
  44.             List<Map<String, String>> mapList) {
  45.         if (!ExcelCreater.fileExist(fileDir)) {
  46.             ExcelCreater.createExcel(fileDir, sheetName, titleRow);
  47.         }
  48.         if (!ExcelCreater.sheetExist(fileDir, sheetName)) {
  49.             ExcelCreater.createSheet(fileDir, sheetName, titleRow);
  50.         }
  51.         writeToExcelRow(fileDir, sheetName, mapList, 1);
  52.     }
  53.     
  54.     /**
  55.      *从第rowId行开始将mapList写入
  56.      *
  57.      *@param fileDir
  58.      *@param sheetName
  59.      *@param mapList
  60.      *@param rowId
  61.      */
  62.     public static void writeToExcelRow(String fileDir, String sheetName, List<Map<String, String>> mapList, int rowId) {
  63.         File file = new File(fileDir);
  64.         FileOutputStream out = null;
  65.         try {
  66.             workbook = new XSSFWorkbook(new FileInputStream(file));
  67.             XSSFSheet sheet = workbook.getSheet(sheetName);
  68.             // 获取表格的总行数
  69.             // introwCount = sheet.getLastRowNum() + 1; // 需要加一
  70.             // 获取表头的列数
  71.             int columnCount = sheet.getRow(0).getLastCellNum();
  72.             
  73.             XSSFRow titleRow = sheet.getRow(0);
  74.             if (titleRow != null) {
  75.                 for (Map<String, String> map : mapList) {
  76.                     XSSFRow newRow = sheet.createRow(rowId++);
  77.                     for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
  78.                         String mapKey = titleRow.getCell(columnIndex).toString().trim();
  79.                         XSSFCell cell = newRow.createCell(columnIndex);
  80.                         cell.setCellValue(map.get(mapKey) == null ? "" : map.get(mapKey).toString());
  81.                     }
  82.                 }
  83.             }
  84.             
  85.             out = new FileOutputStream(fileDir);
  86.             workbook.write(out);
  87.         } catch (Exception e) {
  88.             e.printStackTrace();
  89.         } finally {
  90.             try {
  91.                 if (out != null) {
  92.                     out.close();
  93.                 }
  94.             } catch (IOException e) {
  95.                 e.printStackTrace();
  96.             }
  97.         }
  98.     }
  99.     
  100.     /**
  101.      *添加到已存在excel
  102.      *
  103.      *@param fileDir
  104.      *@param sheetName
  105.      *@param mapList
  106.      */
  107.     public static void addToExcel(String fileDir, String sheetName, List<Map<String, String>> mapList) {
  108.         File file = new File(fileDir);
  109.         FileOutputStream out = null;
  110.         try {
  111.             workbook = new XSSFWorkbook(new FileInputStream(file));
  112.             XSSFSheet sheet = workbook.getSheet(sheetName);
  113.   
  114.             int rowId = sheet.getLastRowNum() + 1; // 获取表格的总行数
  115.             int columnCount = sheet.getRow(0).getLastCellNum();// 获取表头的列数
  116.   
  117.             XSSFRow titleRow = sheet.getRow(0);
  118.             if (titleRow != null) {
  119.                 for (Map<String, String> map : mapList) {
  120.                     XSSFRow newRow = sheet.createRow(rowId++);
  121.                     for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
  122.                         String mapKey = titleRow.getCell(columnIndex).toString().trim();
  123.                         XSSFCell cell = newRow.createCell(columnIndex);
  124.                         cell.setCellValue(map.get(mapKey) == null ? "" : map.get(mapKey).toString());
  125.                     }
  126.                 }
  127.             }
  128.             
  129.             out = new FileOutputStream(fileDir);
  130.             workbook.write(out);
  131.         } catch (Exception e) {
  132.             e.printStackTrace();
  133.         } finally {
  134.             try {
  135.                 if (out != null) {
  136.                     out.close();
  137.                 }
  138.             } catch (IOException e) {
  139.                 e.printStackTrace();
  140.             }
  141.         }
  142.     }
  143.     
  144.     /**
  145.      *向指定单元格写入数据
  146.      *
  147.      *@param fileDir
  148.      *@param sheetName
  149.      *@param value
  150.      *@param rowId
  151.      *@param columnId
  152.      *@throws Exception
  153.      */
  154.     public static void writeToExcelCell(String fileDir, String sheetName, String value, int rowId, int columnId) {
  155.         File file = new File(fileDir);
  156.         FileOutputStream out = null;
  157.         try {
  158.             workbook = new XSSFWorkbook(new FileInputStream(file));
  159.             XSSFSheet sheet = workbook.getSheet(sheetName);
  160.             XSSFRow row = sheet.getRow(rowId);
  161.             if (row != null) {
  162.                 XSSFCell cell = row.getCell(columnId);
  163.                 if (cell != null) {
  164.                     cell.setCellValue(value == null ? null : value);
  165.                 } else {
  166.                     XSSFCell newCell = row.createCell(columnId);
  167.                     newCell.setCellValue(value == null ? null : value);
  168.                 }
  169.             }
  170.             out = new FileOutputStream(fileDir);
  171.             workbook.write(out);
  172.         } catch (Exception e) {
  173.             e.printStackTrace();
  174.         } finally {
  175.             try {
  176.                 if (out != null) {
  177.                     out.close();
  178.                 }
  179.             } catch (IOException e) {
  180.                 e.printStackTrace();
  181.             }
  182.         }
  183.     }
  184.     
  185. }

    2、写入结果


    Java Poi操作Excel写入数据并设置style


    3、设置style

    1. package excelUtils;
    2.     
    3. import java.awt.Color;
    4. import java.io.File;
    5. import java.io.FileInputStream;
    6. import java.io.FileOutputStream;
    7. import java.io.IOException;
    8. import java.util.HashMap;
    9. import java.util.Map;
    10.     
    11. import org.apache.poi.ss.usermodel.FillPatternType;
    12. import org.apache.poi.ss.usermodel.HorizontalAlignment;
    13. import org.apache.poi.ss.usermodel.VerticalAlignment;
    14. import org.apache.poi.xssf.usermodel.XSSFSheet;
    15. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    16. import org.apache.poi.xssf.usermodel.XSSFCell;
    17. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    18. import org.apache.poi.xssf.usermodel.XSSFColor;
    19. import org.apache.poi.xssf.usermodel.XSSFFont;
    20. import org.apache.poi.xssf.usermodel.XSSFRow;
    21.     
    22. public class ExcelStyle {
    23.     
    24.     private static XSSFWorkbook workbook = null;
    25.     
    26.     private static Color light_green = new Color(198, 224, 180);
    27.     private static Color light_orange = new Color(248, 203, 173);
    28.     private static Color light_blue = new Color(180, 198, 231);
    29.     private static Color light_yellow = new Color(255, 230, 153);
    30.     private static Color light_gray = new Color(217, 217, 217);
    31.     
    32.     public static void main(String[] args){
    33.         String fileDir = "D:/test.xlsx";
    34.         String sheetName = "sheet1";
    35.         
    36.         int[] columnWidth = { 10, 20, 30, 10, 20, 30 };//每列列宽
    37.         setExcelSimpleStyle(fileDir, sheetName, columnWidth);
    38.     }
    39.     
    40.     /**
    41.      *只设置列宽, 颜色按默认绿橙蓝排列,居中
    42.      *
    43.      *@param fileDir
    44.      *@param sheetName
    45.      *@param columnWidth
    46.      *@return
    47.      */
    48.     public static boolean setExcelSimpleStyle(String fileDir, String sheetName, int[] columnWidth) {
    49.         String[] colors = { "light_green", "light_orange", "light_blue" };
    50.         boolean inCenter = true;
    51.         if (!ExcelCreater.fileExist(fileDir)) {
    52.             return false;
    53.         }
    54.         if (!ExcelCreater.sheetExist(fileDir, sheetName)) {
    55.             return false;
    56.         }
    57.         setStyle(fileDir, sheetName, columnWidth, colors, inCenter);
    58.         return true;
    59.     }
    60.     
    61.     /**
    62.      *判断是否存在,设置列宽,颜色,居中,返回是否设置成功
    63.      *
    64.      *@param fileDir
    65.      *@param sheetName
    66.      *@param columnWidth
    67.      *@param colors
    68.      *@param inCenter
    69.      */
    70.     public static boolean setExcelStyle(String fileDir, String sheetName, int[] columnWidth, String[] colors,
    71.             boolean inCenter) {
    72.         
    73.         if (!ExcelCreater.fileExist(fileDir)) {
    74.             return false;
    75.         }
    76.         if (!ExcelCreater.sheetExist(fileDir, sheetName)) {
    77.             return false;
    78.         }
    79.         setStyle(fileDir, sheetName, columnWidth, colors, inCenter);
    80.         return true;
    81.     }
    82.     
    83.     /**
    84.      *设置列宽,颜色,居中
    85.      *
    86.      *@param fileDir
    87.      *@param sheetName
    88.      *@param columnWidth
    89.      *@param colors
    90.      *@param inCenter
    91.      */
    92.     public static void setStyle(String fileDir, String sheetName, int[] columnWidth, String[] colors,
    93.             boolean inCenter) {
    94.     
    95.         FileOutputStream out = null;
    96.         File file = new File(fileDir);
    97.         try {
    98.             workbook = new XSSFWorkbook(new FileInputStream(file));
    99.             XSSFSheet sheet = workbook.getSheet(sheetName);
    100.             setColumnWidth(sheet, columnWidth);
    101.             
    102.             int rowCount = sheet.getLastRowNum() + 1;
    103.             int columnCount = sheet.getRow(0).getLastCellNum();
    104.             
    105.             Map<Integer, XSSFCellStyle> styleMap = new HashMap<>();
    106.             for (int colorIndex = 0; colorIndex < colors.length; colorIndex++) {
    107.                 XSSFCellStyle style = getStyle(colors[colorIndex], inCenter, null, 11);
    108.                 styleMap.put(colorIndex, style);
    109.             }
    110.             
    111.             for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
    112.                 XSSFRow newRow = sheet.getRow(rowIndex);
    113.                 for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
    114.                     XSSFCell cell = newRow.getCell(columnIndex);
    115.                     cell.setCellStyle(styleMap.get(columnIndex % styleMap.size()));
    116.                 }
    117.             }
    118.             
    119.             out = new FileOutputStream(fileDir);
    120.             workbook.write(out);
    121.         } catch (Exception e) {
    122.             e.printStackTrace();
    123.         } finally {
    124.             try {
    125.                 if (out != null) {
    126.                     out.close();
    127.                 }
    128.             } catch (IOException e) {
    129.                 e.printStackTrace();
    130.             }
    131.         }
    132.     }
    133.     
    134.     /**
    135.      *设置每行高度
    136.      *
    137.      *@param sheet
    138.      *@param rowHeight
    139.      */
    140.     public static void setRowHeight(XSSFSheet sheet, int rowHeight) {
    141.         sheet.setDefaultRowHeight((short) rowHeight);
    142.     }
    143.     
    144.     /**
    145.      *分别设置每一列宽度,若只有一个值,全部设为此值
    146.      *
    147.      *@param sheet
    148.      *@param columnWidth
    149.      */
    150.     public static void setColumnWidth(XSSFSheet sheet, int[] columnWidth) {
    151.         if (columnWidth.length == 1) {
    152.             sheet.setDefaultColumnWidth(columnWidth[0]);
    153.         } else {
    154.             for (int i = 0; i < columnWidth.length; i++) {
    155.                 sheet.setColumnWidth(i, columnWidth[i] * 256);
    156.             }
    157.         }
    158.     }
    159.     
    160.     /**
    161.      *获得制定颜色字体居中的style
    162.      *
    163.      *@param color
    164.      *@param inCenter
    165.      *@param fontName
    166.      *@param fontHeight
    167.      */
    168.     public static XSSFCellStyle getStyle(String color, boolean inCenter, String fontName, int fontHeight) {
    169.         XSSFCellStyle style = workbook.createCellStyle();
    170.         if (color != null && !color.equals("")) {
    171.             setStyleColor(style, color);
    172.         }
    173.         if (inCenter == true) {
    174.             setAlignment(style);
    175.         }
    176.         if (fontName != null && !fontName.equals("")) {
    177.             setStyleFont(style, fontName, fontHeight);
    178.         }
    179.         return style;
    180.     }
    181.     
    182.     /**
    183.      *设置style的颜色,目前五种颜色可选
    184.      *
    185.      *@param style
    186.      *@param color
    187.      */
    188.     public static void setStyleColor(XSSFCellStyle style, String color) {
    189.         if (color.equals("light_green")) {
    190.             style.setFillForegroundColor(new XSSFColor(light_green));
    191.         }
    192.         if (color.equals("light_orange")) {
    193.             style.setFillForegroundColor(new XSSFColor(light_orange));
    194.         }
    195.         if (color.equals("light_blue")) {
    196.             style.setFillForegroundColor(new XSSFColor(light_blue));
    197.         }
    198.         if (color.equals("light_yellow")) {
    199.             style.setFillForegroundColor(new XSSFColor(light_yellow));
    200.         }
    201.         if (color.equals("light_gray")) {
    202.             style.setFillForegroundColor(new XSSFColor(light_gray));
    203.         }
    204.         style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    205.     }
    206.     
    207.     /**
    208.      *设置style字体
    209.      *
    210.      *@param style
    211.      *@param fontName
    212.      *@param fontHeight
    213.      */
    214.     public static void setStyleFont(XSSFCellStyle style, String fontName, int fontHeight) {
    215.         XSSFFont font = workbook.createFont();
    216.         font.setFontName(fontName);
    217.         font.setFontHeight(fontHeight);
    218.         style.setFont(font);
    219.     }
    220.     
    221.     /**
    222.      *设置style水平垂直居中
    223.      *
    224.      *@param style
    225.      */
    226.     public static void setAlignment(XSSFCellStyle style) {
    227.         style.setAlignment(HorizontalAlignment.CENTER);// 水平居中
    228.         style.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
    229.     }
    230.     
    231. }

      4、最终结果


      Java Poi操作Excel写入数据并设置style