До сих пор XSSFName
не имеет доступа к атрибуту hidden
базового CTDefinedName
. Так что, если нужно, нужно получить этот базовый CTDefinedName
. К сожалению, метод getCTName
имеет только защищенный доступ. Но, к счастью, есть java.lang.reflect
.
Пример:
import java.io.FileInputStream;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedName;
import java.lang.reflect.Method;
class ReadExcelXSSFNameDetails {
public static void main(String[] args) throws Exception {
XSSFWorkbook workbook = (XSSFWorkbook)WorkbookFactory.create(new FileInputStream("./inputFile.xlsm"));
for (XSSFName name : workbook.getAllNames()) {
String nameName = name.getNameName();
Method getCTName = XSSFName.class.getDeclaredMethod("getCTName");
getCTName.setAccessible(true);
CTDefinedName ctName = (CTDefinedName)getCTName.invoke(name);
//System.out.println(ctName);
boolean isHidden = ctName.getHidden();
System.out.println("Found name " + nameName + ". Is this name hidden? " + isHidden);
}
workbook.close();
}
}
Теперь вы можете определить, имеет ли сохраненное имя скрытый атрибут.