Как установить ширину ячейки в двух десятичных точках в Excel Apache POI - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь получить фиксированные значения ширины ячейки с точностью до двух десятичных точек. Но когда генерируется файл Excel, ширина ячейки округляется до целого числа размера ширины, которого я хочу достичь. Можно ли это сделать?

  private Sheet setupSheet(XSSFWorkbook workbook) {

    Sheet xssfSheet;
    xssfSheet = workbook.createSheet("report");
    xssfSheet.getPrintSetup().setLandscape(true);
    xssfSheet.getPrintSetup().setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);
    xssfSheet.setMargin(Sheet.HeaderMargin, 0.1);
    xssfSheet.setMargin(Sheet.BottomMargin, 0.1);
    xssfSheet.setMargin(Sheet.LeftMargin, 0.1);
    xssfSheet.setMargin(Sheet.RightMargin, 0.1);
    xssfSheet.setFitToPage(true);
    PrintSetup ps = xssfSheet.getPrintSetup();
    ps.setFitWidth((short) 1);
    ps.setFitHeight((short) 0);
    return xssfSheet;
}

Sheet sheet = setupSheet(workbook);

int widthExcel = 10;
int width256 = (int) Math.round((widthExcel * Units.EMU_PER_POINT + 5f) / Units.EMU_PER_POINT * 256f);
            sheet.setColumnWidth(0, (int) (width256 * 1.14));
            sheet.setColumnWidth(1, (int) (width256 * 0.49));
            sheet.setColumnWidth(2, (int) (width256 * 0.85));
            sheet.setColumnWidth(3, (int) (width256 * 1.45));

            sheet.setColumnWidth(4, (int) (width256 * 0.46));
            sheet.setColumnWidth(5, (int) (width256 * 2.85));
            sheet.setColumnWidth(6, (int) (width256 * 2.02));
            sheet.setColumnWidth(7, (int) (width256 * 0.66));

            sheet.setColumnWidth(8, (int) (width256 * 0.72));
            sheet.setColumnWidth(9, (int) (width256 * 0.86));
            sheet.setColumnWidth(10, (int) (width256 * 0.75));
            sheet.setColumnWidth(11, (int) (width256 * 0.90));
 }

1 Ответ

1 голос
/ 20 января 2020

Вопрос не совсем понятен. Но если вы хотите установить ширину столбца, как Excel покажет ее в GUI, то это должно быть сделано с помощью формулы, приведенной в Sheet.setColumnWidth .

* 1007. * сохраняет ширину столбца в виде целочисленных значений в 1/25 ширины символа, но показывает их как количество символов, помещаемых в ячейку, как число с плавающей запятой.

Пример:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.util.Units;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

class CreateExcelColumnWidth {

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

  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("./Excel.xlsx") ) {

   Sheet excelSheet = workbook.createSheet();

   float widthExcel = 10.71f;
   int width256 = (int)Math.floor((widthExcel * Units.DEFAULT_CHARACTER_WIDTH + 5) / Units.DEFAULT_CHARACTER_WIDTH * 256);
   excelSheet.setColumnWidth(0, width256);

   workbook.write(fileout);
  }
 }
}

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...