[英]How to read excel(.xlsx) in java using poi?
我正在嘗試在 java.I 中讀取 excel。我有以下代碼。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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.xssf.usermodel.XSSFWorkbook;
public class Test {
public static void main(String[] args) throws IOException {
String fname = "D:\\Test.xlsx"; // or "C:\\Test.xls" C:\\SDI-XL.xls
InputStream inp = new FileInputStream(fname);
Workbook wb = new XSSFWorkbook(inp); // Declare XSSF WorkBook
Sheet sheet = wb.getSheetAt(0); // sheet can be used as common for XSSF and HSSF
Iterator<Row> rows=sheet.rowIterator();
while (rows.hasNext()) {
Row row = (Row) rows.next();
System.out.println("row#=" + row.getRowNum() + "");
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
Cell cell = (Cell) cells.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue() + "");
} else {
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue() + "");
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
}
}
}
inp.close();
}
}
我正在導入 poi.3.6jar 和 poi.ooxml-3.6 jar。 當我運行這個程序時,我收到以下錯誤消息。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
at Test.main(Test.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 1 more
我不明白為什么會出現此錯誤消息。所以請幫助我。
添加以下jar文件:
將xmlbeans-2.3.0.jar
文件添加到您的類路徑。
添加
xmlbeans-2.3.0.jar
dom4j-1.6.1.jar
連同常規的 POI XML,它肯定會解決這個問題。
使用這個:輸入字符串文件路徑輸出是json對象列表的列表
Have these dependencies
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>
/**
* Function reads the input excel and gives list(sheet) of objects(rows of each sheet)
* @param filePath
* @return list of list of json objects
*/
public static List<List> excelFileReader(String filePath){
List<List>totalSheetList=new ArrayList<>();
XSSFWorkbook workbook= null;
try {
workbook = new XSSFWorkbook(filePath);
} catch (IOException e) {
e.printStackTrace();
}
//iteration for sheets in a workbook
for(int sheetIndex=0;sheetIndex<workbook.getNumberOfSheets();sheetIndex++){
XSSFSheet sheet=workbook.getSheetAt(sheetIndex);
XSSFRow row=null;
List<JSONObject> singleSheetList=new ArrayList<>();
//excel header - first row and non-empty
String[] header=new String[sheet.getRow(0).getPhysicalNumberOfCells()];
if (sheet.getPhysicalNumberOfRows()!=0 && sheet.getRow(0).getRowNum()==0) {
row=sheet.getRow(0);
for(int index=0;index<row.getPhysicalNumberOfCells();index++){
header[index]=(row.getCell(index).getStringCellValue());
}
}
//if header exists , start reading the values excluding first row (header)
if(header.length!=0){
for(int rowIndex=1;rowIndex<sheet.getPhysicalNumberOfRows();rowIndex++){
row=sheet.getRow(rowIndex);
HashMap<String,Object> eachRow=new HashMap<>();
for(int colIndex=0;colIndex<header.length;colIndex++) {
String cell = "";
if(row.getCell(colIndex)==null){
cell="";
}else{
if(row.getCell(colIndex).getCellType()==Cell.CELL_TYPE_STRING){
cell = row.getCell(colIndex).getRichStringCellValue().toString();
}else{
row.getCell(colIndex).setCellType(Cell.CELL_TYPE_STRING);
cell=row.getCell(colIndex).getStringCellValue();
}
}
eachRow.put(header[colIndex], cell);
}
JSONObject eachRowJsonObject = new JSONObject(eachRow);
singleSheetList.add(eachRowJsonObject);
}
}
totalSheetList.add(singleSheetList);
}
return totalSheetList;
}
添加以下 jar 並將它們添加到您的類路徑中,然后運行您的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.