Полная рабочая книга Apache POI

Возникла проблема с Apache POI (финальный выпуск 3.8).

Моя задача: создать несколько файлов xls/xlsx в соответствии с данными из базового документа xls/xlsx.

Прежде всего, я пытаюсь скопировать некоторые данные (Cell, CellStyle и т. Д.) Из базового документа в документ назначения через CellStyle.cloneFrom, Выглядит хорошо, но когда я открыл файл xlsx (xl/styles.xmlЯ обнаружил, что у него было другое количество стилей (и шрифтов), чем в моем исходном документе.

Могу ли я создать полную копию исходного документа xls/xlsx через API POI?

Код, который создает шаблон базового документа и создает новый документ:

public WorkbookTemplate constructTemplate(Workbook wb)
{
    //copy styles from template
    styles = new HashSet<CellStyle>(wb.getNumCellStyles());
    for (short i = 0; i < wb.getNumCellStyles(); i++)
    {
        styles.add(wb.getCellStyleAt(i));
    }
    System.out.println(wb.getNumCellStyles());

    for (int i = 0; i < wb.getNumberOfSheets(); i++)
    {
        Sheet sheet = wb.getSheetAt(i);
        SheetTemplate sheetTemplate = new SheetTemplate(this);
        sheets.add(sheetTemplate.constructTemplate(sheet));
    }

    return this;
}

public Workbook applyTemplate(Workbook wb, JXPathContext context)
{
    preProcessOfWorkBook(wb);
    System.out.println(wb.getNumCellStyles());

    for (SheetTemplate sheetTemplate : sheets)
    {
        Sheet newSheet = wb.createSheet(sheetTemplate.getSheetName());
        sheetTemplate.applyTemplate(newSheet, context);
    }

    return wb;
}

public void preProcessOfWorkBook(Workbook wb)
{
    //Transfer of CellStyles
    styleConvert = new HashMap<CellStyle, CellStyle>(styles.size());
    for (CellStyle style : styles)
    {
        CellStyle bufStyle = wb.createCellStyle();
        bufStyle.cloneStyleFrom(style);
        styleConvert.put(style, bufStyle);
    }
}

Он является частью класса WorkbookTemplate, constructTemplate - создает его, а applyTemplate - передает данные из шаблона в экземпляр Workbook.

0 ответов

Другие вопросы по тегам