Apache POI ، باستخدام كل من XSSF و HSSF
-
27-09-2019 - |
سؤال
لدي مشكلة مع مشروع Apache POI.
لقد فشلت في الاستخدام XSSF
و HSSF
في ال "نفس فئة جافا". ما هي الجرة التي يجب أن أقوم بتنزيلها أو أي قطعة أثرية يجب أن أضيفها إلى Maven؟
اريد التعامل مع كليهما xls
و xlsx
الملفات في نفس الوقت. عندما أحصل على خطأ في إصدار Excel ، سأقوم بتغيير XSSF إلى HSSF أو HSSF إلى XSSF.
كيف يمكنني أن أفعل هذا؟
المحلول
بدلاً من القيام بذلك ، حاول استخدام الإصدار الجديد من Apache POI 3.7 ، يحتوي على حزمة SS التي تتعامل مع كل من HSSF و XSSF دون القلق بشأن النوع
التفاصيل هنا: http://poi.apache.org/spreadsheet/index.html
نصائح أخرى
بصرف النظر عن حل حزمة SS "القياسي" ، يمكنك أيضًا استخدام ببساطة if statement
لتحميل الحق بشكل صحيح workbook format
إلى Workbook interface
كائن ، مثل ذلك:
Workbook workbook; //<-Interface, accepts both HSSF and XSSF.
File file = new File("YourExcelFile.xlsx");
if (FileUtils.getFileExt(file).equalsIgnoreCase("xls")) {
workbook = new HSSFWorkbook(new FileInputStream(file));
} else if (FileUtils.getFileExt(file).equalsIgnoreCase("xlsx")) {
workbook = new XSSFWorkbook(new FileInputStream(file));
} else {
throw new IllegalArgumentException("Received file does not have a standard excel extension.");
}
استخدم المصنع بدلاً من ذلك الذي يتعامل مع كلا من XSSF و HSSF
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
Workbook wb = WorkbookFactory.create(new File("file"))
هذا عمل بالنسبة لي:
filePath = "C:\Users\user1\workspace\myproject\Excel.xlsx"
String extension = FilenameUtils.getExtension(filePath);
System.out.println(extension);