如何通过2D数组中的变量行循环我的代码?

时间:2015-08-28 15:10:03

标签: java arrays loops iteration apache-poi

我正在从Excel文件中读取2D数组。此类数组在类ExcelRead中读取和创建。

我的OTHER类SendAll需要使用每一行作为一组不同的变量循环。它将为每行发送一封电子邮件,其中包含唯一的“收件人”和“发件人”电子邮件。发送电子邮件的逻辑工作正常,但我发送的每封电子邮件都有单独的代码。当我有很多电子邮件收件人时,这将是禁止的。最好将它们存储在Excel行中,让我的代码遍历并运行每行的代码。

基本上,我需要遍历我的SendAll代码,为数组中的每一行运行它。

这是我分别运行每个Send类的代码。即只提取电子邮件需要的特定数组值。

public class SendAll extends ExcelRead {

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

    ExcelRead newExcelRead = new ExcelRead();
    //newExcelRead.dataReader();
    String[][] data = newExcelRead.dataReader();


    String host = "smtp.gmail.com";
    String port = "587";
    String mailTo = data[1][3];
    String mailFrom = data[1][4];
    String password = data[1][5];

(Below this is just my Send Email logic)

这是重要的部分,我不确定它会有所帮助,但下面是我的数组类ExcelRead ......

public class ExcelRead {

public String[][] dataReader() throws Exception {
File excel = new File ("C:/Users/(location)/Dashboards.xlsx");
FileInputStream fis = new FileInputStream(excel);

XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);

int rowNum = sheet.getLastRowNum()+1;
int colNum = sheet.getRow(0).getLastCellNum();
String[][] data = new String[rowNum][colNum];
for (int i=0; i<rowNum; i++){
    //get the row
    XSSFRow row = sheet.getRow(i);
        for (int j=0; j<colNum; j++){
            //this gets the cell and sets it as blank if it's empty.
            XSSFCell cell = row.getCell(j, Row.CREATE_NULL_AS_BLANK);
            String value = String.valueOf(cell);                             
            //System.out.println("Value: " + value);
            data[i][j] = value;
        }            
   }
//System.out.println("End Value:  " + data[2][0]);
return data;
}

}

3 个答案:

答案 0 :(得分:1)

看起来你的第一份工作就是将这些数据转换一下,你需要将原始数据阵列合理化为唯一的地址/地址。这里的To / From地址构成了数据的唯一“密钥”。出于这个原因,我建议您更改dataReader以返回Map&gt;。关键是来往/来自地址的连接,第二个要素是实际数据的映射。如果您的dataReader生成了这个,那么解析数据会容易得多。我没有对此进行测试,但是这样的假设,就像在您的示例中一样,您知道哪些数据在哪些列中。

Map<String, Map<String, String>> data = new HashMap<String, Map<String, String>>();
for (int i=0; i<rowNum; i++){
    //get the row
    XSSFRow row = sheet.getRow(i);
    Map<String, String> rowMap = new HashMap<String, String>();

    rowMap.put("to", String.valueOf(row.getCell(3, Row.CREATE_NULL_AS_BLANK)));
    rowMap.put("from", String.valueOf(row.getCell(4, Row.CREATE_NULL_AS_BLANK)));
    rowMap.put("password", String.valueOf(row.getCell(5, Row.CREATE_NULL_AS_BLANK)));

    data.put(rowMap.get("to") + rowMap.get("from"), rowMap);

   }
return data;
}

现在有很多聪明的事情可以为你的Map创建Key值,但这是一个开始。

答案 1 :(得分:1)

我假设您现在唯一的问题是在迭代数据字符串2D数组时为每一行发送电子邮件。如果我错了,请评论。

int row = data.length;
int col = data[0].length;
for(int i=0;i<row;i++)
{
    //write the email code here?
}

答案 2 :(得分:0)

我希望这可以提供帮助。

ExcelRead newExcelRead = new ExcelRead();
//newExcelRead.dataReader();
String[][] data = newExcelRead.dataReader();

String host = "smtp.gmail.com";
String port = "587";
for(int i=0;i<data.length;i++){
    String mailTo = data[i][3];
    String mailFrom = data[i][4];
    String password = data[i][5];
    // Send email logic.
}