首页 > 其他分享 >set excel format

set excel format

时间:2024-07-08 10:42:16浏览次数:7  
标签:set format column self excel cols len cell col

import openpyxl
from openpyxl.styles import Alignment
from openpyxl.utils import get_column_letter


class SetExcelFormat:
    def __init__(self, filepath, sheetname):
        self.filepath = filepath
        self.workbook = openpyxl.load_workbook(filepath)
        self.worksheet = self.workbook[sheetname]
        max_col = self.worksheet.max_column
        self.cols = [get_column_letter(col) for col in range(1, max_col + 1)]

    def save(self):
        self.workbook.save(self.filepath)

    def set_title_center(self, **kwargs):
        cols = kwargs.get('cols')
        if cols is None:
            cols = self.cols
        center_alignment = Alignment(horizontal='center')
        for col in cols:
            column_range = self.worksheet[col][1:]
            for cell in column_range:
                cell.alignment = center_alignment

    def set_num_format(self, **kwargs):
        cols = kwargs.get('cols')
        if cols is None:
            cols = self.cols
        for col in cols:
            column_range = self.worksheet[col][1:]
            for cell in column_range:
                cell.number_format = '#,##0'

    def set_col_auto_width(self, **kwargs):
        dims = {}
        cols = kwargs.get('cols')
        if cols is None:
            cols = self.cols
        for row in self.worksheet.rows:
            for cell in row:
                if cell.value:
                    """
                    首先获取每个单元格中的长度;如果有换行则按单行的长度计算,先分割再计算;
                    长度计算中:len('中文')>>>2, len('中文'.encode('utf-8'))>>>6,通过运算,将中文的字节数定义为2;
                    字典存储每列的宽度:将cell每列中 列名作为键名,cell长度计算的最大长度作为键值。
                    """
                    len_cell = max(
                        [(len(line.encode('utf-8')) - len(line)) / 2 + len(line) for line in
                         str(cell.value).split('\n')])
                    # dims[chr(64+cell.column)] = max((dims.get(chr(64+cell.column), 0), len(str(cell.value))))
                    dims[cell.column_letter] = max(dims.get(cell.column_letter, 0), len_cell)
        for col, value in dims.items():
            if col in cols:
                """最后通过遍历存储每列的宽度的字典,来设置相关列的宽度"""
                self.worksheet.column_dimensions[col].width = value + 2 if value + 2 <= 50 else 50


if __name__ == '__main__':
    xlsformat = SetExcelFormat(filepath='采购订单ATP和PO价格对比_2024-07-08.xlsx', sheetname='Sheet1')
    xlsformat.set_col_auto_width()
    xlsformat.set_num_format(cols=['N', 'O', 'P'])
    xlsformat.save()

  

标签:set,format,column,self,excel,cols,len,cell,col
From: https://www.cnblogs.com/pythonClub/p/18289433

相关文章

  • Matlab之App Designer 如何导入Excel参数教程
    一、背景介绍    采用Matlab中的AppDesigner进行GUI可视界面程序设计时,经常需要将数据导入到程序中进行运算和分析,以提升效率,本文将对导入Excel参数的方法及程序实现进行介,。二、采用MatlabAppDesigner导入Excel参数方法及代码1、首先打开一个新的AppDesigner页......
  • STL--求交集,并集,差集(set_intersection,set_union,set_difference)
    set_intersection(重要)求两个有序的序列的交集.函数声明如下:template<classInputIterator1,classInputIterator2,classOutputIterator>OutputIteratorset_intersection(InputIterator1_First1,//容器1开头InputIterator1_Last1,//容器2......
  • Set接口和常用方法
    基本介绍无序(添加和取出顺序不一致),无索引不允许出现重复元素,因此最多包含一个nulljDKAPI中Set的实现类:Set接口的常用方法和List接口一样,Set接口也是Collection的子接口,因此,常用方法与Collection一样Set接口的遍历方式与Collection一样;但是不能用索引方式来获取。//set......
  • 五、保存数据到Excel、sqlite(爬虫及数据可视化)
    五、保存数据到Excel、sqlite(爬虫及数据可视化)1,保存数据到excel1.1保存九九乘法表到excel(1)代码testXwlt.py(2)excel保存结果1.2爬取电影详情并保存到excel(1)代码spider.py(3)excel保存结果2,保存数据到sqlite2.1sqlite数据库2.2创建表2.3插入数据2.4查询数据2.5保存......
  • STL学习——栈,队列,set,优先队列
    栈:stack容器内元素的访问​由于栈(stack)本身就是一种后进先出的数据结构。在STL中stack中只能通过top()来访问栈顶元素栈上的基本操作栈的基本操作包括:函数名用途push(x)将x入栈top()获得栈顶元素pop()用以弹出栈顶元素empty()可以检测stack内是否为空,返回true为空,返回fa......
  • mORMot虚拟数据集--TOrmTableDataSet
    如何快速显示OrmTable--可以使用TOrmTableDataSet这是mormot.db.rad.ui.orm的主要功能type///只读虚拟TDataSet,能够访问TOrmTableTOrmTableDataSet=class(TVirtualDataSet)protectedfTable:TOrmTable;//关联的TOrmTable实例{$ifndefUNICODE}//如......
  • mORMot模糊概念--FormatSQL-第1部分
    mORMot里面的模糊概念--FormatSQL第1部分mORMot的FastFormat到底是%还是?作为参数!,先看看关键代码。下面是代码原始注释functionFormatSql(constFormat:RawUtf8;constArgs,Params:arrayofconst):RawUtf8;fastFormat()functionreplacement,handling%but......
  • [Redis]ZSet
    通过value查score在Redis的有序集合(zset)中,通过成员(member)获取其对应的分数(score)的复杂度是O(logN),其中N是有序集合中的元素数量。这是因为Redis使用跳跃表(skiplist)和哈希表(hashtable)的组合来实现有序集合。跳跃表用于按顺序存储元素,以便高效地按分数排序和查找范围,而哈......
  • Redis的zset的zrem命令可以做到O(1)吗?
    事情是这样的,当我用zrem命令去移除value的时候,我知道他之前会做的几个步骤1、查找这个value对应的score(通过zset中的dict)2、根据这个score查找到跳表中的节点3、删除这个节点我就想了一下为什么dict为什么要保存score呢?如果保存的是跳表中的节点,那么不就可以做到删除O(1)......
  • 在 Windows 操作系统中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tc
    在Windows操作系统中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下的两个重要参数控制着TCP/IP协议栈的行为。这些参数可以通过注册表来配置,影响网络连接和端口资源的管理。1.MaxUserPort路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe......