0

最近我打开了这个话题:

Java - Apache POI - 使用循环填充行和单元格时遇到问题(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 行中的值。

问题是:用这种模式填充和Excel表格是不可能的?因为在内部循环中更新变量并保持所需的模式肯定是不可能的。如何使用循环构建这种模式?

OBS:在我的软件中它会增加 2,这没什么区别。一个人这样做会导致同样的问题(单元格被擦除)。

我非常感谢你!

4

1 回答 1

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);
    }
}
于 2013-06-23T04:12:33.477 回答