Red de conocimiento informático - Material del sitio web - Cómo leer Excel usando Apache POI

Cómo leer Excel usando Apache POI

En primer lugar, POI es un paquete jar de código abierto producido por Apache, una organización de código abierto. Proporciona una API que es fácil de analizar en Excel y podemos usarla para leer Excel muy fácilmente. Aquí se presenta la versión final de 3.5.

La necesidad de utilizar este paquete jar es la siguiente:

Hablando de Excel, hay 2003 y 2007. Los formatos son diferentes y los métodos de análisis de puntos de interés utilizados también son diferentes. es principalmente Utilice las clases del paquete org.apache.poi.hssf.usermodel para analizar, mientras que Excel2007 usa org.apache.poi.xssf.usermodel para analizar.

Analizando el código fuente de Excel2003

Hablando de Excel, hay 2003 y 2007. Los formatos son diferentes y los métodos de análisis de puntos de interés también son diferentes. Excel2003 utiliza principalmente org.apache. Las clases del paquete poi.hssf.usermodel se usan para analizar, mientras que Excel2007 usa org.apache.poi.xssf.usermodel para analizar.

Analizar el código fuente de Excel2003

StringBuffer content = new StringBuffer(); HSSFWorkbook workbook = new HSSFWorkbook(is); Crear una referencia al archivo del libro de Excel

For (int numSheets) = new HSSFWorkbook(is); // Crea una referencia al archivo del libro de Excel.

p> for (int numSheets = 0; numSheets lt; workbook.getNumberOfSheets(); numSheets ) {

if (null ! = workbook.getSheetAt(numSheets)) {

HSSFSheet aSheet = workbook.getSheetAt(numSheets) {

For (int numSheets = 0; numSheets lt; workbook.getNumberOfSheets(); numSheets )getSheetAt(numSheets); // Obtener una hoja

for (int filaNumOfSheets = 0; filaNumOfSheet lt; = aSheet.getLastRowNum(); filaNumOfSheet) { if (null! = aSheet.getRow(rowNumOfSheet)) { HSSFRow aRow = aSheet.getRow(rowNumOfSheet) { HSSFRow aRow = aSheet); .getRow(rowNumOfSheet); rowNumOfSheet ) { HSSFRow aRow = aSheet.getRow(rowNumOfSheet)getRow(rowNumOfSheet); // Obtener una fila para (int cellNumOfRow = 0; cellNumOfRow lt; = aRow.getLastCellNum(); cellNumOfRow ) {

if (null ! = aRow.getCell(cellNumOfRow)) {

HSSFCell aCell = aRow.append(aCell.getBooleanCellValue() "\t");

} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) { content.append("\n"); p>}} } return content.toString().trim();

El análisis de Excel 2007 y 2003 es básicamente el mismo, simplemente cambie HSSFSheet, HSSFCell, etc. a XSSFSheet, XSSFCell.

Además, me gustaría recordarles a todos que el estilo de Excel se basa en celdas, por lo que usar HSSFRow.getRowStyle() para obtener el estilo causará problemas y es posible que no pueda obtener el estilo. estilo que quieras. Procesar celdas fusionadas es un punto difícil en POI. Solo puede juzgar si la celda actual está en la celda fusionada. Si es así, entonces el valor de esta celda es el valor de la primera celda en la celda fusionada. manejar celdas fusionadas.

Código para procesar celdas fusionadas: public static boolean isMergedRegion(HSSFSheetsheet, HSSFCell cell) { //Obtener cuántas celdas fusionadas hay en una hoja int sheetmergerCount =sheet.getNumMergedRegions() for(int i; = 0; i lt;sheetmergerCount; i) {

//Obtener una celda fusionada específica

CellRangeAddress ca =sheet.GetMergedRegion(HSSFSheet)getMergedRegion(i);

p>

//Obtiene la fila inicial, la fila final, la columna inicial y la columna final de la celda fusionada

int firstC = ca.getFirstColumn();

int lastC = ca.getLastColumn();

int firstR = ca.getFirstRow();

int lastC = ca.getLastColumn();

int firstR = ca .getFirstRow();

int firstRow()getColumnIndex() lt;= lastC amp;amp; cell.getColumnIndex() gt;= firstC) {

if(cell .getRowIndex () lt; = últimoR amp; cell.getRowIndex() gt; = primeroC)getRowIndex() gt; = primeroR) { return true; } } Return false; } public static String getMergedRegionValue(HSSFSheetsheet, HSSFCell cell) { //Obtener el número de celdas fusionadas en una hoja int sheetmergerCount =sheet.getNumMergedRegions(); //Promocionar celdas fusionadas for(int i = 0; i lt;sheetmergerCount; i) {

//Obtener celdas fusionadas

CellRangeAddress ca =sheet.getMergedRegion(HSSFCell); Fusionar celdas

CellRangeAddress ca =sheet.getMergedRegion(HSSFCell)getMergedRegion(i);

//// Obtener la fila inicial, la fila final y la columna final de la celda fusionada, terminando columna

int primeraC = ca.getFirstColumn();

int últimaC = ca.getLastColumn()

int últimaC = ca. ();

int últimoC = ca.getLas

tColumn()getLastColumn();

int firstR = ca.getFirstRow();

int lastR = ca.getLastRow();

/ Determinar la celda Si está ubicado en la celda fusionada, si es así, devuelve el valor de la primera celda en la celda fusionada

if(cell.getColumnIndex() lt; = lastC amp; amp; cell.getColumnIndex () gt ;= firstC) {

if(cell.getColumnIndex() lt;= lastC amp;amp; cell.getColumnIndex () gt;= firstC)getRowIndex() lt;= lastR amp;amp; . getRowIndex() gt; = firstR) { HSSFRow fRow =sheet.getRow(firstR); HSSFCell fCell = fRow.getCell(firstC); Para mostrar la diferencia si (fCell.getCellType() == HSSFCell.CELL_TYPE_NN)CELL_TYPE_NUMERIC amp; hasBorder(cell) { HSSFRow =sheet.CELL_TYPE_STRING amp; (fCell.getCellType() == HSSFCell.TYPE_FORMULA amp; amp; hasBorder(cell)){ return String.valueOf(fCell.getCellFormula() }

}

}

}

} } Devolver "" }