当前位置: 首页 > 知识库问答 >
问题:

用java读取后将excel中的数据存储在列表中

微生嘉
2023-03-14

我正在使用阿帕奇POI从Excel文件中读取数据。我想将它们存储在结果列表中(如c中的列表),因为之后我将尝试将它们存储在mysql数据库中,仅调用list[0],例如list[1]。我将尝试做的是制作此列表,之后我将使用jdbc驱动程序并给出此列表以在mysql中制作表格。用于读取excel文件的代码如下:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
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;

public class readexcel{

@SuppressWarnings({ "unchecked "," unchecked" })公共静态void main(String[] args)引发异常{

//
 // An excel file name. You can create a file name with a full
 // path information.
 //
String filename = "C:\\Users\\xxx\\Documents\\test.xls";

//
// Create an ArrayList to store the data read from excel sheet.
//
List sheetData = new ArrayList();
FileInputStream fis = null;
try {
//
// Create a FileInputStream that will be use to read the
// excel file.
//
fis = new FileInputStream(filename);

 //
 // Create an excel workbook from the file system.
//
HSSFWorkbook workbook = new HSSFWorkbook(fis);
//
// Get the first sheet on the workbook.
//
HSSFSheet sheet = workbook.getSheetAt(0);

 //
  // When we have a sheet object in hand we can iterator on
// each sheet's rows and on each row's cells. We store the
// data read on an ArrayList so that we can printed the
// content of the excel to the console.
 //
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
HSSFRow row = (HSSFRow) rows.next();
Iterator cells = row.cellIterator();

List data = new ArrayList();
while (cells.hasNext()) {
HSSFCell cell = (HSSFCell) cells.next();
data.add(cell);
 }

sheetData.add(data);
 }
 } catch (IOException e) {
e.printStackTrace();
 } finally { 
 if (fis != null) {
 fis.close();
 }
 }

 showExcelData(sheetData);
  }

 private static void showExcelData(List sheetData) {
  //
    // Iterates the data and print it out to the console.
  //
for (int i = 0; i < sheetData.size(); i++) {
 List list = (List) sheetData.get(i);
for (int j = 0; j < list.size(); j++) {
Cell cell = (Cell) list.get(j);
if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
System.out.print(cell.getNumericCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
System.out.print(cell.getRichStringCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
System.out.print(cell.getBooleanCellValue());
}
if (j < list.size() - 1) {
System.out.print(", ");
}
}
System.out.println("");
}
}
}

我要补充什么来做我向你解释的事情?

共有3个答案

谷梁德容
2023-03-14

看下面的代码

public List<ArrayList<String>> readExcelData2(String excelFile) throws IOException {

    List<ArrayList<String>> depts = new ArrayList<ArrayList<String>>();

    FileInputStream excelFileToRead = new FileInputStream(new File(excelFile));

    XSSFWorkbook wb = new XSSFWorkbook(excelFileToRead);

    XSSFSheet sheet = wb.getSheetAt(0);

    XSSFRow row;
    XSSFCell cell;
    int maxDataCount = 0;

    Iterator<Row> rows = sheet.rowIterator();

    while (rows.hasNext()) {
        row = (XSSFRow) rows.next();
        // skip the first row because it will be header
        if (row.getRowNum() == 0) {
            maxDataCount = row.getLastCellNum();
            continue;
        }

        // if the row is empty stop the loop, do not go further
        if (this.isRowEmpty(row, maxDataCount)) {
            // exit processing
            break;
        }

        // define arraylist object to store list of departments of each row
        ArrayList<String> innerArrayList = new ArrayList<String>();

        for (int cn = 0; cn < maxDataCount; cn++) {
            cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK);

            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                innerArrayList.add(cell.getStringCellValue());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                innerArrayList.add(String.valueOf(cell.getNumericCellValue()));
                break;

            default:
                innerArrayList.add(cell.getStringCellValue());
                break;
            }

        }
        depts.add(innerArrayList);

    }
    return depts;
}

public boolean isRowEmpty(Row row, int lastCellNo) {
    for (int c = row.getFirstCellNum(); c < lastCellNo; c++) {
        Cell cell = row.getCell(c, Row.CREATE_NULL_AS_BLANK);
        if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
            return false;
        }
    }
    return true;
}
耿炎彬
2023-03-14

我发现这个函数可用

