Как минимум для Office Open XML (*.xlsx
) кодовое имя листа сохраняется в /xl/worksheets/sheet[n].xml
как <sheetPr codeName="TheCodeName"/>
. Поэтому, по крайней мере, используя XSSFSheet
, можно получить это, используя низкоуровневый базовый объект org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet
.
Пример:
Код:
import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
class ExcelGetSheetByCodeName {
private static Sheet getSheetByCodeName(Workbook workbook, String codeName) {
for (Sheet sheet : workbook) {
if (sheet instanceof XSSFSheet) {
XSSFSheet xssfSheet = (XSSFSheet)sheet;
System.out.println(xssfSheet.getCTWorksheet().getSheetPr().getCodeName());
if (codeName.equals(xssfSheet.getCTWorksheet().getSheetPr().getCodeName())) {
return xssfSheet;
}
} else {
System.out.println("only XSSF implemented yet");
}
}
return null;
}
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("SAMPLE.xlsx"));
Sheet sheet = getSheetByCodeName(workbook, "TheCodeName");
System.out.println("found sheet: " + sheet);
}
}
Результат:
axel@arichter:~/Dokumente/JAVA/poi/poi-4.0.1$ java -cp .:./*:./lib/*:./ooxml-lib/* ExcelGetSheetByCodeName
Foo
TheCodeName
found sheet: Name: /xl/worksheets/sheet2.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml