zoukankan      html  css  js  c++  java
  • poi处理excel的合并单元格写的工具类,支持xlsx和xls

    1.判断当前单元格是不是合并单元格

     1 ...
     2     private boolean isMergedRegion(Sheet sheet, int row, int column) {
     3         //获取合并单元格的数量
     4         int sheetMergeCount = sheet.getNumMergedRegions();
     5         //循环合并的单元格
     6         for (int i = 0; i < sheetMergeCount; i++) {
     7             //获取合并单元格对象
     8             CellRangeAddress range = sheet.getMergedRegion(i);
     9             //获取第i个合并单元格的边界
    10             int firstColumn = range.getFirstColumn();
    11             int lastColumn = range.getLastColumn();
    12             int firstRow = range.getFirstRow();
    13             int lastRow = range.getLastRow();
    14             //通过判断边界的大小范围来判断是不是合并单元格
    15             if (row >= firstRow && row <= lastRow) {
    16                 if (column >= firstColumn && column <= lastColumn) {
    17                     return true;
    18                 }
    19             }
    20         }
    21         return false;
    22     }
    23 ...

    2.获取单元格的边界内容

     1 ...
     2     public Map<String, Integer> getMergedRegionRange(Sheet sheet, int row, int column) {
     3         //获取合并单元格的数量
     4         int sheetMergeCount = sheet.getNumMergedRegions();
     5         //循环获取的合并单元格
     6         for (int i = 0; i < sheetMergeCount; i++) {
     7             CellRangeAddress ca = sheet.getMergedRegion(i);
     8             //获取合并单元格的边界
     9             int firstColumn = ca.getFirstColumn();
    10             int lastColumn = ca.getLastColumn();
    11             int firstRow = ca.getFirstRow();
    12             int lastRow = ca.getLastRow();
    13             //如果这个是合并单元格,将内容放在map里面
    14             if (row >= firstRow && row <= lastRow) {
    15                 if (column >= firstColumn && column <= lastColumn) {
    16                     Row fRow = sheet.getRow(firstRow);
    17                     Map<String, Integer> cellRangeMap = new HashMap<>();
    18                     cellRangeMap.put("firstRow", firstRow);
    19                     cellRangeMap.put("lastRow", lastRow);
    20                     cellRangeMap.put("firstColumn", firstColumn);
    21                     cellRangeMap.put("lastColumn", lastColumn);
    22                     return cellRangeMap;
    23                 }
    24             }
    25         }
    26         return null;
    27     }
    28 ...

    3.获取单元格的值

     1 ...
     2     public String getMergedRegionValue(Sheet sheet, int row, int column) {
     3         //获取合并单元格的数量
     4         int sheetMergeCount = sheet.getNumMergedRegions();
     5         //循环获取的合并单元格
     6         for (int i = 0; i < sheetMergeCount; i++) {
     7             CellRangeAddress ca = sheet.getMergedRegion(i);
     8             int firstColumn = ca.getFirstColumn();
     9             int lastColumn = ca.getLastColumn();
    10             int firstRow = ca.getFirstRow();
    11             int lastRow = ca.getLastRow();
    12             if (row >= firstRow && row <= lastRow) {
    13                 if (column >= firstColumn && column <= lastColumn) {
    14                     Row fRow = sheet.getRow(firstRow);
    15                     Cell fCell = fRow.getCell(firstColumn);
    16                     return getCellValue(fCell);
    17                 }
    18             }
    19         }
    20         return null;
    21     }
    22 ...

    4.设置合并单元格

    ...
    int firstRow = Integer.parseInt(((HashMap) topRangeMap).get("firstRow").toString());
    int lastRow = Integer.parseInt(((HashMap) topRangeMap).get("lastRow").toString());
    int firstColumn = Integer.parseInt(((HashMap) topRangeMap).get("firstColumn").toString());
    int lastColumn = Integer.parseInt(((HashMap) topRangeMap).get("lastColumn").toString());
            CellRangeAddress cra = new CellRangeAddress(firstRow, lastRow, firstColumn, lastColumn);
            sheet.addMergedRegion(cra);
    ...
    昔日我曾苍老,如今风华正茂(ง •̀_•́)ง
  • 相关阅读:
    HTTP协议--详解
    汇编语言前五章总结
    [转] vscode C/C++ 插件预定义环境变量(linux)
    C++小细节
    CC++ 如何确定一个变量的类型(恶心的指针)
    Ubuntu下安装tensorflow
    github 上不去
    应用层01-HTTP
    C++ 传递数组引用
    C++ 命令行窗口打印二叉树(图形)
  • 原文地址:https://www.cnblogs.com/lgqrlchinese/p/13080051.html
Copyright © 2011-2022 走看看