精华内容
下载资源
问答
  • 主要介绍了C#设置Excel数据自适应行高、列宽的2种情况,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • excel合并单元格自适应行高的宏

    热门讨论 2012-12-17 16:42:16
    excel合并后的单元格不能自动调整行高,加载这个“宏”以后可以实现自适应功能。
  • 解决合并后的单元格自适应行高的问题,在excel中用“加载宏”命令加载,会出现一个新的工具栏。
  • //判断是否根据内容自适应行高 if (setRowHeight){ Sheet sheet = workbook.getSheetAt(0); for(int i = 0; i (); i ++) { Row row = sheet.getRow(i); setRowHeight(row); } } downLoadExcel(fileName, response, ...

    记录一下

    效果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    一、引入依赖

    <dependency>
    	<groupId>cn.afterturn</groupId>
    	<artifactId>easypoi-spring-boot-starter</artifactId>
    	<version>4.1.3</version>
    </dependency>
    

    二、实体类

    import cn.afterturn.easypoi.excel.annotation.Excel;
    import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
    import lombok.Data;
    import java.util.List;
    
    @Data
    public class TestExportMainVo {
        @Excel(name = "项目",width = 20,needMerge = true)
        private String project;
    
        @ExcelCollection(name = "")
        private List<TestExportSub1Vo> sub1VoList;
    
        public TestExportMainVo(String project, List<TestExportSub1Vo> sub1VoList) {
            this.project = project;
            this.sub1VoList = sub1VoList;
        }
    }
    
    @Data
    public class TestExportSub1Vo {
        @Excel(name = "序号",width = 8,needMerge = true)
        private String sort;
    
        @Excel(name = "依据",width = 30,needMerge = true)
        private String basis;
    
        @ExcelCollection(name = "")
        private List<TestExportSub2Vo> sub2VoList;
    
        public TestExportSub1Vo(String sort, String basis, List<TestExportSub2Vo> sub2VoList) {
            this.sort = sort;
            this.basis = basis;
            this.sub2VoList = sub2VoList;
        }
    }
    
    @Data
    public class TestExportSub2Vo {
        @Excel(name = "操作步骤",width = 60)
        private String step;
    
        @Excel(name = "条款",width = 12)
        private String clause;
    
        public TestExportSub2Vo(String step, String clause) {
            this.step = step;
            this.clause = clause;
        }
    }
    

    @Excel注解中,needMerge =true 用于合并单元格

    三、excel工具类

    1、样式工具类 ExcelExportStylerUitl

    import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
    import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
    import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
    import org.apache.poi.ss.usermodel.*;
    
    /**
     * @author fuHua
     * @date 2021年05月27日 14:55
     */
    public class ExcelExportStylerUitl implements IExcelExportStyler {
    
        private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
        private static final short FONT_SIZE_TEN = 10;
        private static final short FONT_SIZE_ELEVEN = 11;
        private static final short FONT_SIZE_TWELVE = 12;
        /**
         * 大标题样式
         */
        private CellStyle headerStyle;
        /**
         * 每列标题样式
         */
        private CellStyle titleStyle;
        /**
         * 数据行样式
         */
        private CellStyle styles;
    
        public ExcelExportStylerUitl(Workbook workbook) {
            this.init(workbook);
        }
    
        /**
         * 初始化样式
         * @param workbook
         */
        private void init(Workbook workbook) {
            this.headerStyle = initHeaderStyle(workbook);
            this.titleStyle = initTitleStyle(workbook);
            this.styles = initStyles(workbook);
        }
    
        /**
         * 大标题样式
         * @param color
         * @return
         */
        @Override
        public CellStyle getHeaderStyle(short color) {
            return headerStyle;
        }
    
        /**
         * 每列标题样式
         * @param color
         * @return
         */
        @Override
        public CellStyle getTitleStyle(short color) {
            return titleStyle;
        }
    
        /**
         * 数据行样式
         * @param parity 可以用来表示奇偶行
         * @param entity 数据内容
         * @return 样式
         */
        @Override
        public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
            return styles;
        }
    
        /**
         * 获取样式方法
         * @param dataRow 数据行
         * @param obj     对象
         * @param data    数据
         */
        @Override
        public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
            return getStyles(true, entity);
        }
    
        /**
         * 模板使用的样式设置
         */
        @Override
        public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
            return null;
        }
    
        /**
         * 初始化--大标题样式
         * @param workbook
         * @return
         */
        private CellStyle initHeaderStyle(Workbook workbook) {
            CellStyle style = getBaseCellStyle(workbook);
            style.setFont(getFont(workbook, (short) 14, true));
            return style;
        }
    
        /**
         * 初始化--每列标题样式
         * @param workbook
         * @return
         */
        private CellStyle initTitleStyle(Workbook workbook) {
            CellStyle style = getBaseCellStyle(workbook);
            style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true));
            //背景色
    //        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            return style;
        }
    
        /**
         * 初始化--数据行样式
         * @param workbook
         * @return
         */
        private CellStyle initStyles(Workbook workbook) {
            CellStyle style = getBaseCellStyle(workbook);
            style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false));
            style.setDataFormat(STRING_FORMAT);
            return style;
        }
    
        /**
         * 基础样式
         * @return
         */
        private CellStyle getBaseCellStyle(Workbook workbook) {
            CellStyle style = workbook.createCellStyle();
            //下边框
            style.setBorderBottom(BorderStyle.THIN);
            //左边框
            style.setBorderLeft(BorderStyle.THIN);
            //上边框
            style.setBorderTop(BorderStyle.THIN);
            //右边框
            style.setBorderRight(BorderStyle.THIN);
            //水平居中
            style.setAlignment(HorizontalAlignment.CENTER);
            //上下居中
            style.setVerticalAlignment(VerticalAlignment.CENTER);
            //设置自动换行
            style.setWrapText(true);
            return style;
        }
    
        /**
         * 字体样式
         * @param size   字体大小
         * @param isBold 是否加粗
         * @return
         */
        private Font getFont(Workbook workbook, short size, boolean isBold) {
            Font font = workbook.createFont();
            //字体样式
            font.setFontName("宋体");
            //是否加粗
            font.setBold(isBold);
            //字体大小
            font.setFontHeightInPoints(size);
            return font;
        }
    }
    
    

    2、导出工具类 ExcelUtil

    import cn.afterturn.easypoi.excel.ExcelExportUtil;
    import cn.afterturn.easypoi.excel.entity.ExportParams;
    import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.util.List;
    
    /**
     * @author fuHua
     * @date 2021年06月04日 14:09
     */
    public class ExcelUtil {
        public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, ExcelType type, boolean isOneToMany, HttpServletResponse response){
            ExportParams exportParams = new ExportParams(title, sheetName,type);
            exportParams.setStyle(ExcelExportStylerUitl.class);
            Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
            if (workbook != null);
            //判断是否是一对多
            if (isOneToMany){
                setRowHeight(workbook);
            }
            downLoadExcel(fileName, response, workbook);
        }
    
        public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName,  boolean setRowHeight, HttpServletResponse response){
            ExportParams exportParams = new ExportParams(title, sheetName);
            exportParams.setStyle(ExcelExportStylerUitl.class);
            Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
            if (workbook != null);
            //判断是否根据内容自适应行高
            if (setRowHeight){
                Sheet sheet = workbook.getSheetAt(0);
                for(int i = 0; i <= sheet.getLastRowNum(); i ++) {
                    Row row = sheet.getRow(i);
                    setRowHeight(row);
                }
            }
            downLoadExcel(fileName, response, workbook);
        }
    
        private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
            try {
                response.setCharacterEncoding("UTF-8");
                response.setHeader("content-Type", "application/vnd.ms-excel");
                response.setHeader("Content-Disposition",
                        "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
                workbook.write(response.getOutputStream());
            } catch (IOException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
    
        /**
         * 一对多,设置行高
         */
        private static void setRowHeight(Workbook workbook){
            Sheet sheet = workbook.getSheetAt(0);
            //设置第4列的列宽为60(下标从0开始),TestExportSub2Vo 不知道为什么设置了列宽但是不起作用,只能在这里单独设置
            sheet.setColumnWidth(3,60*256);
            for(int i = 0; i <= sheet.getLastRowNum(); i ++) {
                Row row = sheet.getRow(i);
                if (i==0){
                    //设置第一行的行高(表格标题)
                    row.setHeightInPoints(35);
                }else if (i == 1){
                    //设置第二行的行高(表格表头)
                    row.setHeightInPoints(25);
                }else {
                	//设置其他行的行高根据内容自适应
                    setRowHeight(row);
                }
            }
        }
    
        private static void setRowHeight(Row row){
            //根据内容长度设置行高
            int enterCnt = 0;
            for(int j = 0; j < row.getPhysicalNumberOfCells(); j ++) {
                int rwsTemp = row.getCell(j).toString().length();
                //这里取每一行中的每一列字符长度最大的那一列的字符
                if (rwsTemp > enterCnt) {
                    enterCnt = rwsTemp;
                }
            }
            //设置默认行高为35
            row.setHeightInPoints(35);
            //如果字符长度大于35,判断大了多少倍,根据倍数来设置相应的行高
            if (enterCnt>35){
                float d = enterCnt/35;
                float f = 35*d;
                /*if (d>2 && d<4){
                    f = 35*2;
                }else if(d>=4 && d<6){
                    f = 35*3;
                }else if (d>=6 && d<8){
                    f = 35*4;
                }*/
                row.setHeightInPoints(f);
            }
        }
    }
    

    至于easyexcel要合并单元格的话,它没有像 easypoi 一样,有个属性可以控制合并,easyexcel需要自己写代码控制。然后根据内容自适应行高的话,easyexcel 应该也和这个差不多吧,还没研究过,下次有空去看看

    展开全文
  • POI java导出Excel设置自适应行高

    千次阅读 2020-11-18 11:54:12
    需求:根据单元格的内容自动设置... * 设置自适应行高的方法 */ public int setHeight(HSSFRow row, int cellIndex){ HSSFCell cell = row.getCell(cellIndex); //1.先取出内容 计算长度 (这个方法在后面...) .

    本文章参考于:https://www.cnblogs.com/dtts/p/4741575.html 

    需求:根据单元格的内容自动设置行高

    代码:

      /**
         * 设置自适应行高的方法
         */
        public int setHeight(HSSFRow row, int cellIndex){
            HSSFCell cell = row.getCell(cellIndex);
            //1.先取出内容 计算长度 (这个方法在后面...)
            String content = getCellContent(cell);
            System.out.println("我想看看取出的内容对不对"+content);
            //计算字体的高度
            HSSFCellStyle cellStyle = cell.getCellStyle();
            HSSFFont font = cellStyle.getFont(row.getSheet().getWorkbook());
            //字体的高度
            short fontHeight = font.getFontHeight();
            System.out.println("我这里输出的是11号的字体的高度,貌似要除以20才是Excel的"+fontHeight);//11号字体的高度  这里不重要(本方法也用不着)  这里设置每一行都是18磅
            //计算字符的宽度
            //代入默认字符宽度8://字符像素宽度 = 字体宽度 * 字符个数 + 边距
            //像素 = 5 + (字符个数 * 7)
            int i = 5 + (content.toCharArray().length * 7);
            //POI中的字符宽度算法是:double 宽度 = (字符个数 * (字符宽度 - 1) + 5) / (字符宽度 - 1) * 256;
            double poiWidth = content.length() * 12 / 7 * 256;
            //然后再四舍五入成整数。
            int width = (int) Math.ceil(poiWidth);
            System.out.println("我这里计算的是字符串长度的宽度"+width);
            //2.除以宽度 计算行数乘以行高   (256*80) 是我设置的我的单元格列的宽度
            double rowNum = (double) width/(256*80);
            System.out.println("我是计算出来的行数"+rowNum);
            int rowNums = (int)Math.ceil(rowNum);
            System.out.println("在这里计算的是多少行,我想知道算对了没"+rowNums);
            int height = rowNums* 420;//这个420 是我为每一行设置的高度 有点大,可以用字体的高度加一点(前面方法中有计算字体高度的方法)
            return height;//直接设置行高为这个值就OK了
        }
    private static String getCellContent(HSSFCell cell) {
        if(null == cell){
            return "";
        }
        String result = "";
        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_NUMERIC:
                String s = String.valueOf(cell.getNumericCellValue());
                if (s != null) {
                    if (s.endsWith(".0")) {
                        s = s.substring(0, s.length() - 2);
                    }
                }
                result = s;
                break;
            case Cell.CELL_TYPE_STRING:
                result = cell.getStringCellValue().trim();
                break;
            case Cell.CELL_TYPE_BLANK:
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                result = String.valueOf(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_ERROR:
                break;
            default:
                break;
        }
        return result;
    }
    展开全文
  • Java 设置Excel自适应行高、列宽

    千次阅读 2020-02-11 11:17:02
    在excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法。设置自适应时,可考虑2种情况: 1.固定数据,设置行高、列宽自适应数据(常见的设置自适应方法) 2.固定列宽,...
    在excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法。设置自适应时,可考虑2种情况:
    1.固定数据,设置行高、列宽自适应数据(常见的设置自适应方法)
    2.固定列宽,缩小数据字体大小适应列宽
    本文将通过java程序来介绍具体的自适应设置方法。
    
    工具:Free Spire.XLS for Java (免费版)
    :可通过官网下载包,并解压将lib文件夹下的jar文件导入java程序;或者通过maven仓库下载并导入。
    参考如下导入效果:


    Java 代码示例

    1. 固定数据,设置行高、列宽自适应数据
    (此自适应方法可对指定单元格数据或者整个工作表来设置)
    import com.spire.xls.*;
    
    public class AutoFit {
        public static void main(String[] args) {
            //创建一个Workbook类的对象,并加载测试文档
            Workbook wb = new Workbook();
            wb.loadFromFile("sample.xlsx");
    
            //获取工作表
            Worksheet sheet = wb.getWorksheets().get(0);
    
            //设置行高、列宽为自适应(应用于指定数据范围)
            sheet.getAllocatedRange().get("A1:E14").autoFitRows();
            sheet.getAllocatedRange().get("A1:E14").autoFitColumns();
    
            /*//设置行高、列宽为自适应(应用于整个工作表)
            sheet.getAllocatedRange().autoFitRows();
            sheet.getAllocatedRange().autoFitColumns();*/
    
            //保存文档
            wb.saveToFile("result.xlsx", FileFormat.Version2010);
            wb.dispose();
        }
    }
    
    自适应设置效果:

     

    2. 缩小数据字体大小适应列宽

    import com.spire.xls.*;
    
    public class ShrinkToFit {
        public static void main(String[] args) {
            Workbook wb = new Workbook();
            wb.loadFromFile("test.xlsx");
            //获取第一张工作表
            Worksheet sheet = wb.getWorksheets().get(0);
    
            //指定需要自动缩小字体的单元格范围
            CellRange cell = (CellRange) sheet.get("A1");
    
            //设置ShrinkToFit为true,缩小数据以适应单元格
            cell.getStyle().setShrinkToFit(true);
    
            //保存文档
            wb.saveToFile("ShrinkTextToFitCell.xlsx", ExcelVersion.Version2013);
            wb.dispose();
        }
    }
    

    文本缩小效果:

     

    (本文完)

    展开全文
  • layui设置自适应行高

    千次阅读 2020-03-26 23:33:33
    .layui-table-cell { height: auto !important; white-space: normal; }
    .layui-table-cell {
                height: auto !important;
                white-space: normal;
            }
    
    
    展开全文
  • NPOI导出Excel自适应行高

    千次阅读 2020-01-10 11:28:40
    NPOI下,怎样自适应行高,因为没有现成的方法,使用如下逻辑兼容自适应方法,适用于03,07版本导出,使用于字符,数字,字母等 for (int i = 0; i < Rows.Count; i++) { if (sheet.GetRow(i) == null) { ...
  • 目录EasyPOI 根据模板导出excel时,无法自适应行高得解决方案记录首先说一下问题得场景第一步第二步第三步第四步第五步第六步第七步 (就是这个方法!) EasyPOI 根据模板导出excel时,无法自适应行高得解决方案记录...
  • spreadjs_自适应行高-demo
  • 在Microsoft Excel中,在单元格格式设置中可手动设置自适应行高或自适应列宽,但通过代码,我们可以通过方法AutoFitColumns()或者AutoFitRows()来设置指定数据范围或整个工作表的自适应行高、...
  • 话不多说,上图,添加第三方包:BalaReva.Excel.Activities, 使用AutoFit Columns 设置列宽,设置属性 自动调整列宽、自动调整行高
  • Cell自适应行高

    2016-09-19 13:06:00
    在UITableView中要想cell自适应行高,其实就是UIlabel上的文本根据文本以及文本字体大(即boundingRectWithSize方法)来进行高度的调整,从而重新对cell上UIlabel下面的其他控件进行frame上的y的改变,达到cell上的...
  • 再设置一下repositoryItemMemoEdit高度自适应,这样子就完成了自动换行了 repositoryItemMemoEdit1.AutoHeight = true; 之后需要使用事件advBandedGridView1_CalcRowHeight。这个事件是让我们可以单独设置...
  • easypoi一对多,合并单元格,并且根据内容自适应行高_符华-的博客-CSDN博客效果一、引入依赖<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</...
  • Delphi FastReport 自适应行高

    千次阅读 2019-01-21 10:09:23
    上级容器的属性Stretched := True; Memo的StretchMode属性设置为:smActualHeight...如果一行有多个Memo,只有一列是自适应高度,可以将其他列的StretchMode设置为smMaxHeight,这样就统一行的样式,模拟了execl。 ...
  • 自定义表格,可锁定双向表头,自适应列宽,自适应行高,下拉刷新,上拉加载,快速集成 效果展示 工程集成说明 第一步 //在工程gradle文件里 allprojects { repositories { ....... maven { url 'https://jitpack.io' } ...
  • 在cell利用layout布局时,可以利用[self.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height来获得约束后的contentView的高度,但前提是cell.bounds = UIScreen.mainScreen.bounds;...
  • 在excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法。设置自适应时,可考虑2种情况:固定数据,设置行高、列宽自适应数据(常见的设置自适应方法)固定列宽,缩小数据字体...
  • 对动态高度的控件根据文字的多少确定高度,从而得到总的cell的高度,对于行高将计算的结果存到对应的数据源model中,返回单元格高度的时候,直接返回model的高度即可. 注意如果可以对数据进行修改的话,记得调用的时候...
  • PB 表格自适应行高,折行显示

    千次阅读 2018-10-17 18:07:13
    因需求开发报表,所以。。。。遇到了这种情况 这个边框是字段的general》border属性 加了一个边框 box(2) 做出来就是这种效果 百度的调各种auto height什么的都不管用 千钧一发之际。...怎么做...
  • ExtJS Grid自适应行高

    2014-09-17 16:25:00
    //ExtJS3中实现自适应行高 /*metadata.attr = 'style="white-space:normal;"'; return value;*/ //ExtJS4中实现自适应行高 return ';">' + value + '</div>' } 转载于:...
  • 一直感觉高深莫测的Cell自适应行高,终于搞明白了他内在的奥秘。最初小伙伴们告诉我有第三方链接地址:点击打开链接 但是我这个人比较奇怪,犟脾气上来以后飞得自己写!于是就用原生的Autolayout写了一下。大概思路...
  • POI excel 单元个的内容 自适应行高

    千次阅读 2014-12-05 11:03:06
    POI excel 单元个的内容 自适应行高   public static void main(String[] args) { InputStream is = null; Workbook book = null; try { is = new FileInputStream("D:\\test.xls"); ...
  • npoi自适应行高和列宽

    千次阅读 2016-07-22 18:37:25
    下面来谈一谈高度自适应解决方法, 高度自适应是指内容换行后行高能够自动增加以完整的显示内容,高度自适应是我自己想出来的,和宽度自适应很类似:    style= "font-family:Microsoft YaHei;...
  • Qt无论TableView还是TableWidget默认的表头都是一行,不能换行。现在客户需要显示更多信息,需要自动换行,自动拉高,字符过长显示...的表头,重新修改了HeaderView使之能满足需要。
  • iReport自适应行高

    2011-10-14 09:42:00
    iReport设计报表,当Detail的行高需要自适应时,应按如下设置: 1. 所有TextField的 Position Type = Fix Relative to Top (或Fix Relative to Bottom) 2. 所有TextField的 Stretch Type = Relative to Band Height...
  • iOS 7.0之后tableview多了一个属性:UITableViewAutomaticDimension,此后利用xib创建的cell,用来实现tableviewcell自适应行高就变得简单高效许多。只是有一个前提:cell是用xib方式自定义创建,Autolayout做的约束...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,252
精华内容 3,700
关键字:

自适应行高