1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.FileInputStream;
import java.util.HashSet;
import java.util.Set;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
/** 只读导出官方「微信费率规则ID」Excel 的全部单元格,含合并区域标注。 */
public class DumpExcel {
  public static void main(String[] args) throws Exception {
    String path = args.length > 0 ? args[0] : "docs/huifu/reference/official/wx-fee-rule-id.xlsx";
    try (Workbook workbook = new XSSFWorkbook(new FileInputStream(path))) {
      DataFormatter formatter = new DataFormatter();
      for (int s = 0; s < workbook.getNumberOfSheets(); s++) {
        Sheet sheet = workbook.getSheetAt(s);
        System.out.println("########## SHEET[" + s + "] name=" + sheet.getSheetName()
            + " rows=" + sheet.getLastRowNum() + " ##########");
        Set<String> merged = new HashSet<>();
        for (CellRangeAddress range : sheet.getMergedRegions()) {
          merged.add(range.formatAsString());
        }
        for (int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++) {
          Row row = sheet.getRow(r);
          if (row == null) continue;
          StringBuilder line = new StringBuilder();
          for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
            Cell cell = row.getCell(c);
            if (cell == null) continue;
            String value = formatter.formatCellValue(cell).trim();
            if (value.isEmpty()) continue;
            line.append('[').append((char) ('A' + c)).append(r + 1).append(']').append(value).append(" | ");
          }
          if (line.length() > 0) System.out.println("R" + (r + 1) + ": " + line);
        }
        for (String range : merged) System.out.println("MERGED: " + range);
      }
    }
  }
}