Solange ich als Java-liebender SIer arbeite, der Systeme an japanische Unternehmen liefert, die Excel lieben, ist Apache POI unvermeidlich. POI hat eine Klasse (Schnittstelle) namens "Zelle", die Excel-Zellen abstrahiert, aber es ist überraschend schwierig, Werte aus dieser "Zelle" abzurufen. Insbesondere ist es notwendig, Methoden gemäß dem Anzeigeformat von __ Zellen (CellType
) aufzurufen, und wenn eine Methode aufgerufen wird, die nicht mit CellType
übereinstimmt, wird sofort eine Ausnahme __ ausgelöst. Wurde es gemacht (´ ´ ω ・ `)
Aus diesem Grund habe ich beschlossen, eine Dienstprogrammmethode __ vorzubereiten, mit der der Zellenwert unabhängig von __CellType
transparent abgerufen werden kann. Die einfachen Spezifikationen sind wie folgt.
String # valueOf
oder was auch immer du magst.
--Eine Ausnahme für nicht unterstützte "FEHLER" und "FORMEL" auslösennull
Nicht sicher. Das heißt, wenn das Argument "null" ist, wird "NullPointerException" ausgelöst. Eine Ausnahme wird auch gemacht, wenn eine Zelle vom Typ "CellType", die vom POI nicht unterstützt wird, für alle Fälle als Argument übergeben wird.package my.excel;
import java.util.Objects;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
final public class CellUtils {
public static Object getCellValue(Cell cell) {
Objects.requireNonNull(cell, "cell is null");
CellType cellType = cell.getCellTypeEnum();
if (cellType == CellType.BLANK) {
return null;
} else if (cellType == CellType.BOOLEAN) {
return cell.getBooleanCellValue();
} else if (cellType == CellType.ERROR) {
throw new RuntimeException("Error cell is unsupported");
} else if (cellType == CellType.FORMULA) {
throw new RuntimeException("Formula cell is unsupported");
} else if (cellType == CellType.NUMERIC) {
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue();
} else {
return cell.getNumericCellValue();
}
} else if (cellType == CellType.STRING) {
return cell.getStringCellValue();
} else {
throw new RuntimeException("Unknow type cell");
}
}
}
Verwenden wir es tatsächlich (´ ´ ω ・ `) Bereiten Sie zuerst die folgende sample.xlsx
vor.
Schreiben Sie danach den folgenden Code und prüfen Sie, ob er korrekt gelesen werden kann.
package my.excel;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class Main {
public static void main(String ... args) {
Path path = Paths.get("C:\\hogehoge\\sample.xlsx");
try (Workbook workbook = WorkbookFactory.create(Files.newInputStream(path))) {
Sheet sheet = workbook.getSheetAt(0);
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
Cell cell = row.getCell(1); //Holen Sie sich die Zelle in Spalte B.
Object value = CellUtils.getCellValue(cell);
System.out.println(value);
}
} catch (IOException
| InvalidFormatException
| EncryptedDocumentException e) {
e.printStackTrace();
}
}
}
Wenn Sie sich die Ergebnisse des Kompilierens und Ausführens ansehen, werden Sie feststellen, dass es wie erwartet funktioniert. Ich habe es getan (´ ・ ω ・ `)
ABC
true
100.0
Mon Jan 02 00:00:00 JST 2017
Recommended Posts