Problème d'écriture de données dans un file xlsx à l'aide de POI Apache – Excel devient corrompu par la suite

J'ai supprimé beaucoup de code, principalement des blocs d'essai et j'ai collé ici ce que je crois que vous seriez facile de regarder et de me conseiller sur la résolution du problème auquel je suis confronté. J'exécute le script ci-dessous dans une étape Script Groovy dans l'outil SoapUI. La plupart des types de données variables suivent la syntaxe de la langue Groovy.

Lorsque je lance ce code, un file xlsx avec un nom de file mentionné dans la variable destPath est créé mais avec une taille de 0 Ko. Lorsque j'essaie d'ouvrir le file, je vois le message "Excel ne peut pas ouvrir le file" filename "car le format de file ou l'extension de file n'est pas valide. Vérifiez que le file n'a pas été endommagé et que l'extension de file correspond au format de le file." Je ne pouvais pas voir où je me trompe.

def srcPath = "C:\\Test Data\\Test Data2.xlsx" def destPath = "C:\\Test Data\\Results\\destSheet.xlsx" def setData = new SetData(log,srcPath,destPath) log.info setData.setCellData("Result",0,"Testing123") class SetData{ def log; //log variable to print values on the console Ssortingng srcPath; Ssortingng destPath; XSSFWorkbook workbook; OPCPackage pkg; SetData(log,srcPath,destPath){ this.log = log; this.srcPath =srcPath; this.destPath = destPath} public Ssortingng setCellData(Ssortingng colName,int rowNum, Ssortingng data){ OPCPackage pkg = OPCPackage.open(srcPath); Workbook workbook = WorkbookFactory.create(pkg); if(rowNum<0) return "false"; int colNum=-1; XSSFSheet sheet = workbook.getSheetAt(0); XSSFRow row=sheet.getRow(0); for(int i=0;i<row.getLastCellNum();i++){ if(row.getCell(i).getSsortingngCellValue().sortingm().equals(colName)) colNum=i; } sheet.autoSizeColumn(colNum); row = sheet.getRow(rowNum+1); log.info "Row data " + row //log.info is equivalent to System.out.Println in Java,to print values on the console. XSSFCell cell = row.getCell(colNum); // cell style CellStyle cs = workbook.createCellStyle(); cs.setWrapText(true); cell.setCellStyle(cs); log.info data; //prints Testing123 cell.setCellValue(data); // Set the cell data log.info "raw cell Value" + "***" + cell.getRichSsortingngCellValue().getSsortingng() //Prints "Testing123" log.info "Column index "+ cell.getColumnIndex() // Prints 3 log.info cell.getRowIndex() // Prints 0 fileOut = new FileOutputStream(new File(destPath)); workbook.write(fileOut); fileout.flush(); fileOut.close(); fileOut=null; pkg.close() return "true"; } 

On dirait que vous mélangez XSSFWorkbook et Workbook. Vous devriez également vérifier si les lignes et les cellules que vous lisez à partir de votre file source ont effectivement ces lignes / cellules et créez-les si elles ne le font pas. Voici une version simplifiée de votre code pour créer un classur Excel à partir d'un autre classur et lui écrire:

  Ssortingng srcPath = "C:\\projects\\source.xlsx"; Ssortingng destPath = "C:\\projects\\destSheet.xlsx"; XSSFWorkbook workbook = (XSSFWorkbook)WorkbookFactory.create(new File(srcPath)); XSSFSheet sheet = workbook.getSheetAt(0); XSSFRow row = sheet.getRow(1); if(row == null) { row = sheet.createRow(1); } XSSFCell cell = row.getCell(0); if(cell == null) { cell = row.createCell(0); } cell.setCellValue("Testing123"); FileOutputStream fileOut = new FileOutputStream(new File(destPath)); workbook.write(fileOut); fileOut.flush(); fileOut.close();