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

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_第1张图片


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_第2张图片

你可能感兴趣的:(Java,java,poi,excel)