如何在 Apache POI 中设置固定列宽 [英] How to set fixed column width in Apache POI

查看:60
本文介绍了如何在 Apache POI 中设置固定列宽的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 Apache POI 中设置固定列宽.我想让我的第一列固定宽度.

How to set fixed column width in Apache POI. I want to make my first column to fixed width.

我试过 sheet.setColumnWidth(0, 1000);cellStyle.setWrapText(true);//设置自动换行它不反映

I have tried with sheet.setColumnWidth(0, 1000); cellStyle.setWrapText(true); //Set wordwrap it is not reflecting

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

推荐答案

setColumnWidth(int, int) 应该可以工作……是因为您在循环中将尺寸重置为 auto 吗?>

setColumnWidth(int, int) should work ... is it because you reset the sizes to auto in your loop?

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

从 1 开始循环到 headers.length.

Start your loop from 1 to headers.length instead.

这篇关于如何在 Apache POI 中设置固定列宽的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