ユーザーが幾何学的形状に関する情報を入力するこのExcelシートがあります。ご覧のとおり、セル C:3 には「Shape」という名前が付けられており、値は三角形です。
コードの最初の部分でセルの名前を取得し、次のブロックで特定のセルまたは範囲内の値を出力できます。String cname にハードコーディングするのではなく、最初のコードがプルした名前を渡すことができるようにしたいと考えています。言い換えれば、文字列 cname は、最初のループがプルしたすべての値と等しくなければなりません。おそらく、ネストされたループですか?
パブリッククラスRangeSetter {
public static void main(String[] args) throws IOException {
// File Location
FileInputStream file = new FileInputStream(new File("test2.xls"));
HSSFWorkbook wb = new HSSFWorkbook(file); // retrieve workbook
// This part of the code pulls all the names of the cells
int NameTotalNumber = wb.getNumberOfNames();
for (int NameIndex = 0; NameIndex < NameTotalNumber; NameIndex++) {
Name nameList = wb.getNameAt(NameIndex);
System.out.println("AliasName: " + nameList.getNameName());
}
// This part reads a cell depending of the name
// This is string has the name of the cell I want to read
String cname = "Shape";
// Retrieve the named range
int namedCellIdx = wb.getNameIndex(cname);
Name aNamedCell = wb.getNameAt(namedCellIdx);
AreaReference[] arefs = AreaReference.generateContiguous(aNamedCell
.getRefersToFormula());
for (int i = 0; i < arefs.length; i++) {
// Only get the corners of the Area
// (use arefs[i].getAllReferencedCells() to get all cells)
CellReference[] crefs = arefs[i].getAllReferencedCells();
for (int j = 0; j < crefs.length; j++) {
// Check it turns into real stuff
Sheet s = wb.getSheet(crefs[j].getSheetName());
Row r = s.getRow(crefs[j].getRow());
Cell c = r.getCell(crefs[j].getCol());
if (c != null) {
switch (c.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(c.getStringCellValue());
}
}
}
}
}
}