سؤال

السؤال الأساسي: كيف يمكنني تحميل قالب Excel للاستخدام باستخدام POI ثم احفظه على ملف XLS؟

يحرر:

الجواب هو:

FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);

(فقط قم بتحميل القالب كصنف ثم اكتب المصنف كملف XLS في مكان آخر.)

هل كانت مفيدة؟

المحلول

هل حاولت تحميله كمعيار .xls باستخدام POI، تعديله ثم إنقاذه؟

هذا هو النهج الذي استخدمته لإدراج وحدات الماكرو في .xls .xls التي تم إنشاؤها poi. أقوم بإنشاء الملف باستخدام الماكرو (من المسلم به كأداة .xls) ثم قم بتحميله في تطبيقي، بملء البيانات والاحتفاظ به كحفظ .xls تم إنشاؤه حديثا. أن كل شيء يعمل بشكل جيد.

نصائح أخرى

يمكنك تحميل .xls مباشرة تعمل كقالب وتعديله.

POIFSFileSystem fs = new POIFSFileSystem(
                new FileInputStream("template.xls"));
HSSFWorkbook wb = new  HSSFWorkbook(fs, true);

سيتم تحميل XLS، والحفاظ على هيكلها (وحدات الماكرو المدرجة). يمكنك بعد ذلك تعديلها،

HSSFSheet sheet1 = wb.getSheet("Data");
...

ثم احفظه.

FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

أتمنى أن يساعدك هذا.

يمكنك أيضا استخدام القالب الداخلي كمورد.

InputStream fis = ChartSample.class.getResourceAsStream("/templates.xls");
HSSFWorkbook wb = new HSSFWorkbook(fis);        
fis.close();
HSSFSheet sh = wb.getSheetAt(0); 
//Here you go

وحفظ ما يلي:

out = new FileOutputStream("./new.xls");
wb.write(out);
out.close();

يمكنك إنشاء ملف XLS من قالب XLS.

ولكن، للقيام بذلك، تحتاج إلى إنشاء نسخة من القالب في كل مرة تحتاج فيها إلى استخدام القالب. إذا لم يكن الأمر كذلك، فستحرير القالب الأصلي (ما لا تريده).

لذلك، تحتاج أولا إلى الحصول على ملف القالب الخاص بك:

URL url = Thread.currentThread().getContextClassLoader().getResource("templates/template.xls");
File file = new File(url.getPath());

نسخ ملف القالب:

try (FileOutputStream fileOutputStream = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {

    Files.copy(file.toPath(), fileOutputStream);

    Workbook workbook = new HSSFWorkbook();
    workbook.write(fileOutputStream);
}

الوصول إلى ملف نسخ جديد:

FileInputStream inp = new FileInputStream("/home/jake/fileCopiedFromTemplate.xls");

إنشاء Workbook, ، حتى تتمكن من الكتابة في ملفك الجديد:

Workbook workbook = WorkbookFactory.create(inp);

بعد الكتابة في المصنف الخاص بك:

try (FileOutputStream fileOut = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {
    workbook.write(fileOut);
}

يتم تحديد نصيحة لإنشاء ملف قالب XLS القالب مع بعض المتغير لك توطين الموضع الذي ترغب في ملءه. يحب:

------------------------------------
|   | Columna A     | Column B     |
------------------------------------
| 1 |  Some description            | 
------------------------------------
| 2 | {person.name} | {person.age} |
------------------------------------

لملفات Excel مع .xlsx استخدم ما يلي:

FileInputStream inputStream = new FileInputStream(new File("template.xlsx"));
        @SuppressWarnings("resource")
        Workbook wb = new XSSFWorkbook(inputStream);  
        Sheet sheet = wb.getSheet("sheet1");

يمكنك استخدام XSSF عن طريق إضافة تبعية POI-OOXML في Maven Pom.xml الخاص بك إذا كنت تريد حفظه في تنسيق 2007+.

إذا كان لديك ملف Template.xlsx مع ورقة ملخص في جهاز XMLS هذا وتريد تغيير خلية معينة يمكنك القيام بذلك باسم:

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx"));           
FileOutputStream fileOut = new FileOutputStream("new.xlsx");
XSSFSheet sheet1 = wb.getSheet("Summary");
XSSFRow row = sheet1.getRow(15);
XSSFCell cell = row.getCell(3);
cell.setCellValue("Bharthan");

wb.write(fileOut);
log.info("Written xls file");
fileOut.close();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top