gpt4 book ai didi

java - 如何使用Docx4j获取XSLX工作表最新行号和最新列号

转载 作者:行者123 更新时间:2023-12-01 17:22:14 29 4
gpt4 key购买 nike

我在 eclipse 中使用 Docx4j 来读取 XSLX 文件。我想从我的 WorksheetPart 中获取表格的绝对大小。

例如,如果我的单元格 A3B3D5 带有值,我想得到:

  • latestColumn = 4(而不是 3)
  • latestRow = 5(而不是 2)

有没有办法轻松做到这一点?在 WorksheetPart 对象中,此信息似乎丢失。

最佳答案

可以获取最新行,但不能获取最新列(您需要根据单元格名称来计算它)。

更详细地说,这是我为解决此问题所做的示例。

您可以这样获取文件:

InputStream is = new FileInputStream("Path/to/my/file.xlsx"); 
SpreadsheetMLPackage xlsxPackage = SpreadsheetMLPackage.load(is);
WorkbookPart wb = xlsxPackage.getWorkbookPart();

假设我们要处理文件的第一张表:

int indexSheet = 0;
List<org.xlsx4j.sml.Row> rowsList = wb.getWorksheet(indexSheet).getContents().getSheetData().getRow();

然后,要获取最新行,您可以使用 getR,它会为您提供相应的 Excel 行号:

Long lastRowIndex = rowsList.get(rowsList.size() - 1).getR();

要获取最新的列号,您需要做更多工作。首先,您需要一种将列名转换为整数的方法(例如,AB 为 28)。你可以这样做:

private Integer computeColumnIndex(String cellName) {

String columnLetters = cellName.replaceAll("\\d","");

double sum = Double.valueOf(0);
int len = columnLetters.length();
for(int i = 0; i < len; i++) {
sum += (columnLetters.charAt(i) - 'A' + 1)*Math.pow(26, len-i-1) ;
}

return (int)sum;
};

然后,对于每一行,您可以计算该行最新单元格的columnIndex并保留最大的:

int lastColumnIndex = 1;
for(org.xlsx4j.sml.Row row: rowsList) {

String cellName = Iterables.getLast(row.getC()).getR();
int columnIndex = computeColumnIndex(cellName);

lastColumnIndex = Math.max(lastColumnIndex, columnIndex);
}

关于java - 如何使用Docx4j获取XSLX工作表最新行号和最新列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61272054/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com