1

要素がほとんどないがあり、List<String>これらの要素を Apache POI を使用して Excel シートに書き込みたいと考えています。また、10項目ごとにデータを別々の行に入れたいです。たとえば、私のリストには次の要素があります。

["aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii","jjj","kkk","lll","mmm","nnn","ooo","ppp","qqq","rrr","sss","ttt",....]

これを次の形式のExcelシートに入れたい

        col1, col2, col3, col4, col5, col6, col7, col8, col9, col10
row1 :  aaa,  bbb,  ccc,  ddd,  eee,  fff,  ggg,  hhh,  iii,  jjj
row2 :  kkk,  lll,  mmm,  nnn,  ooo,  ppp,  qqq,  rrr,  sss,  ttt

これは Apache POI で実現できますか?

私は次のことを試しました(私はループが本当に苦手です)

public void csvUpdateWorksheet1(String fileName, String sheetName, List<String> data) {

    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet(sheetName);

    logger.info(data.size());
    int rownum = 0;
    for (int i = 0; i < data.size(); i++) {
        Row row = sheet.createRow(i);
        Cell cell = row.createCell(i);
        cell.setCellValue(data.get(i));    
    }        
    csvWriteToFile(workbook, fileName);            
}
4

2 に答える 2

3

現在の行に 10 個のセルを作成したら、次の行を作成する必要があります。

int r = 0;
int c = 0;
int maxCellsPerRow = 10;
Row row = sheet.createRow(r);
for (String str : data)
{
    Cell cell = row.createCell(c);
    cell.setCellValue(str);

    c++;
    // Create and advance to next row if needed.
    if (c >= maxCellsPerRow)
    {
       c = 0;
       r++;
       row = sheet.createRow(r);
    }
}
于 2013-04-23T23:44:37.657 に答える
0
int rownum = 0;
int colnum = 0;
int itemsPerRow = 20;
String outfilename = "test.xls";
List<String> values = new ArrayList<String>();
// add some values ...

HSSFWorkbook book = new HSSFWorkbook();

HSSFSheet sheet = book.createSheet(

HSSFRow row = sheet.getRow(rownuw);

for(String s : values) {

   HSSFCell cell = row.createCell(colnum);
   cell.setCellValue(Integer.parseInt(id));
   colnum = (column+1)%itemsPerRow;
   if(colnum == 0) {
       rownum++;
       row = sheet.getRow(rownuw);
   }   
}

File f = new File("src/main/resources/films.xls");
FileOutputStream fos = new FileOutputStream(f);

book.write(fos);
fos.flush();
fos.close();
于 2013-04-23T23:30:32.483 に答える