我正在从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;
}
}
答案 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.
}