我试图将固定像元宽度值准确地转换为两个小数点。但是,当生成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));
}
问题尚不清楚。但是,如果要将列宽设置为Excel
,则会在GUI
中显示它,那么必须使用Sheet.setColumnWidth中给出的公式来完成此操作。
[Excel
将列的宽度存储为一个整数值,以字符宽度的1/256为单位,但是将它们显示为作为浮点数适合单元格的字符数。
示例:
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); } } }
结果: