使用点表示法实现从Excel获取键值对

时间:2017-07-31 14:35:31

标签: java apache-poi

我是Java新手。我有一个包含两列的Excel文件,就像键值对一样。为简单起见,我们说我有3行:

enter image description here

我提取数据并将其存储在LinkedHashMap中,并使用hashmap get方法获取密钥的值:foo.get("string)

是否可以编写一个实现,以便我可以使用点符号样式获取数据,如foo.firstname?这是我目前的代码:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.*;

public class TestData
{

    public Map<String, String> getData(){
        Map<String,String> testData = new LinkedHashMap<>();
        try {

            String sFilePath = "test_data.xlsx";
            FileInputStream file = new FileInputStream(sFilePath);
            XSSFWorkbook workbook = new XSSFWorkbook(file);
            XSSFSheet sheet = workbook.getSheetAt(0);
            Iterator<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext())
            {
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext())
                {
                    Cell cell = cellIterator.next();
                    cell.setCellType(CellType.STRING);
                    testData.put(cell.getStringCellValue(),cellIterator.next().getStringCellValue()); //updates testData hashmap with key-value take from the two colums from Excel
                }
            }
            file.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return testData;
    }
    public static void main(String args[]){
        TestData td = new TestData();
        System.out.println(td.getData().get("firstname")); //prints John
    }
}

修改

我为每个值编写了get方法。例如:

public String getFirstname(){
    return getData("firstname");
}

这是课程的使用方式:

TestData testData = new TestData();
testData.getFirstname();

备注

  1. 我在表格中没有很多行(大约10行),所以我认为为每一行编写get方法都可以。这是将在自动化框架中使用的测试数据,例如键入电子邮件/密码字段。

  2. 我删除了hashmap。 getData现在返回一个字符串,它是工作表中的值(第二列)。我还没有找到保留此实现的hashmap的理由。

  3. 我之所以想要这样:为了避免在从文档中获取数据时手动键入字符串作为参数,以及使代码更易于维护。 IMO testData.getFirstname();比getData好(&#34;名字&#34;);

0 个答案:

没有答案