Как объединить ячейки в последнюю строку в пои

Я создаю книгу, используя apache poi, где я пытаюсь объединить определенную ячейку в конец вывода. Я использую функцию mergeRegion, и ячейка объединяется, но эта ячейка не объединяется до конца строки, это всегда заканчивается на одну строку раньше,

я прикрепляю сюда скрин объединенная ячейка

Я хочу, чтобы ячейка была правильно объединена, я публикую свой код здесь

    for(MarshActiveUser marshActiveUser : listOfMarshUser){

           /***/
            sheet.addMergedRegion(new CellRangeAddress(
                    j, //first row (0-based)
                    j, //last row (0-based)
                    18, //first column (0-based)
                     20 //last column (0-based)
                      ));
            /***/

            int columnNo = 0;
            row = sheet.createRow(j+1);
            cell = row.createCell(columnNo);
            cell.setCellValue(new HSSFRichTextString(String.valueOf(row.getRowNum())));
            lockedCellStyle.setFont(hSSFFont);
            sheet.autoSizeColumn(0);
            cell.setCellStyle(lockedCellStyle);
            columnNo = 1;
            cell = row.createCell(columnNo);

            if(null != marshActiveUser.getFistName()){

                cell.setCellValue(new HSSFRichTextString(marshActiveUser.getFistName()));
                lockedCellStyle.setFont(hSSFFont);
                sheet.autoSizeColumn(1);
                cell.setCellStyle(lockedCellStyle);

            }else{
                cell.setCellValue(new HSSFRichTextString(" "));
                 cell.setCellStyle(lockedCellStyle);
            }

Я попытался начать с rowCount +1, но это не разрешено в коде, пожалуйста, помогите мне. Заранее спасибо.


person storyteller    schedule 27.10.2016    source источник
comment
Пробовали ли вы приведенный выше код с приращением поста j++ вместо j+1 в row = sheet.createRow(j+1); ??   -  person Khuzi    schedule 27.10.2016
comment
@Khuzi я сделал, но он пропускает одну строку   -  person storyteller    schedule 27.10.2016


Ответы (1)


Возникла проблема с увеличением rowCount. Предварительное увеличение количества строк пропускает вашу последнюю строку для слияния. Изменил его, чтобы опубликовать инкремент rowcount++, и он работает, как ожидалось.

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class SimpleExcelWriterExample {

 public static void main(String[] args) throws IOException {
     HSSFWorkbook workbook = new HSSFWorkbook();
     HSSFSheet sheet = workbook.createSheet("Java Books");

        Object[][] bookData = {
                {"Head First Java", "Kathy Serria", 79},
                {"Effective Java", "Joshua Bloch", 36},
                {"Clean Code", "Robert martin", 42},
                {"Thinking in Java", "Bruce Eckel", 35},
        };

        int rowCount = 1;

        for (Object[] aBook : bookData) {

            /***/
            sheet.addMergedRegion(new CellRangeAddress(
                    rowCount, //first row (0-based)
                    rowCount, //last row (0-based)
                      3, //first column (0-based)
                      5 //last column (0-based)
                      ));
            /***/
            Row row = sheet.createRow(rowCount++);

            int columnCount = 0;

            for (Object field : aBook) {
                Cell cell = row.createCell(++columnCount);
                if (field instanceof String) {
                    cell.setCellValue((String) field);
                } else if (field instanceof Integer) {
                    cell.setCellValue((Integer) field);
                }
            }

        }


        try{
            FileOutputStream outputStream = new FileOutputStream("D://JavaBooks.xls");
            workbook.write(outputStream);
        }catch(Exception e){}

}}

Вывод:

введите описание изображения здесь

person Khuzi    schedule 27.10.2016
comment
спасибо, ваше решение было использовано для этого фрагмента кода, но я применяю ваше решение к другому фрагменту кода, который не работает. Я редактирую свой пост, пожалуйста, посмотрите один раз. - person storyteller; 27.10.2016