首页 > 其他分享 >几行代码教你美化excel

几行代码教你美化excel

时间:2023-05-28 23:31:36浏览次数:36  
标签:end max 单元格 excel 几行 start sheet 美化 row

数据统计我们可以很方便地用python计算,但是数据统计好后,呈现给领导或客户时,还是以excel为主,pandas直接生成的excel太丑,不符合福报人的品位,本文教大家一步步变美。

01 背景

先看丑的,通常pandas一行代码就能生成excel,如图:

df.to_excel(xlsx_path, header=False)


01 准备

通常python读取excel有两个包,xlsxwriter和openpyxl,论单元格单独处理,openpyxl要方便一些,论sheet的整体编辑,插入图片,xlsxwriter能力要强一些,这里先用openpyxl,后面文章插入图片时,再介绍xlsxwriter。

1、安装

pip install openpyxl

2、加载

先按路径加载完整的excel,openpyxl.load_workbook(xlsx_path),保存到wb,再激活第一个sheet页,保存为ws。

wb = openpyxl.load_workbook(xlsx_path)
ws = wb.active

02 修改格式

1、选择范围 如果要对整个sheet页的所有单元格进行选择,先单独取总行数和总列数,再组成。

rownum = str(ws.max_row)  # 总行数
    letter = get_column_letter(ws.max_column)  # 最后一列的字母
    cells = ws['A1:' + letter + rownum]  # 全部单元格范围

2、设置值 如果要对其中的值进行修改,直接按二维数组的方式对单个单元格赋值。

ws.cell(1, 1).value = '品名2'
    ws.cell(1, 5).value = '产量3'

3、格式化

对二维的单元格进行位置(居左、居中、居右),字体(字体大小,加粗,字体名称,颜色),边框,背景等格式处理。

def set_cells(cells, type, color=None):
    aligncenter = Alignment(horizontal='center', vertical='center')  # 居中
    alignleft = Alignment(horizontal='left', vertical='center')  # 居左
    sidestyle = Side(border_style='thin')
    border = Border(left=sidestyle, right=sidestyle, top=sidestyle, bottom=sidestyle)
    font = Font(bold=False)  # 字体不加粗
    # font = Font(size=14, bold=False, name='微软雅黑', color="FF0000")  # 字体大小,加粗,字体名称,字体名字
    for i in cells:
        for j in i:
            if (type == 'percent'):
                j.number_format = '0.00%'
            elif (type == 'bold_false'):
                j.font = font
            elif (type == 'left'):
                j.alignment = alignleft
            elif (type == 'center'):
                j.alignment = aligncenter
            elif (type == 'border'):
                j.border = border
            elif (type == 'color'):
                j.fill = PatternFill("solid", fgColor=color)  # solid为样式

4、合并单元格 相邻的行或列,如果字符相同,可以使用sheet.merge_cells()合并单元格。

for j in range(head_row + 1,rownum + 1):
                # 前一列的合并单元格
                for row_range in last_row_list:
                    if start_row in row_range:
                        max_end_row = row_range[-1]
                        break
                # 字符相同,
                if cell_value.__eq__(sheet.cell(j, i).value) and j < max_end_row:
                    # 最后一行,是否合并
                    continue
                end_row = j - 1
                # 字符不相同,
                if not cell_value.__eq__(sheet.cell(j, i).value):
                    cell_value = sheet.cell(j, i).value
                    if end_row - start_row >= 1:
                        sheet.merge_cells(start_row=start_row, end_row=end_row, start_column=i, end_column=i)
                    this_row_list.append(range(start_row, end_row + 1))
                # 超过前一列的合并单元格
                elif j >= max_end_row:
                    if max_end_row - start_row >= 1:
                        sheet.merge_cells(start_row=start_row, end_row=max_end_row, start_column=i, end_column=i)
                    this_row_list.append(range(start_row, max_end_row + 1))
                    this_row_list.append(range(max_end_row + 1, end_row + 1))
                else:
                    if end_row - start_row >= 1:
                        sheet.merge_cells(start_row=start_row, end_row=end_row, start_column=i, end_column=i)
                    this_row_list.append(range(start_row, end_row + 1))
                start_row = end_row + 1


