如何在java中读取Excel(.xlsx)文件?

如何在java中读取Excel(.xlsx)文件?,java,android,excel,apache-poi,Java,Android,Excel,Apache Poi,从给定的.xlsx文件中,我尝试使用Java读取数据 我读取该文件的代码如下: public static void main(String[] args) throws Exception { FileInputStream file = new FileInputStream(new File("E:\\test1.xlsx")); XSSFWorkbook workbook = new XSSFWorkbook(file); XSSFSh

从给定的
.xlsx
文件中,我尝试使用Java读取数据

我读取该文件的代码如下:

public static void main(String[] args) throws Exception {

        FileInputStream file = new FileInputStream(new File("E:\\test1.xlsx"));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet test = workbook.getSheetAt(0);

        student emp = new student();
        Iterator<Row> itr = test.iterator();
        itr.next();
        while(itr.hasNext()){
               Row row = itr.next();
               emp.reedData(row);
               System.out.println(id+","+name+","+options);
        }
void reedData(Row row){
    id= row.getCell(0).toString();
    name= row.getCell(1).toString();
    options= row.getCell(2).toString();
}
但是,我得到的输出如下:

1.0,X,play game
,,sing song
2.0,Y,play game
,,sing song
1.0,X,{play game,sing song}
2.0,Y,{play game,sing song}
与上述内容不同,我希望输出如下所示:

1.0,X,play game
,,sing song
2.0,Y,play game
,,sing song
1.0,X,{play game,sing song}
2.0,Y,{play game,sing song}
这个问题是因为我正在合并
.xlsx
文件中的两个单元格

有什么建议吗?
提前感谢您。

看起来您正在使用Apache POI。 尝试将代码中的这两个单元格与以下内容合并:

test.addMergedRegion(1,2,0,0);
或:


我就是这样做的

import static java.lang.System.out;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public  class  read {
    public static void main(String [] args){
        FileInputStream excelFile = new FileInputStream(new File(keep));
        XSSFWorkbook wb = new XSSFWorkbook(excelFile);
        XSSFSheet sheet = wb.getSheetAt(0);

        int rowCount; // number of rows of newly form excel files 
        rowCount= sheet.getPhysicalNumberOfRows();
        out.println(rowCount);

        //trying to iterate the excel file
        int i =0;
        Iterator<Row> rowIterator     = sheet.iterator();
         do{
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while(cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                if(cell.getColumnIndex()==0) { // to read the first column 
                    DataFormatter df = new DataFormatter();
                    String str2      = df.formatCellValue(cell);
                    customerNo.add(str2);
                }
            }
            ++i;
            if(i>rowCount)break;
            //break;
        }while(rowIterator.hasNext());
        wb.close();
   }
}
导入静态java.lang.System.out;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.util.ArrayList;
导入java.util.Iterator;
导入org.apache.poi.hssf.usermodel.HSSFCell;
导入org.apache.poi.hssf.usermodel.HSSFCellStyle;
导入org.apache.poi.hssf.usermodel.HSSFRow;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.DataFormatter;
导入org.apache.poi.ss.usermodel.IndexedColors;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
公开课阅读{
公共静态void main(字符串[]args){
FileInputStream excelFile=新FileInputStream(新文件(保留));
XSSFWorkbook wb=新XSSFWorkbook(Excel文件);
XSSFSheet-sheet=wb.getSheetAt(0);
int rowCount;//新形成的excel文件的行数
rowCount=sheet.getPhysicalNumberOfRows();
out.println(行计数);
//正在尝试迭代excel文件
int i=0;
迭代器rowIterator=sheet.Iterator();
做{
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
如果(cell.getColumnIndex()==0){//读取第一列
DataFormatter df=新的DataFormatter();
字符串str2=df.formatCellValue(单元格);
客户编号添加(str2);
}
}
++一,;
如果(i>行计数)中断;
//中断;
}while(roweiterator.hasNext());
wb.close();
}
}

希望这有帮助。

对于其他列中的每一个多行,您都需要读取构成选项列的两行。