Прочитайте Apache POI XSSFWorkbook в ячейках Aspose - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь создать файл Excel с водяным знаком в JAVA.

Я использую следующий подход: 1. используя Apache POI api для создания книги Excel 2. для добавления водяных знаков используйте книгу poi в ячейках aspose клеток.

Когда я пытаюсь использовать рабочую книгу POI в ячейке, я получаю ошибку - рабочая книга не ожидается. Пожалуйста, помогите, так как я новичок в весне / JAVA

PFB мой код:

package com.mudassir.exceltest.testExcel;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Header;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class TestExcelApplication {

    private static String[] COLUMNs = {"Id", "Name", "Address", "Age"};
    private static List<Customer> customers = Arrays.asList(
            new Customer("1", "Jack Smith", "Massachusetts", 23),
            new Customer("2", "Adam Johnson", "New York", 27),
            new Customer("3", "Katherin Carter", "Washington DC", 26),
            new Customer("4", "Jack London", "Nevada", 33), 
            new Customer("5", "Jason Bourne", "California", 36));

    public static void main(String[] args) throws IOException {

        Workbook workbook = new XSSFWorkbook();
        CreationHelper createHelper = workbook.getCreationHelper();

        Sheet sheet = workbook.createSheet("Customers");

        Font headerFont = workbook.createFont();
        headerFont.setBold(true);
        headerFont.setColor(IndexedColors.BLUE.getIndex());

        CellStyle headerCellStyle = workbook.createCellStyle();
        headerCellStyle.setFont(headerFont);

        // Row for Header
        Row headerRow = sheet.createRow(0);

        // Header
        for (int col = 0; col < COLUMNs.length; col++) {
            if(col== 0){
            Cell cell = headerRow.createCell(col);
            cell.setCellValue(COLUMNs[col]);
            cell.setCellStyle(headerCellStyle);
            }
            else{
                Cell cell = headerRow.createCell(col+1);
                cell.setCellValue(COLUMNs[col]);
                cell.setCellStyle(headerCellStyle);
            }

        }

        // CellStyle for Age
        CellStyle ageCellStyle = workbook.createCellStyle();
        ageCellStyle.setDataFormat(createHelper.createDataFormat().getFormat("#"));

        int rowIdx = 1;
        for (Customer customer : customers) {
            Row row = sheet.createRow(rowIdx++);

            row.createCell(0).setCellValue(customer.getId());
            row.createCell(2).setCellValue(customer.getName());
            row.createCell(3).setCellValue(customer.getAddress());

            Cell ageCell = row.createCell(4);
            ageCell.setCellValue(customer.getAge());
            ageCell.setCellStyle(ageCellStyle);
        }

        // read the image to the stream
        final FileInputStream stream = new FileInputStream("image.png");
        final CreationHelper helper = workbook.getCreationHelper();
        final Drawing drawing = sheet.createDrawingPatriarch();

        final ClientAnchor anchor = helper.createClientAnchor();
        //anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );


        final int pictureIndex =
                workbook.addPicture(IOUtils.toByteArray(stream), Workbook.PICTURE_TYPE_PNG);


        anchor.setCol1( 0 );
        anchor.setRow1( 9 ); // same row is okay
        anchor.setRow2( 11 );
        anchor.setCol2( 2 );
        final Picture pict = drawing.createPicture( anchor, pictureIndex );
        //pict.resize();

        Header header = sheet.getHeader();
        header.setCenter("&[pict]");
        header.setLeft("Left First Page Header");
        header.setRight("Right First Page Header");

        sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));
        sheet.addMergedRegion(new CellRangeAddress(1,1,0,1));
        sheet.addMergedRegion(new CellRangeAddress(2,2,0,1));
        sheet.addMergedRegion(new CellRangeAddress(3,3,0,1));
        sheet.addMergedRegion(new CellRangeAddress(4,4,0,1));

        com.aspose.cells.Workbook workbook1=new com.aspose.cells.Workbook(workbook);


        FileOutputStream fileOut = new FileOutputStream("customerstest.xlsx");
        workbook.write(fileOut);
        fileOut.close();
        workbook.close();
    }
}

Пожалуйста, помогите мне с тем, как я могу использовать рабочую книгу POI в рабочей тетради ячейки.

Ниже оператор кода не работает, скорее выдает ошибку несоответствия типов:

com.aspose.cells.Workbook workbook1=new com.aspose.cells.Workbook(workbook);

Спасибо

1 Ответ

0 голосов
/ 05 июля 2018

Ну, Aspose.Cells и POI XSSF - это разные API с разными архитектурами, оба имеют разные объекты и атрибуты. Я не уверен, что можно легко разобрать объект в других API, или он может этого не делать. Aspose.Cells будет читать и анализировать действительные книги Excel (которые должны соответствовать стандартам и спецификациям MS Excel).

Я думаю, что вы можете попытаться сохранить свою книгу в файл Excel, используя API-интерфейсы POI XSSF, а затем использовать Aspose.Cells для чтения этого файла. Если выходной файл (по POI XSSF) соответствует стандартам и спецификациям MS Excel, то его следует также открыть в MS Excel. Если он открывается в MS Excel, то, конечно, Aspose.Cells также должен нормально загрузить файл. Если вы обнаружите какую-либо проблему, из-за которой Aspose.Cells не смог прочитать окончательный файл, то это проблема с Aspose.Cells. В противном случае я не думаю, что это проблема с Aspose.Cells. Короче говоря, вы можете просто сохранить книгу Excel (с помощью POI XSSF) на диск (файл Excel) или сначала в потоки, а затем использовать API-интерфейсы Aspose.Cells для загрузки ее с диска или потоков, она должна работать нормально.

Я работаю разработчиком поддержки / евангелистом в Aspose.

...