Apache POI가 있는 셀 참조 문자 식별자로 셀 가져오기
셀 참조로 행에서 셀을 가져오려고 하는데 문제가 있습니다.예를 들어 다음과 같습니다.
row.getCell(CellReference.convertColStringToIndex("B"));
열 인덱스가 다음과 같은 경우에는 잘 작동합니다.1하지만 컬럼이 삭제되었다면,B열 인덱스가 되었습니다.2방법:CellReference.convertColStringToIndex("B")아직 변환 중입니다.1내 칼럼을 얻을 수 없는 경우, 나는 받는 중입니다.null.
그렇다면 문자인 셀 식별자에 따라 행에서 열을 어떻게 가져올 수 있는지가 문제입니다.
CellReference 유틸리티 클래스를 사용하여 도움을 주고 싶을 수 있습니다.Excel 스타일 문자+숫자 참조와 POI 스타일 0 기반 행+열 간 변환을 제공합니다.사용 시 다음과 같은 작업을 수행할 수 있습니다.
Sheet sheet = workbook.getSheet("MyInterestingSheet");
CellReference ref = new CellReference("B12");
Row r = sheet.getRow(ref.getRow());
if (r != null) {
Cell c = r.getCell(ref.getCol());
}
그러면 주어진 Excel 스타일 참조(정의된 경우 null)에서 셀을 찾을 수 있습니다.
여러 행/도메인을 가져오는 경우:
CellReference ref1 = new CellReference("A36"); // First LINE 1
CellReference ref2 = new CellReference("B36");
CellReference ref3 = new CellReference("C36");
CellReference ref4 = new CellReference("D36");
XSSFRow r1 = sheet.getRow(ref1.getRow());
if (r1 != null) {
Cell a36 = r1.getCell(ref1.getCol());
Cell b36 = r1.getCell(ref2.getCol());
Cell c36 = r1.getCell(ref3.getCol());
Cell d36 = r1.getCell(ref4.getCol());
Cell e36 = r1.getCell(ref5.getCol());
AMT1 = a36.getStringCellValue();
AMT2 = b36.getStringCellValue();
AMT3 = c36.getStringCellValue();
AMT4 = d36.getNumericCellValue();
AMT5 = e36.getNumericCellValue();
AMT5A = AMT5.intValue();
}
여기서 r1은 첫 번째 행입니다.이렇게 하면 첫 번째 지정된 행에 있는 xlsx 항목이 아래와 같이 변수(AMTx)에 할당됩니다.변수 지정은 java 파일의 "public class ......" 줄 바로 뒤에 배치합니다.
public static String AMT1;//Line 1
public static String AMT2;
public static String AMT3;
public static Double AMT4;
public static Double AMT5;
public static Integer AMT5A;
Excel xlsx 파일은 셀 내에서 숫자를 이중으로 저장하므로 AMT5A에서 정수로 변환됩니다.
모두: 코드에서는 r1(1행)이 셀이 위치한 실제 행 번호와 정확히 같아야 합니다.이 경우에는 r1이 아니라 r36입니다.모든 r1을 r36으로 변경해주세요.제가 이 실수를 한 것을 양해해 주십시오.
언급URL : https://stackoverflow.com/questions/14155423/get-cell-by-a-cell-reference-letter-identifier-with-apache-poi
'programing' 카테고리의 다른 글
| Python 스타일 - 문자열이 있는 줄 연속? (0) | 2023.06.23 |
|---|---|
| '규칙 '@typescript-eslint/no-use-before-declar'에 대한 정의를 찾을 수 없습니다.eslint(@typescript-eslint/no-use-before-declar)'를 수정하는 방법 (0) | 2023.06.23 |
| 루비에서 명시적으로 반품하는 것이 좋은 스타일입니까? (0) | 2023.06.23 |
| 플러그형 MongoDB 스토리지를 사용하는 Django 문제 (0) | 2023.06.23 |
| 변환합니다.NetCore 대상.넷 프레임워크 (0) | 2023.06.23 |