使用 Java 从 Excel 读取数据,您需要以下 jars。从this link下载
poi-4.1.0.jar
poi-ooxml-4.1.0.jar
xmlbeans-3.1.0.jar
ooxml-schemas-1.4.jar
commons-compress-1.18.jar
xlsx-streamer-2.1.0.jar
要读取 Excel 文件,请将其放置在下载或用户所需的位置。下面的程序使用下面的Excel file。
Excel 文件可能包含不同类型的 CellType。当您阅读列数据时,您需要提及 Apache POI 支持的大多数可用的 CellTypes。
我参考以下案例BOOLEAN, STRING, NUMERIC, FORMULA, BLANK, _NONE, ERROR,,如果没有案例支持,则转到getCellValueAsString 方法中的default。
package com.java.file.excel;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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 com.monitorjbl.xlsx.StreamingReader;
/**
*
* @author udaykiran p
*
*/
public class ReadExcelFile {
public static void main(String[] args) {
try {
FileInputStream inputStream = new FileInputStream("C:\\Users\\udaykiranp\\Downloads\\Users.xlsx");// Read Excel file from this location
if (inputStream != null) {
Workbook wb = StreamingReader.builder().rowCacheSize(100) // number of rows to keep in memory (default to 10)
.bufferSize(4096) // buffer size is to use when reading InputStream to file (defaults to 1024)
.open(inputStream);
Sheet sheet = wb.getSheetAt(0);//reading first sheet. You can pass argument as well.
System.out.println("Excel Reading - Number Of Sheets: "+ wb.getNumberOfSheets() +", Active Sheet: "+ sheet.getSheetName());
Map<String, String> map = new HashMap<String, String>();
Iterator<Row> iterator = sheet.iterator();
int rowCount = 0;
while(iterator.hasNext()) {
Row row = iterator.next();
rowCount = row.getRowNum();
rowCount++;
int columnNum = 0;
String key = null, value = null;
for(Iterator<Cell> cellIterator = row.cellIterator(); cellIterator.hasNext();) {
Cell cell = cellIterator.next();
columnNum = cell.getColumnIndex();
String cellData = getCellValueAsString(cell);
System.out.println("RowNumber: "+ rowCount +", CellData: "+ cellData +", CellNumber: "+ columnNum);
//Reading data from Excel upto 6 rows only
// if (rowCount == 6) {
//rowCount == 1 Headers Section(User ID, User Name)
if (rowCount > 1) {
if (columnNum == 0) {
key = cellData;//User ID
}
if (columnNum == 1) {
value = cellData;//User Name
}
}
// }
}
if (key != null && value != null) {
map.put(key, value);
}
}
String userID = "1";
System.out.println("User ID: "+ userID +", User Name: "+ map.get("1"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getCellValueAsString(Cell cell) {
String cellValue = null;
switch(cell.getCellType()) {
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case STRING:
cellValue = String.valueOf(cell.getRichStringCellValue().toString());
break;
case NUMERIC:
Double value = cell.getNumericCellValue();
if (value != null) {
String valueAsStr = value.toString();
int indexOf = valueAsStr.indexOf(".");
if (indexOf > 0) {
cellValue = valueAsStr.substring(0, indexOf);//decimal numbers truncated
} else {
cellValue = value.toString();
}
}
break;
case FORMULA:
//if the cell contains formula, this case will be executed.
cellValue = cell.getStringCellValue();
break;
case BLANK:
cellValue = "";
break;
case _NONE:
cellValue = "";
break;
case ERROR:
throw new RuntimeException("There is no support for this type of cell");
default:
cellValue = "";
}
return cellValue;
}
}
输出:
DEBUG [main] (StreamingWorkbookReader.java:89) - Created temp file
[C:\Users\UDAY~1\AppData\Local\Temp\tmp-6803178981463652112.xlsx]
Excel Reading - Number Of Sheets: 1, Active Sheet: Sheet1
RowNumber: 1, CellData: User ID, CellNumber: 0
RowNumber: 1, CellData: User Name, CellNumber: 1
RowNumber: 2, CellData: 1, CellNumber: 0
RowNumber: 2, CellData: Steve Jobs, CellNumber: 1
RowNumber: 3, CellData: 2, CellNumber: 0
RowNumber: 3, CellData: Bill Gates, CellNumber: 1
RowNumber: 4, CellData: 3, CellNumber: 0
RowNumber: 4, CellData: Sergey Brin, CellNumber: 1
RowNumber: 5, CellData: 4, CellNumber: 0
RowNumber: 5, CellData: Fritz Sennheiser, CellNumber: 1
RowNumber: 6, CellData: 5, CellNumber: 0
RowNumber: 6, CellData: Thomas Olsen, CellNumber: 1
User ID: 1, User Name: Steve Jobs