Как установить фиксированные значения ширины столбца в дюймах.Apache POI - PullRequest
0 голосов
/ 20 сентября 2019

Я устанавливаю фиксированную ширину для столбцов для Excel, создаваемого с помощью Apache POIУ меня фиксированные значения в дюймах.Итак, я хочу знать, какое измерение использует Apcahe POI в качестве параметра.И как я могу назвать это, используя значения в дюймах?

Sheet sheet; sheet.setColumnWidth(0, 100);

1 Ответ

1 голос
/ 20 сентября 2019

In Sheet.setColumnWidth сказано, что единица измерения здесь составляет 1/25 от ширины символа.Также сообщается, как именно Excel вычисляет это.

Так что если вы хотите, чтобы Excel показывал ширину столбца как 10, используя шрифт по умолчанию Calibri 11, тогда width256 должен быть рассчитан как (int)Math.round((10*Units.DEFAULT_CHARACTER_WIDTH+5f)/Units.DEFAULT_CHARACTER_WIDTH*256f).

Если необходимо задать ширину столбца в дюймах, то сначала нужно перевести дюймы в пиксели, а затем width256 следует рассчитать как (int)Math.round(widthPx/Units.DEFAULT_CHARACTER_WIDTH*256f).

Существует Units в качестве вспомогательного класса для управления подразделениями.

Пример:

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

class ExcelSetColumnWidth {

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

  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
   Sheet sheet = workbook.createSheet();
   int widthExcel = 10;
   int width256 = (int)Math.round((widthExcel*Units.DEFAULT_CHARACTER_WIDTH+5f)/Units.DEFAULT_CHARACTER_WIDTH*256f);
   System.out.println(width256);
   sheet.setColumnWidth(0, width256);
   sheet.createRow(0).createCell(0).setCellValue("1234567890"); // Excel shows column width as 10 using default font Calibri 11

   float widthInch = 1f;
   float widthPx = widthInch * Units.PIXEL_DPI;
   width256 = (int)Math.round(widthPx/Units.DEFAULT_CHARACTER_WIDTH*256f);
   System.out.println(width256);
   sheet.setColumnWidth(1, width256);
   System.out.println(sheet.getColumnWidthInPixels(1)); // should be round 96 pixels for an inch
   sheet.createRow(1).createCell(1).setCellValue("1 inch width"); // column is 1 inch width

   workbook.write(fileout);
  }

 }
}
...