使用apache poi读取excel - Hashmap,ArrayList

时间:2016-09-30 15:02:52

标签: java excel apache-poi

enter image description here

您好,

我正在尝试使用excel中的列标题读取列值(使用java)。如图所示,假设我想读取标题“city”,列下的所有后续单元格并显示它们。我该怎么做?

通过互联网查看示例,我发现大多数示例都在行上使用迭代器进行迭代。

假设我有一个key的hashmap作为excel的头文件和存储在ArrayList中的后续值。像

这样的东西
HashMap<String, ArrayList<String>> hashmap = 
                new HashMap<String, ArrayList<String>>();

我该怎么办?任何人都可以帮我解决代码和逻辑问题吗?

请不要将此标记为重复,我已尝试搜索stackoverflow和Internet,但大多数都使用该行进行迭代。

2 个答案:

答案 0 :(得分:1)

没有办法直接读取列中的所有单元格而不迭代行,因为这是数据存储在Excel工作表中的方式(行,而不是列)。解决方法可能是移动行和列,就像显示here一样,然后迭代行,以便按照问题中的说明在Hashmap中获取数据。

答案 1 :(得分:0)

首先,您将在获得所有列值后阅读第1行,下面我已经给出了如何阅读第一行

public void readFirstRow(String filename)
{

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

     try{

            FileInputStream myInput = new FileInputStream(new File(filename));

            Workbook workBook = null;

            workBook    = new HSSFWorkbook(myInput);

            Sheet sheet = workBook.getSheetAt(0);

            Row firstRow = sheet.getRow(0);

            int length  = firstRow.getLastCellNum();

            Cell cell = null;

            for( int i = 0 ; i < length ; i++ )

                {
                     cell = firstRow.getCell(i);

                     fieldsArrayList.add(cell.toString());

                }

     }
     catch(Exception e)
     {
         e.printStackTrace();
     }
}

读取列值代码:

//您只需传递cityPostion和文件名

public void readColumnValues(int cityPosition,String fileName)
{
    try
    {
        FileInputStream myInput = new FileInputStream(fileName);

        Workbook workBook = null;

        workBook = new HSSFWorkbook(myInput);
        Sheet sheet = workBook.getSheetAt(0);

        for ( int i = 0 ; i <= sheet.getLastRowNum() ; i++ )
        {
            Row row = sheet.getRow(i);

            if (i > 0) //skip first row
            {

                Cell cityCell   = row.getCell(cityPosition);


                String cityNames      = cityCell.toString();
            }

        }

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

可能会对你有所帮助......