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);
}
}
}