通过数组将行写入Excel

时间:2016-05-16 21:28:17

标签: java excel loops arraylist while-loop

所以我目前有这个代码经过一个while循环并从"结果集对象中读取以下字段" (JDBC的东西)。

要读取和填充的字段:eNumber,eName。

while (rs.next()) {

        ArrayList<String> eRow = new ArrayList<String>();

        String eNumber = rs.getString("ENTRYNUMBER");
        String eventName = rs.getString("EVENTNAME");
        //String 
        System.out.println("entryNumber: " + eNumber + "\t" + "eventName: " +eName );

        eRow.add(eNumber);
        eRow.add(eName);
}

我的问题 - 如何将两个变量写入同一行的两个不同单元格,然后在while循环中重复?然后导出到excel。我想我需要一个阵列,但在此之后我就陷入困境。

例如:

LoopWriteExample

3 个答案:

答案 0 :(得分:0)

这会有用吗?

eRow.add(eNumber+","+eName);

答案 1 :(得分:0)

您可能需要将两者都添加到同一索引中,可能使用分隔符:

eRow.add(eNumber + '#' + eName); // just chose '#' as unlikely to be used

然后,您可以使用eRow.toArray()方法将数组转换为单个列,最后使用Text to Columns将数据再次拆分。

或者你可以循环播放arraylist(预警,我无用作为java,所以这可能实际上没有运行,但应该让你知道我的意思):

// ... your code

String[] splitVals;

for (int i = 1; i <= eRow.Count; i++){
    splitVals = eRow[i].Split('#');
    setCellValue(splitVals[0], i, 1);
    setCellValue(splitVals[1], i, 2);
}

// ... some more code ...

public void setCellValue(String val, int row, int col) {
    if (!this.isLoaded) {
        return;
    }
    Dispatch cellRef = Dispatch.invoke(activeSheet, "Cells", Dispatch.Get, new Object[]{++row, ++col}, new int[1]).toDispatch();
    Dispatch.put(cellRef, "Value", val);
}

答案 2 :(得分:0)

您可能需要重新编写代码,如下所示。

ArrayList<HashMap<String, String>> eRow = new ArrayList<HashMap<String, String>>();
while (rs.next()) {
        String eNumber = rs.getString("ENTRYNUMBER");
        String eName = rs.getString("EVENTNAME");
        //String 
        System.out.println("entryNumber: " + eNumber + "\t" + "eventName: " +eName );

        HashMap<String, String> row = new HashMap<String, String>();
        row.put(eNumber, eName);
        eRow.add(row);
}

编辑1: 您可以遍历您的eRow并将值写入cvs文件,如下所示

FileWriter fw = new FileWriter("file.csv");
for (HashMap<String, String> map : eRow)
{
     for (Entry<String, String> entry : map.entrySet())
     {
         fw.write(entry.getKey() + "," + entry.getValue() + " \n");