J'ai besoin de créer un HSSFWorkbook ou un objet XSSFWorkBook, en fonction de ce que j'ai lu comme extension de fichier, puis de pouvoir continuer les opérations et que l'objet créé. Comment puis-je rendre l'objet Visibile à l'extérieur de la déclaration IF, afin que je puisse l'utiliser "globalement"?
J'ai essayé avec une méthode, mais nous savons qu'une méthode ne peut renvoyer qu'un type d'objet et je traite avec 2 Types d'objet possibles Sortie (classeur HSSF / XSSF) P>
String excelFilePath = "D://"; //path String fileName = "BetsTable"; //filename String extension = "xls"; //extension String completePath = excelFilePath + fileName + "." + extension; //fullpath FileInputStream inputStream = new FileInputStream(new File(completePath)); if(extension == "xls") { HSSFWorkbook workbook = new HSSFWorkbook(inputStream); } if(extension == "xlsx") { XSSFWorkbook workbook = new XSSFWorkbook(inputStream); } Sheet firstSheet = workbook.getSheetAt(0); // !!! WORKBOOK IS NOW NOT "USABLE"
3 Réponses :
En bref, non.
Mais, vous pouvez garder une feuille code> en dehors de la portée intérieure, il vous suffit de le définir dans la portée dont vous en avez besoin: P>
Sheet sheet = null;
if(extension == "xls") {
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
sheet = workbook.getSheetAt(0);
}
if(extension == "xlsx") {
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
sheet = workbook.getSheetAt(0);
}
// sheet is accessible from here
doSomething(sheet);
C'est une option très intelligente, car je ne devrais traiter que la feuille. Je vais essayer ça! Merci beaucoup!!
C'est une bonne solution. Fondamentalement, vous n'avez plus besoin de l'objet du classeur en dehors des déclarations de si. Si vous en avez besoin, vous devez trouver la "classe des parents" des deux classes de classeur. Disons que c'est une classe appelée classeur code>. Ensuite, avant d'entrer les déclarations Si vous définissez la variable
workbook workbook = null code> et à l'intérieur de votre IFS, vous les instanciez
workbook = nouveau hssfworkbook .. code>. Ensuite, votre variable de classeur
code> est connue en dehors de l'IFS, mais porte des implémentations différentes, en fonction de l'IFS.
J'ai cherché un classeur code> superclasse pour
hssfworkbook code> et
xssfworkbook code> mais il semble qu'il n'y en a pas comme celui-ci: /. Cependant, cela fonctionnerait également dans d'autres contextes
@ Cameron1024: Avez-vous regardé dans le Javadoc? interface de classeur
Il est possible que les deux variables partageent un type commun, et si vous ne vous attendez pas à utiliser une méthode uniquement dans l'une de ces classes.
Dans votre cas, les deux classes implémentent l'interface workbook et c'est là que la méthode getSheettat ( int) code> est défini. p>
Workbook workbook = null;
if(extension == "xls") { // that's bad, use equals
workbook = new HSSFWorkbook(inputStream);
}
if(extension == "xlsx") { // that's bad, use equals
workbook = new XSSFWorkbook(inputStream);
}
Sheet firstSheet = workbook.getSheetAt(0);
Dupliqué possible de Variables de la portée de bloc