Java - Apache POI - 在这种模式下用循环填充行和单元是不可能的? (EXCEL)

时间:2013-06-23 01:43:19

标签: java excel loops apache-poi

最近我打开了这个主题:

Java - Apache POI - Trouble filling rows and cells with loops (Excel)

我开发了另一种结构,希望这可以解决问题,问题变得更加清晰。

考虑到这种模式:

hashkey1 | hashkey2 | hashkey3 | hashkey4
value1-1 | value2-1 | value3-1 | value4-1  
value1-2 | value2-2 | value3-2 | value4-2  
value1-3 | value2-3 | value3-3 | value4-3  
value1-4 | value2-4 | value3-4 | value4-4  
value1-5 | value2-5 | value3-5 | value4-5 

这是新代码:

Row keyRow = worksheet.createRow(4);
Row valueRow = null;
int keyCell = -2;
int firstIndex = 0;
int secondIndex = -2;
int row = 5;
ArrayList<String> keyArray = new ArrayList();
ArrayList<String> innerValueArray;
ArrayList<ArrayList<String>> outerValueArray = new ArrayList<ArrayList<String>>();
for (Map.Entry<String, ArrayList<String>> e : matrix.entrySet()) {
    keyArray.add(e.getKey());
    innerValueArray = new ArrayList();
    for (String s : e.getValue()) {
        innerValueArray.add(s);
    }
    outerValueArray.add(innerValueArray);
}
for (String s : keyArray) {
    keyCell += 2;
    keyRow.createCell(keyCell).setCellValue(keyArray.get(firstIndex++));
}
for (ArrayList<String> aS : outerValueArray) {
    secondIndex += 2;
    for (String s : aS) {
        if ((row - 5) < outerValueArray.size()) {
            row++;  
        }
        valueRow = worksheet.createRow(row);
        valueRow.createCell(secondIndex).setCellValue(s);
    }
}

在另一个主题中,有问题的变量是“keyCell”,在这一个中,它是secondIndex。将值放在正确位置的唯一方法是通过用于键的相同变量,但这使得只能填充一列,删除其他列的内容。问题与其他主题完全相同。所有替代方案都会导致这种情况,我希望SAME行中的值。

问题是:在这种模式中填写和优秀表单是不可能的?因为在内循环中更新变量并保持所需模式当然是不可能的。如何使用循环构建此模式?

OBS:在我的软件中它增加2,没有任何区别。一个人做它会导致同样的问题(细胞被擦除)。

我非常感谢你!

1 个答案:

答案 0 :(得分:2)

我不确定我是否真的理解你的问题,但请检查一下。它会创建一个包含您描述的模式的工作表:

import java.io.*;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

public class PoiPattern {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void main(String[] args) throws Exception {
        Map<String, ArrayList<String>> matrix = new HashMap<String, ArrayList<String>>();
        for (int i = 1; i <= 5; i++) {
            matrix.put("hashkey"+i, new ArrayList(Arrays.asList(new String[]{"value"+i+"-1", "value"+i+"-2", "value"+i+"-3", "value"+i+"-4", "value"+i+"-5"})));    
        }

        Workbook wb = new HSSFWorkbook();
        Sheet worksheet = wb.createSheet();

        Row keyRow = worksheet.createRow(0);
        int col = 0;
        for (String key : matrix.keySet()) {
            keyRow.createCell(col).setCellValue(key);
            ArrayList<String> values = matrix.get(key);
            for (int i = 0; i < values.size(); i++) {
                Row r = worksheet.getRow(i+1);
                if (r == null) { r = worksheet.createRow(i+1); }
                r.createCell(col).setCellValue(values.get(i));
            }
            col++;
        }
        FileOutputStream fos = new FileOutputStream(new File("ExampleFill.xls"));
        wb.write(fos);
    }
}