03 结论

通过本文我们实现了对excel中单元格的基本格式美化,后面会介绍sheet页的操作和插入图片,最终能多美,就需要发挥脑洞了。工具在手,天下我有。

标签:end,max,单元格,excel,几行,start,sheet,美化,row
From: https://blog.51cto.com/u_15786919/6366767

相关文章

  • 前端导出 Excel
    需求背景在项目开发中遇到需要前端将后端返回的数据导出的任务,由于后端已经全部返回了相关数据,为避免重复请求接口、减少后端IO提升系统性能,因此需要在前端将后端返回的任务数据导出成Excel。之前没有做过前端根据数据直接导出excel的案例,特此做记录。使用的插件xlsx用于解......
  • 自定义导出Excel表列数据(根据所选的列,选几列导出几列数据,不选则全部导出)
       ......
  • Python实现将Excel表格按某列拆分为多个sheet
    <生信交流与合作请关注公众~号@生信探索>实际数据分析中遇到需求,把某个Excel表格按照某一列分为多个sheet,并且要求如果某个key对应的行数较少应该合并到一个sheet中。importpandasaspdimportbioquestasbq#https://jihulab.com/BioQuest/bioquest从网上找随便了个数据......
  • 导出Excel,下载文件,返回文件流和报错信息处理
    downloadExcelCreateA(resData,fileName){//下载文件varblob=newBlob([resData],{type:'application/vnd.ms-excel'})vardownloadElement=document.createElement('a');varhref=window.URL.creat......
  • 近2万条情感的秘密故事网站ACCESS\EXCEL数据库
    今天从一个情感的秘密故事网站采集了一些数据,采集这些数据的原因是因为这些情感上的秘密感觉挺吸引人的,尽管自己的情感可能是“正经”的,但是通过阅读别人情感上的那些秘密故事,也是可以丰富生活的。数据量有些大,而且也有分类,分类统计情况为:感情婚姻(2139)、工作职场(436)、家庭教育(457......
  • python_操作excel
    摘自微信读书:《超简单:用Python让excel飞起来》Python处理excel的模块:xlsxWriter,xlrd,xlwt,xlutils,openpyxl,xlwings等其中:xlwings功能最强大,支持批量操作,还可与excelVBA结合使用区别如下:参考语句:importxlwingsasxwapp=xw.App(visible=False,add_book=False)foriinra......
  • 近万条一级分类经典短信大全ACCESS\EXCEL数据库
    近万条一级分类经典短信大全ACCESS数据库收集的是近万条常用经典短信,之所以称“一级分类”(意思是只有一个大类没有子类),原因是为了区别另外一个有二级分类的短信数据库。近万条一级分类经典短信大全ACCESS数据库中的短信都是经过索引没有收录重复的记录。大类分类情况是:爱情短信(1......
  • 2万多条QQ签名论坛签名大全ACCESS\EXCEL数据库
    2万多条QQ签名论坛签名大全ACCESS数据库收录了感情,恋爱,哲理,诗词,个性等7类共20000余条的QQ签名或论坛签名,有些包含幽默搞笑也有些蕴含哲理。您可以从中选择自己喜欢的作为自己的签名。截图下方有显示“共有记录数”,截图包含了表的所有字段列。该数据提供ACCESS数据库文件(扩展名是......
  • Excel数据查询之INDEX和MATCH函数
    INDEX函数的作用INDEX(单元格区域,指定的行数,指定的列数)INDEX函数用于在一个区域中,根据指定的行、列号来返回内容=INDEX(A1:D4,3,4)  返回A1:D4单元格区域第3行和第4列交叉处的单元格,即D3单元格 MATCH函数的作用     MATCH函数用于在一行或一列的......
  • 4万多条糗事百科网站数据ACCESS\EXCEL数据库
    这个ACCESS数据库采集的是糗事百科小清新网站的内容,而且内容大于400字的将不收集(内容太长的大多是裹脚布),我要的是浓缩的精华。如果你需要实时采集糗事百科的应用程序,也可以联系我获得。 本数据库是由MicrosoftAccess2000创建的MDB数据库文件,您需要使用MicrosoftAccess......