精华内容
下载资源
问答
  • gridview 列宽自适应 现有的方法都是下面的这句代码,如果不分页的话,会导致加载数据的时候很卡。 this.gridView1.BestFitColumns();//自动调整所有字段宽度 后来经过涛神的指点发现了dev有以下属性,可以设置成...

    gridview 列宽自适应

    现有的方法都是下面的这句代码,如果不分页的话,会导致加载数据的时候很卡。

    this.gridView1.BestFitColumns();//自动调整所有字段宽度

    后来经过涛神的指点发现了dev有以下属性,可以设置成只对某些数量的行数进行分配计算,这样使用该代码的时候就不会拖慢速度了,或者也可以设置它的模式(bestfitmode) 为 fast模式也行。
    在这里插入图片描述

    展开全文
  • 因为项目中需要使用到ExcelWriter导出excel的列宽自适应,下面解决该问题的经过,希望可以对遇到同样问题的开发者有所帮助。 一、通过查询Hutool官方的api文档发现autoSizeColumn()方法 官方api链接 但是,在代码...

    前言:

    因为项目中需要使用到ExcelWriter导出excel的列宽自适应,下面为解决该问题的经过,希望可以对遇到同样问题的开发者有所帮助。
    一、通过查询Hutool官方的api文档发现autoSizeColumn()方法
    官方api链接
    在这里插入图片描述
    但是,在代码中使用该方法后发现并没有起作用。
    二、通过搜索发现其他开发者使用Sheet强制转换为SXSSFSheet,后再调用改方法可以成功设置自适应。

            SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
            sheet.trackAllColumnsForAutoSizing();
            writer.autoSizeColumnAll();
    

    再次尝试使用后报错:
    java.lang.ClassCastException: org.apache.poi.hssf.usermodel.HSSFSheet cannot be cast to org.apache.poi.xssf.streaming.SXSSFSheet
    三、自定义方法

        /**
         * 自适应宽度(中文支持)
         * @param sheet
         * @param size 因为for循环从0开始,size值为 列数-1
         */
        public static void setSizeColumn(Sheet sheet, int size) {
            for (int columnNum = 0; columnNum <= size; columnNum++) {
                int columnWidth = sheet.getColumnWidth(columnNum) / 256;
                for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
                    Row currentRow;
                    //当前行未被使用过
                    if (sheet.getRow(rowNum) == null) {
                        currentRow = sheet.createRow(rowNum);
                    } else {
                        currentRow = sheet.getRow(rowNum);
                    }
    
                    if (currentRow.getCell(columnNum) != null) {
                        Cell currentCell = currentRow.getCell(columnNum);
                        if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
                            int length = currentCell.getStringCellValue().getBytes().length;
                            if (columnWidth < length) {
                                columnWidth = length;
                            }
                        }
                    }
                }
                sheet.setColumnWidth(columnNum, columnWidth * 256);
            }
        }
    

    问题解决,可以实现列宽自适应。
    效果展示:
    在这里插入图片描述

    展开全文
  • openpyxl实现excel自适应列宽

    千次阅读 2020-06-02 12:04:36
    openpyxl实现excel自适应列宽 最近在做一些自动化生成excel的工作,...设置A列,列宽为20 sheet.column_dimensions[‘A’].width = 20 # 生成列名字典,只是为了方便修改列宽时指定列,key:数字,从1开始;value:列名

    openpyxl实现excel自适应列宽


    最近在做一些自动化生成excel的工作,为了提高excel的可读性,想要通过代码实现excel自适应列宽。查了一些资料,并没有找到相关的模块。所以,自己写了一个方法来适应列宽。
    大概的思路就是,遍历每一列,找出每一列中长度最大的单元格,然后根据最大的单元格,更改此列的列宽。

    设置A列,列宽为20
    sheet.column_dimensions[‘A’].width = 20
    
    	# 生成列名字典,只是为了方便修改列宽时指定列,key:数字,从1开始;value:列名,从A开始
    	def get_num_colnum_dict():
    	    '''
    	    :return: 返回字典:{1:'A', 2:'B', ...... , 52:'AZ'}
    	    '''
    	    num_str_dict = {}
    	    A_Z = [chr(a) for a in range(ord('A'), ord('Z') + 1)]
    	    AA_AZ = ['A' + chr(a) for a in range(ord('A'), ord('Z') + 1)]
    	    A_AZ = A_Z + AA_AZ
    	    for i in A_AZ:
    	        num_str_dict[A_AZ.index(i) + 1] = i
    	    return num_str_dict
    
    	# 自适应列宽
        def style_excel(self, sheet_name):
            '''
            :param sheet_name:  excel中的sheet名
            :return:
            '''
            # 打开excel
            wb = load_workbook(self.excel_name)
            # 选择对应的sheet
            sheet = wb[sheet_name]
            # 获取最大行数与最大列数
            max_column = sheet.max_column
            max_row = sheet.max_row
    
            # 将每一列,单元格列宽最大的列宽值存到字典里,key:列的序号从1开始(与字典num_str_dic中的key对应);value:列宽的值
            max_column_dict = {}
    
            # 生成列名字典,只是为了方便修改列宽时指定列,key:数字,从1开始;value:列名,从A开始
            num_str_dict = get_num_colnum_dict()
    
            # 遍历全部列
            for i in range(1, max_column + 1):
                # 遍历每一列的全部行
                for j in range(1, max_row + 1):
                    column = 0
                    # 获取j行i列的值
                    sheet_value = sheet.cell(row=j, column=i).value
                    # 通过列表生成式生成字符列表,将当前获取到的单元格的str值的每一个字符放在一个列表中(列表中一个元素是一个字符)
                    sheet_value_list = [k for k in str(sheet_value)]
                    # 遍历当前单元格的字符列表
                    for v in sheet_value_list:
                        # 判定长度,一个数字或一个字母,单元格列宽+=1.1,其它+=2.2(长度可根据需要自行修改,经测试一个字母的列宽长度大概为1)
                        if v.isdigit() == True or v.isalpha() == True:
                            column += 1.1
                        else:
                            column += 2.2
                    # 当前单元格列宽与字典中的对比,大于字典中的列宽值则将字典更新。如果字典没有这个key,抛出异常并将值添加到字典中
                    try:
                        if column > max_column_dict[i]:
                            max_column_dict[i] = column
                    except Exception as e:
                        max_column_dict[i] = column
            # 此时max_column_dict字典中已存有当前sheet的所有列的最大列宽值,直接遍历字典修改列宽
            for key, value in max_column_dict.items():
                sheet.column_dimensions[num_str_dict[key]].width = value
            # 保存
            wb.save(self.excel_name)
    

    这个办法只能大概做一下列宽的调整,肯定没有excel的自适应列宽功能那么精细,可以根据自己的需要,慢慢挑。

    此外还有一个办法,也是我最后选用的方法。
    如果提前知道excel的数据,可以先将数据存入excel。

    打开excel,通过使用excel的自适应列宽功能,把列宽做好,然后将数据全部删除。

    数据删除后,单元格的列宽会被保留。
    可以用这个excel作为模板,用python打开后,存入数据,再保存。就会发现数据是按之前做的自适应列宽来保存的。

    代码写的有点乱,因为时间比较仓促,最后没有采用这个方法,所以就没有写的太好。

    如果有更好的方法,欢迎讨论!!!

    展开全文
  • 计算每一列所有单元格的文本长度(包括列头),取最大值作为列宽 代码: getCellWidth核心方法,用于计算单元格宽度的 如果包含中文,则宽度:文本长度2.1,否则:文本长度1.1,这个是我多次测试得到的数值 可以...

    使用的js库:xlsx.js

    思路:

    计算每一列所有单元格的文本长度(包括列头),取最大值作为列宽

    代码:

    getCellWidth为核心方法,用于计算单元格宽度的
    如果包含中文,则宽度为:文本长度2.1,否则为:文本长度1.1,这个是我多次测试得到的数值
    可以在此方法增加其他规则

    function getCellWidth(value) {
      // 判断是否为null或undefined
      if (value == null) {
        return 10
      } else if (/.*[\u4e00-\u9fa5]+.*$/.test(value)) {
        // 判断是否包含中文
        return value.toString().length * 2.1
      } else {
        return value.toString().length * 1.1
      }
    }
    
    /**
     * 将table、json数据导出为excel
     * @param {object} options 
     * @param {[]} options.data 数据源
     * @param {"table"|"json"|"aoe"} options.dataType 数据类型 
     * @param {string} options.sheetName sheet名称
     * @param {boolean} options.saveFile 是否保存为文件,如果为false则返回workBook
     * @param {string} options.fileName 文件名称
     * @param {boolean} options.fitWidth是否自适应列宽(如果dataType="json",配置此属性将无效)
     * @param {[]} options.header xlsx内部参数
     */
    export function exportTo(
      {
        data = [],
        dataType = 'table',
        sheetName = 'Sheet1',
        saveFile = true,
        fileName = new Date().$toString() + '.xlsx',
        fitWidth= true,
        header = []
      } = {}
    ) {
      try {
        if (!XLSX) throw 'exportTo: the plug-in "XLSX" is undefined.'
        if (!data || data.length === 0) throw 'exportTo: data is null or undefined.'
    
        let sheet = {}
        switch (dataType) {
          case 'table':
            sheet = XLSX.utils.table_to_sheet(data, { raw: true })
            break
          case 'json':
            sheet = XLSX.utils.json_to_sheet(data, { raw: true, header: header })
    
            if (fitWidth) {
              let colWidths = [],
                colNames = Object.keys(data[0]) // 所有列的名称数组
    
              // 计算每一列的所有单元格宽度
              // 先遍历行
              data.forEach((row) => {
                // 列序号
                let index = 0
                // 遍历列
                for (const key in row) {
                  if (colWidths[index] == null) colWidths[index] = []
    
                  switch (typeof row[key]) {
                    case 'string':
                    case 'number':
                    case 'boolean':
                      colWidths[index].push(getCellWidth(row[key]))
                      break
                    case 'object':
                    case 'function':
                      colWidths[index].push(0)
                      break
                  }
                  index++
                }
              })
    
              sheet['!cols'] = []
              // 每一列取最大值最为列宽
              colWidths.forEach((widths, index) => {
                // 计算列头的宽度
                widths.push(getCellWidth(colNames[index]))
                // 设置最大值为列宽
                sheet['!cols'].push({ wch: Math.max(...widths) })
              })
            }
            break
          case 'aoe':
            // 未实现
            sheet = []
            break
        }
    
        let workBook = {
          SheetNames: [sheetName],
          Sheets: {
            [sheetName]: sheet
          }
        }
    
        if (saveFile) {
          XLSX.writeFile(workBook, fileName)
          return true
        } else {
          return workBook
        }
      } catch (error) {
        console.error('exportTo: ', error)
        throw error
      }
    }
    
    

    最终效果

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

    写在最后

    1. getCellWidth方法尽量简洁,如果做过多判断和计算,数据量大了就会变得很慢
    2. exportTo方法在导出三列,4万行数据时的性能如下图,可参考
      在这里插入图片描述
    3. 实现更复杂的导出功能,建议在后端服务实现,前端能力有限
    4. 其实wps都有这功能,鼠标点一下就行了,不过用户是上帝啊
      在这里插入图片描述
    展开全文
  • flexigrid列表自适应宽度

    热门讨论 2011-01-07 17:28:09
    本例通过修改flexigrid的源代码来实现列宽自适应变化。如下使用:{display:'XXX',name:'XXX',width:'30%',sortable:false,align:center',hide: false},内附使用说明txt,这个是本人自己修改的,不足之处请见谅。
  • // 新建sheet同时往sheet加入数据后,进行列宽设置,代码如下: // 固定首行,下拉时实现首行固定不动 sheet.createFreezePane( 0, 1, 0, 1 ); // 列宽自适应 // outputList.get(0).size()首行的列数,根据首行列...
  • 查询了很多方法之后发现虽然设置了显示模式按照列标题宽度显示,但是仍旧显示两行,最后发现需要多添加一行代码 dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader; ...
  • bootstrap table设置列宽

    千次阅读 2019-10-22 14:24:27
    首先改变表格的样式,默认表格宽度为自适应,必须改为fixed .table { table-layout: fixed !important; } 设置表格宽度后隐藏超出部分用..表示,添加如下代码 .table tbody tr td{ overflow: hidden; text-...
  • Jtable自动适应列宽

    2020-11-18 22:12:03
    示例:正常情况下,Jtable默认各列等宽,可以利用下面的方法进行设置各列数据自适应宽度 tableModel=new DefaultTableModel(); tableModel.setDataVector(data,title); table = new JTable(tableModel); ...
  • easyui datagriad 框架 在做列自适应时可以采取以下步骤: 1. fitColumns: true,/*自动扩大或缩小列的尺寸以适应...设置列宽为百分比 Js代码 field:'opt',title:'操作',width:$(this).width() * 0.2,a...
  • No.1Excel操作当中,表格的高度和...R.Columns.AutoFit‘自动调整列宽R.Rows.AtuoFit'自动调整行高上图例对表格内数据随机生成,然后自动调整单元格高度和宽度。如下几行代码就可实现整个工作表的行高和宽设置。No...
  • jquery easyui datagrid 列自适应窗口宽度

    千次阅读 2013-03-29 11:04:11
    easyui datagriad 框架 在做列自适应时可以采取以下步骤:  1. fitColumns: true,/*自动扩大或缩小列的尺寸以适应...设置列宽为百分比 Js代码  field:'opt',title:'操作',width:$(this).width() * 0.2,a
  • 我们在wordpress文章页面经常会用到表格,有些是从其他网页或者文档复制粘贴过来的,在电脑设备网页上都能很好的展示,但是在移动设备上或者低分辨率...正确的(自适应宽度)代码如下: <div>周杰伦ja...
  • 我们在wordpress文章页面经常会用到...以下面这个表格例:表格范例-周杰伦jay专辑《范特西》专辑曲目正确的(自适应宽度)代码如下:周杰伦jay专辑《范特西》专辑曲目序号曲名作词作曲编曲……可以看到上面代码中关...
  • 2、 各标题(是否必填项提示、列宽、字体排列方式:居左、中、右;是否可以输入) 3、 是否需要汇总当前页数据 4、 打印、导出的列内容自己定义,可以设定每个单位体都有不同的打印内容、导出内容。 作用: 1、 ...
  • 代码块中所示,必须要像下面一样设置下面的三个属性,shrinkToFit一定是false,默认是 true 的,也需要 autowidth true // 自定义列宽 必须属性 shrinkToFit: false, // 设置水平滚动条 autoScroll : true...
  • 3. 优化PC/MOBIL PHONE自适应展示,列宽不够自动隐藏作者栏 4. 优化整体配色 2020-07-02更新: 1. 更换md显示插件,支持md、html格式,优化代码块背景色 2. 新增文章页返回上一页,返回主页固钉 2020-07-01更新: ...
  • XPTable(修改后源码和dll)

    热门讨论 2012-03-16 10:11:00
    解决问题:否则在某些情况下(任意调整窗口大小,XPTable的Anchor设置随窗口大小自适应调整)会抛System.ArgumentOutOfRangeException异常,vScrollBar.LargeChange不能小于0 2、...\Models\Table.cs Line 5598,...
  • jeesite后台框架

    2018-09-07 19:09:56
    缓存EhCache统一管理,支持快速切换Redis缓存,集群Session缓存共享。 安全方面优化 原有JeeSite1.2安全选项及安全考虑保留。 配置文件数据库密码及其它安全密钥自动加密。 所有请求参数获取,均通过XSS跨站脚本...
  • 实例157 将汉字转换Unicode字符代码 实例158 获取在已打开文件中的读写位置 实例159 判断变量是否被初始化 实例160 获取文件创建或修改日期 实例161 自定义错误号 实例162 获取当前打开窗口数量 实例163 ...
  • 实例157 将汉字转换Unicode字符代码 实例158 获取在已打开文件中的读写位置 实例159 判断变量是否被初始化 实例160 获取文件创建或修改日期 实例161 自定义错误号 实例162 获取当前打开窗口数量 实例163 ...
  • 8.双击自适应列宽 9.右侧固定列 列宽拖动改到单元格左侧 效果 1.表头筛选效果 2.编辑筛选效果 筛选明代姓张的 或 唐代姓李的的诗词 3.拖动列调整顺序、隐藏显示列 左右拖动调整顺序,鼠标移出表格后松开--...
  • 11) 设置DBGridEH 自适应列宽的最好方法.........................................................20 12) Ehlib 的DBGridEh首列加序号...........................................................................

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

列宽为自适应代码