public static ArrayList<ArrayList<String>> GetExcelTableInto2DArrayListString(String excelFile, boolean debug){

    ArrayList<ArrayList<String>> OUT = new ArrayList<ArrayList<String>>();  
        File myFile = new File(excelFile); 
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(myFile);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

        // Finds the workbook instance for XLSX file 
        XSSFWorkbook myWorkBook = null;
        try {
            myWorkBook = new XSSFWorkbook (fis);
        } catch (IOException e) {
            e.printStackTrace();
        } 

        // Return first sheet from the XLSX workbook 
        XSSFSheet mySheet = myWorkBook.getSheetAt(0); 

        // Get iterator to all the rows in current sheet 
        Iterator<Row> rowIterator = mySheet.iterator(); 

        // Traversing over each row of XLSX file 
        int count=1;
        while (rowIterator.hasNext()) { 
            Row row = rowIterator.next();
            ArrayList<String> InnerArray = new ArrayList<String>() ;
            if(debug)System.out.print(count + ". \t");
        // For each row, iterate through each columns 
            Iterator<Cell> cellIterator = row.cellIterator(); 

            while (cellIterator.hasNext()) {

                Cell cell = cellIterator.next(); 

                switch (cell.getCellType()) { 
                case Cell.CELL_TYPE_STRING: 
                    String c = cell.getStringCellValue();
                    if(debug)System.out.print(c + "\t");
                    InnerArray.add(c);
                    break; 
                case Cell.CELL_TYPE_NUMERIC: 
                    int n = (int) cell.getNumericCellValue();
                    if(debug)System.out.print(n + "\t");
                    InnerArray.add(String.valueOf(n));
                    break; 
                case Cell.CELL_TYPE_BOOLEAN:
                    boolean b = cell.getBooleanCellValue();
                    if(debug)System.out.print(b + "\t");
                    InnerArray.add(String.valueOf(b));
                break; 
                default : 
                    } 
                }
            if(debug)System.out.println("");
            OUT.add(InnerArray);
            count++; 
            }

    return OUT;
}
韶弘壮
2023-03-14

在开始迭代工作表之前,初始化数组列表的方式,数组列表必须具有一个范围,以在Excel工作表的行和列迭代中的任何位置持久保存。

ArrayList myList = new ArrayList()

将这些行放在正在执行的单元格迭代循环中 n 行

if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) 
{
System.out.print(cell.getNumericCellValue());
myList.add(cell.getNumericCellValue());
} 
else if (cell.getCellType() == Cell.CELL_TYPE_STRING) 
{
System.out.print(cell.getRichStringCellValue());
myList.add(cell.getRichStringCellValue());
} 
else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) 
{
System.out.print(cell.getBooleanCellValue());
myList.add(cell.getBooleanCellValue());
}

现在,您可以处理该列表以将数据插入数据库

 类似资料:
  • Java 中如何按列读取 Excel 数据 我有一个excel文件,希望用java读取某个表单某列的值,以便做后续的操作。有推荐的方案吗?

  • 问题内容: 大家好,我想在html页面上显示数据库表的全部内容。我试图先从数据库中获取记录并存储在其中,但是当我在html页面上返回数组列表时,它仅重复显示最后一条记录作为数据库表的计数。这是下面的代码: 问题答案: 尝试以下代码 这是我的模特班 这是我的查看方法

  • 本文向大家介绍python3 读取Excel表格中的数据,包括了python3 读取Excel表格中的数据的使用技巧和注意事项,需要的朋友参考一下 需要先安装openpyxl库 通过pip命令安装: pip install openpyxl 源码如下: 总结 以上所述是小编给大家介绍的python3 读取Excel表格中的数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的

  • 问题内容: 我有一个文件,其内容为python列表的形式,如下所示: 有什么办法可以将python文件读回到列表对象中吗?而不是使用整个文件,而是将其读取为字符串。 编辑:对于那些可能有兴趣的人,我使用(import ast)遇到了一个奇怪的问题,作为解决上述问题的建议。 我在其中使用的程序具有从yahoo finance python模块获取历史股票数据的功能。此函数与ast.literal_e

  • 我是编程界的新手。嗯,我正在尝试使用ApachePOI库读取excel文件(5行5列)。我实际上有两个相同问题的实现。在第一个代码片段中,我只是读取excel文件并将其打印到控制台中。 然而,现在我正试图将读取的excel数据保存到一个数组中。所以我想在动态获取excel行和列大小后设置数组大小。但令我惊讶的是,当我执行第二个代码段时,似乎“while(cellIterator.hasNext()

  • 问题内容: 有人可以帮助我将文本文件中的选择性数据列读入列表。 例如:如果文本文件数据如下 从上面的数据,如果我需要使用java中的列表收集“名称”列并进行打印。 问题答案: 可以用来读取文件,丢弃不需要的列。在处理文件时打印所需的列值,或者add()将其j打印到并在处理完成后打印它们。 一个有限的错误检查示例: