2010-06-21 8 views
2

J'utilise Apache POI 3.6 pour générer des feuilles Excel (2003). Je veux insérer une formule dans une cellule qui calcule une somme de certaines cellules sur plusieurs feuilles.Référencement de feuilles dans les formules de POI Apache

J'ai des feuilles nommées a, b et c et que vous voulez calculer la somme des cellules A1

J'ai essayé:

cell.setCellFormula("a!A1+b!A1+c!A1"); 

POI ne produit pas d'erreurs, mais quand j'ouvre la feuille I obtenir une erreur dans OpenOffice:

Err: 522 - =$#REF!.A1+$#REF!.A1+$#REF!.A1 

Je l'ai fait un peu de recherche et apparemment il y a des bugs lors du référencement de plusieurs feuilles. (par exemple, https://issues.apache.org/bugzilla/show_bug.cgi?id=46670) Quelqu'un a-t-il une idée de la façon d'utiliser des formules utilisant plusieurs feuilles dans un PI?

-------------- code source -------------------

public static void main(String args[]){ 
    Workbook wb = new HSSFWorkbook(); 
    CreationHelper createHelper = wb.getCreationHelper(); 
    Sheet sheet = wb.createSheet("Total"); 

    Row row = sheet.createRow((short)0); 
    Cell cell = row.createCell(0); 

    cell.setCellFormula("a!A1+b!A1+c!A1"); 

    Sheet sheet1 = wb.createSheet("a"); 
    Sheet sheet2 = wb.createSheet("b"); 
    Sheet sheet3 = wb.createSheet("c"); 
    Sheet sheet4 = wb.createSheet("d"); 

    createVal(sheet1, createHelper, 5); 
    createVal(sheet2, createHelper, 10); 
    createVal(sheet3, createHelper, 15); 
    createVal(sheet4, createHelper, 20); 

    try { 
     FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 
     wb.write(fileOut); 
     fileOut.close(); 
     System.out.println("done"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } } 

public static void createVal(Sheet sheet, CreationHelper createHelper, int i){ 
    Row row = sheet.createRow((short)0); 
     // Create a cell and put a value in it. 
     Cell cell = row.createCell(0); 
     // Or do it on one line. 
     row.createCell(0).setCellValue(i); 

} 

Répondre

6

Votre code fonctionnera bien si vous déplacez le creaton de la feuille "Total" à après peupler les feuilles individuelles.

comme ci-dessous:

...  
    createVal(sheet1, createHelper, 5); 
    createVal(sheet2, createHelper, 10); 
    createVal(sheet3, createHelper, 15); 
    createVal(sheet4, createHelper, 20); 

    Sheet sheet = wb.createSheet("Total"); 
    Row row = sheet.createRow((short)0); 
    Cell cell = row.createCell(0); 

    cell.setCellFormula("a!A1+b!A1+c!A1"); 

cellulaire Total!A1 montre 30

+0

Merci beaucoup! Fonctionne complètement bien –

+0

Selon MS Excel, je mettais '.' au lieu de '!'. Merci – Shams

Questions connexes