2013-04-23 41 views
1

我有一个List<String>,它具有很少的元素,我想使用Apache POI将这些元素写入Excel工作表。此外,我想在每10个项目后将数据放入单独的行中。例如,我的列表中的以下内容:在apache poi中的每个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);    
} 
+0

是的,它可以实现。你试过什么了? – 2013-04-23 23:20:05

+0

是的,这是可能的。请参阅Apache POI快速指南以了解如何使用它:http://poi.apache.org/spreadsheet/quick-guide.html – rgettman 2013-04-23 23:20:12

+0

@ aeinstein83请**更新您的问题**并添加代码以尝试使用库。请**不要在评论中发布你的代码**,也**不要发布代码**。 – 2013-04-23 23:27:51

回答

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); 
    } 
} 
+0

感谢这个逻辑工作..! – aeinstein83 2013-04-24 00:02:38

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(); 
+0

应该使用'createCell'方法,'Row'中不存在'createColumn'。并且创建了一个“Cell”,而不是“Col”,它不存在。 OP要求每行10个单元,而不是20个。“行”应该使用'createRow'创建,而不是'getRow'。错字:s/rownuw/rownum – rgettman 2013-04-23 23:34:36

+0

我们在哪里设置细胞值? – aeinstein83 2013-04-23 23:38:06

+0

我不知道,我按照上面的代码:( – aeinstein83 2013-04-23 23:41:45

相关问题