Java 如何在ApachePOI中设置固定列宽

Java 如何在ApachePOI中设置固定列宽,java,apache-poi,Java,Apache Poi,如何在ApachePOI中设置固定列宽。 我想将我的第一列设置为固定宽度 我已尝试使用sheet.setColumnWidth(0,1000); cellStyle.setWrapText(true)//设置未反映的文字包装 public XSSFWorkbook generateReport(List<Dto> result, boolean isRes, boolean isRes1) { XSSFWorkbook workbook = null; XSS

如何在ApachePOI中设置固定列宽。 我想将我的第一列设置为固定宽度

我已尝试使用sheet.setColumnWidth(0,1000); cellStyle.setWrapText(true)//设置未反映的文字包装

    public XSSFWorkbook generateReport(List<Dto> result, boolean isRes, boolean isRes1) {
    XSSFWorkbook workbook = null;
    XSSFSheet sheet = null;
    XSSFRow row = null;
    XSSFCell cell = null;
    String[] headers = null;
    int rowNum = 0;
    int colNum = 0;
    CellStyle cellStyle = null;
    CellStyle headerStyle = null;
    XSSFFont font = null;
    CellStyle datecellStyle = null;
    /* set the weight of the font */



    try {
        workbook = new XSSFWorkbook();

        headers = new String[] { ...values goes here...};
        row = sheet.createRow(rowNum);
        font = workbook.createFont();
        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);

        headerStyle = workbook.createCellStyle();
        headerStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
        headerStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);
        headerStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
        headerStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
        headerStyle.setFillForegroundColor((short) 200);
        headerStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        headerStyle.setFont(font);

        cellStyle = workbook.createCellStyle();
        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);



        datecellStyle = workbook.createCellStyle();
        datecellStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("dd-MMM-yyyy"));
        datecellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        datecellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
        datecellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
        datecellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);



        /**
         * Writing Headers
         */
        for (String header : headers) {
            cell = row.createCell(colNum);
            cell.setCellValue(header);
            cell.setCellStyle(headerStyle);
            ++colNum;
        }

        /**
         * Writing Other Rows
         */
        SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
        for (Dto detail : result) {
            ++rowNum;
            colNum = 0;
            row = sheet.createRow(rowNum);
            cell = row.createCell(colNum);
            //sheet.setColumnWidth(0, 4000);
            cell.
            if(null != detail.getGid()){
                cell.setCellValue(detail.getGid());
            }else{
                cell.setCellValue("-");
            }
            cell.setCellStyle(cellStyle);

            ++colNum;
            cell = row.createCell(colNum);
            if(null != detail.getName()){
                cell.setCellValue(detail.getName());
            }else{
                cell.setCellValue("-");
            }
            cell.setCellStyle(cellStyle);

            ++colNum;
            cell = row.createCell(colNum);
            if(null != detail.getNGid()){
                cell.setCellValue(detail.getNGid());
            }else{
                cell.setCellValue("-");
            }
            cell.setCellStyle(cellStyle);

            ++colNum;
            cell = row.createCell(colNum);
            if(null != detail.getName()){
                cell.setCellValue(detail.getName());
            }else{
                cell.setCellValue("-");
            }
            cell.setCellStyle(cellStyle);




        }

        for (int i = 0; i < headers.length; i++) {
            sheet.autoSizeColumn(i);
        }
        sheet.createFreezePane(1, 1);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return workbook;
}
公共XSSFWorkbook generateReport(列表结果、布尔ISRE、布尔isRes1){ XSSF工作簿=空; XSSFSheet=null; XSSFRow行=null; XSSFCell单元=null; String[]headers=null; int rowNum=0; int colNum=0; CellStyle CellStyle=null; CellStyle headerStyle=null; XSSFFont font=null; CellStyle datecellStyle=null; /*设置字体的重量*/ 试一试{ 工作簿=新XSSFWorkbook(); headers=新字符串[]{…值在此处…}; 行=sheet.createRow(rowNum); font=workbook.createFont(); font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); headerStyle=workbook.createCellStyle(); 头部样式。底部(HSSFCellStyle。中边框); 头部样式。后坐式顶部(HSSFCellStyle。中边框); 标题样式。右(HSSFCellStyle。边框为中); 头部样式。左(HSSFCellStyle。中边框); headerStyle.setFillForegroundColor((短)200); headerStyle.setFillPattern(XSSFCellStyle.SOLID_前景); headerStyle.setFont(字体); cellStyle=workbook.createCellStyle(); cellStyle.SetboordBottom(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); datecellStyle=workbook.createCellStyle(); datecellStyle.setDataFormat(工作簿.getCreationHelper().createDataFormat().getFormat(“dd MMM yyyy”); datecellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); datecellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); datecellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); datecellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); /** *写标题 */ for(字符串标题:标题){ cell=row.createCell(colNum); cell.setCellValue(表头); cell.setCellStyle(headerStyle); ++科尔纳姆; } /** *写其他行 */ SimpleDataFormat日期\格式=新的SimpleDataFormat(“dd-MMM-yyy-HH:mm:ss”); 用于(数据到详细信息:结果){ ++罗纳姆; colNum=0; 行=sheet.createRow(rowNum); cell=row.createCell(colNum); //表。设置柱宽(0,4000); 牢房。 if(null!=detail.getGid()){ cell.setCellValue(detail.getGid()); }否则{ cell.setCellValue(“-”); } cell.setCellStyle(cellStyle); ++科尔纳姆; cell=row.createCell(colNum); if(null!=detail.getName()){ cell.setCellValue(detail.getName()); }否则{ cell.setCellValue(“-”); } cell.setCellStyle(cellStyle); ++科尔纳姆; cell=row.createCell(colNum); if(null!=detail.getNGid()){ cell.setCellValue(detail.getNGid()); }否则{ cell.setCellValue(“-”); } cell.setCellStyle(cellStyle); ++科尔纳姆; cell=row.createCell(colNum); if(null!=detail.getName()){ cell.setCellValue(detail.getName()); }否则{ cell.setCellValue(“-”); } cell.setCellStyle(cellStyle); } 对于(int i=0;i应该可以。。。是因为在循环中将大小重置为“自动”吗

for (int i = 0; i < headers.length; i++) {
    sheet.autoSizeColumn(i);
}
for(int i=0;i

将循环从1开始,改为headers.length。

您可以使用
XSSFWorkbook
setColumnWidth
方法设置列宽。第一个参数是列号(从零开始),第二个参数是宽度。我们需要在这里设置一些小技巧来设置宽度。要将宽度设置为
25
,我们需要将参数传递为
25*256

XSSFSheet sheet = workbook.createSheet("MySheet");
sheet.setColumnWidth(3, 25 * 256);

所以您不想将列0的宽度格式化为自动调整大小?因此,从
sheet.autoSizeColumn(i)中简单排除
i==0
。它可以工作。谢谢您。如何为所有列设置它?要为所有列设置列,您必须首先将列数输入一个变量,然后在循环
工作表中循环代码。setColumnWidth(3,25*256)
其中
3
将是循环中的计数器要一次性设置列宽,我们可以使用
sheet.setDefaultColumnWidth()