有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何设置以英寸为单位的固定列宽值。阿帕奇POI

Im为使用Apache POI创建的excel Im设置固定的列宽度。我有以英寸为单位的固定值。所以我想知道Apcahe POI作为参数的测量值是什么。我怎么能用英寸来表示呢

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


共 (1) 个答案

  1. # 1 楼答案

    Sheet.setColumnWidth中,被告知这里的测量单位是字符宽度的1/256。它还被告知Excel是如何精确计算的

    因此,如果希望Excel使用默认字体Calibri 11将列宽显示为10,那么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);
      }
    
     }
    }