精华内容
下载资源
问答
  • 本文首发于公众号:早起Python更多有趣的Python自动化...、需求说明 首先我们来看下今天的需求,有份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会...
    本文首发于公众号:早起Python
    更多有趣的Python自动化案例欢迎关注公众号:早起Python 大家好,又到了Python办公自动化系列。

    今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大!

    一、需求说明

    首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名。同个年度的总表在年末可能会有两、三百个工作表,同时每个表中可能也存在千余份档案信息。表格形式如下(为了直观呈现本例以7个工作表和十余份档案的形式呈现)

    3ca07a75c8c08a83cc146374adaebb9e.png

    需要完成的操作:为了方便审查特定档案信息,需要给出档案名后生成一份新表,该表包含指定档案在所有日期(即所有工作表)中的记录。最终结果如下(以档案x003为例):

    21fd7ec5f7d6da4798c95ebef49328a0.png

    也就是老板说:**给我把这几百个表格中所有包含*档案x003*的相关数据全部找到并整理个新的表格给我

    二、步骤分析

    正式写代码前可以把需求分析清楚,将复杂问题简单化。

    说白了,这个需求要求把所有日期工作表中的特定行都提取出来整合成一个新表。那么我们可以遍历每一张表,然后遍历第一列(名称列,也可以看作A列)每一个有数据的单元格,如果单元格中的文字为我们需要的档案名,就把这一行提取出来放到新的表格中,进一步梳理步骤为

    • 建立一个新的EXCEL工作簿
    • 新表的表头和档案记录Excel中的一样,也是名称配置提交日期
    • 遍历档案记录Excel的每一张工作表sheet,再遍历第一列每一个有数据的单元格,对内容进行判断
    • 找到符合条件的单元格后获取行号,根据行号将当前表中的特定行提取出来,并将行追加新创建的表中

    分析清楚就可以着手写代码了

    三、Python实现

    首先导入需要的库本例中涉及旧表的打开和新表的创建,因此需要从openpyxl导入load_workbookWorkbook(如果是ppt和word用到的模块就更智能了,一个方法就能搞定)

    from openpyxl import load_workbook, Workbook
    

    接着导入旧表及创建新表

    # 从桌面上获取总表
    filepath = r'C:UserschenxDesktop台账.xlsm' # 根据实际情况进行修改
    workbook = load_workbook(filepath)
    # 创建新的Excel工作簿获取到工作表
    new_workbook = Workbook()
    new_sheet = new_workbook.active
    
    # 给新表写入表头
    new_headers = ['名称', '配置', '提交日期', '受限操作', '操作时间', '状态', '存储位置']
    new_sheet.append(new_headers)
    

    现在是核心步骤:多次遍历,可以用workbook.sheetnames获取工作簿所有工作表名称的列表,然后遍历即可

    for i in workbook.sheetnames:
        sheet = workbook[i]
        # 获取档案名称所在列
        names = sheet['A']
    

    按照前面的分析,需要遍历名称列,判断每一个单元格的值是不是需要的档案名。这里应注意,如果已经循环到需要的单元格,就可以停止循环了,但一定要把符合单元格的行号传递给一个变量做记录,不然一旦break出循环就没有记忆了

    flag = 0
    for cell in names:
    if cell.value == keyword: # 这里的keyword就是档案名,可以以 档案x003 为例
        flag = cell.row
        break
    

    获得到符合条件的行号后用sheet[flag]就可以拿到符合行了。openpyxl不支持旧表的一整行写入新表,因此应对策略就是将这一行的所有单元格具体值组装成一个列表,用sheet.append(列表)的方法写入新表,遍历部分的完整代码如下:

        for i in workbook.sheetnames:
            sheet = workbook[i]
            names = sheet['A']
            flag = 0
            for cell in names:
                if cell.value == keyword:
                    flag = cell.row
                    break
            if flag:   # 如果flag没有被修改则不需要顺序进行下列代码
                data_lst = []
                for cell in sheet[flag]:
                    # 这里加上一个对内容的判断,是让无内容的行直接放空,而不是写入一个 none
                    if cell.value:  
                        data_lst.append(str(cell.value))
                    else:
                        data_lst.append(' ')
                new_sheet.append(data_lst)
    

    最后记得保存

    new_workbook.save(r'C:UserschenxDesktop台账查询.xlsx')
    

    小结

    这是经过一定改编的真实案例,可见Python自动化办公确实能够帮助我们解放自己的双手,不过在写自动化脚本之前也要先拆分任务,明确思路再进行,如果对本文的代码和数据感兴趣可以在后台回复自动化获取。最后还是希望大家能够理解Python办公自动化的一个核心就是批量操作-解放双手,让复杂的工作自动化!

    展开全文
  • python openpyxl 写入大容量数据execl

    千次阅读 2018-07-23 10:14:01
    from openpyxl import Workbook excel_QA=Workbook()#建立一个工作本 sheet=excel_QA.active#激活sheet ...sheet.cell(1,1).value='question'#写入一行第一列的值为question sheet.cell(1,2).value=...
    from openpyxl import Workbook
    excel_QA=Workbook()#建立一个工作本
    sheet=excel_QA.active#激活sheet
    
    sheet.title='QA_huawei'#对sheet进行命名
    sheet.cell(1,1).value='question'#写入第一行第一列的值为question
    sheet.cell(1,2).value='answer'#写入第一行第二列的值为answer
    excel_QA.save("FQA.xlsx")#保存

    这样可以避免实验xlwt写入execl遇到写入限制的尴尬

    展开全文
  • from openpyxl import load_workbook wb = load_workbook("2012.xlsx")#生成一...wb1.insert_rows(1)#第一行前面插入一行 wb1.cell(1,1,'11')#往sheet中的第1行第1列写入‘11’的数据 wb.save("2012.xlsx")#保存 ...
    from openpyxl import load_workbook
    wb = load_workbook("2012.xlsx")#生成一个已存在的wookbook对象
    wb1 = wb.active#激活sheet
    wb1.insert_rows(1)#第一行前面插入一行
    wb1.cell(1,1,'11')#往sheet中的第1行第1列写入‘11’的数据
    wb.save("2012.xlsx")#保存
    
    展开全文
  • 写入数据 创建个新的工作簿 wb = openpyxl.Workbook() 修改工作表名称 sheet = wb.active # 将活跃表单赋值给个变量 print(sheet.title) # 这里可以看到默认的表单名称是Sheet Sheet sheet.title = 'my sheet'...

    写入数据

    创建一个新的工作簿

    wb = openpyxl.Workbook()
    

    修改工作表名称

    sheet = wb.active   # 将活跃表单赋值给一个变量
    print(sheet.title)  # 这里可以看到默认的表单名称是Sheet
    Sheet
    
    sheet.title = 'my sheet'   # 这里修改表单名称
    print(wb.sheetnames)    # 重新打印工作簿的所有表单
    ['mysheet']
    

    保存文件

    直接使用save()函数

    wb.save('filename')
    

    如果文件是加载进来的,建议保存的时候另外起一个名称,不要损坏源文件

    wb = openpyxl.load_workbook('filename')
    wb.save('other filename')
    

    创建表单

    # 默认创建的表单,是直接追加在末尾的
    wb.create_sheet('Lastsheet')
    print(wb.sheetnames)
    ['mysheet', 'Lastsheet']
    
    # 我们也可以指定索引
    wb.create_sheet('First sheet', index=0)
    wb.create_sheet('Middle sheet', index=1)
    print(wb.sheetnames)
    ['First sheet', 'Middle sheet', 'my sheet']
    

    删除表单

    wb.remove_sheet(wb.get_sheet_by_name('Middle sheet'))
    print(wb.sheetnames)
    ['First sheet', 'Middle sheet', 'my sheet']
    ['First sheet', 'my sheet']
    
    # 虽然也可以运行成功,但是编译器还是报了一点错
    # 也可以直接使用del删除
    del wb['Middle sheet']
    

    写入单元格的几种方法

    使用索引定位单元格然后复制

    sheet['A1'] = 'hello word'
    print(sheet['A1'].value)
    

    循环遍历给每行单元格赋值

    sheet1 = wb.create_sheet('range name')   # 首先创建一个工作表
    for row in range(1, 50):   # 定义输入行数有50行
        sheet1.append(range(10))   # 给每行的数据为0-9
    

    循环给每一行添加自然数序列

    sheet1 = wb.create_sheet('range name')
    for row in range(1, 50):
        rows = sheet1.append(range(10))
    

    通过一个列表给单元格添加数据

    sheet2 = wb.create_sheet('List')
    row_list = [
        ['Number', 'step1', 'step2'],
        [2, 50, 30],
        [3, 40, 50],
        [4, 25, 20],
        [5, 15, 9],
        [6, 12, 31]
    ]
    for row in row_list:
        sheet2.append(row)
    

    指定行列范围写入数据

    sheet3 = wb.create_sheet(title='data sheet')
    for row in range(3, 20):
        for col in range(10, 30):
            sheet3.cell(column=col, row=row, value=get_column_letter(col))
    

    实际案例

    由于数据表过大的话不好展示,这里我找了一个结构比较简单的工作表
    在这里插入图片描述

    需求:把所有A类为一线城市的单元格替换成四线这两个字(为了例子便于区分)

    # 首先导入文件
    wb = openpyxl.load_workbook('text.xlsx')
    # 由于这个工作簿只有一个工作表,这里我直接设置活跃
    sheet = wb.active
    # 将需要修改的词放进字典中
    change_word = {
        'A类': '四线'
    }
    # 使用for循环遍历每一行
    # 由于第一行是名称,所以我们直接从第二行开始,然后访问
    for row in range(2, sheet.max_row+1): 
        # 这里设置客户分类这一行的取值
        client = sheet.cell(row=row, column=2).value
        # 判断字典的key中是否含有
        if client in change:
            # 这些要将字典中的 value, 赋值给第三列区域的数据
            sheet.cell(row=row, column=3).value = change_word[client]
    # 保存
    wb.save('other.xls')
    

    运行之后就得到结果了
    在这里插入图片描述

    展开全文
  • sheet.append({‘E’:sold,‘F’:fens})
  • 场景: Python使用openpyxl库时候,在写入5w行数据量生成excel的时候,报错: MemoryError Error in atexit._run_exitfuncs: Traceback (most recent call last): File "E:\python-excel\venv\lib\site-packages\...
  • python使用openpyxl写入、读取excel xlsx文件 openpyxl openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易(**P.S.**文字编码是“gb2312” 读取后就会显示乱码,请先转成...
  • 如果我们只是要 读取 Excel文件里面的数据进行处理,可以使用 xlrd 这个库。 首先我们安装xlrd库,执行下面的命令 pip install xlrd 在这 # 参考网站: https://xlrd.readthedocs.io/en/latest/api.html#xlrd-sheet...
  • 使用 xlsxwriter/pandas/openpyxl 三个库来实现数据写入 EXCEL ,以及向已存在文件追加数据
  • openpyxl模块介绍1、openpyxl是读写Excel的python库,是个比较综合的工具,能够同时读取和修改Excel文档2、openpyxl中有三个不同层次的类,每个类都有各自的属性和方法:Workbook是个excel工作表Worksheet...
  • 开篇废话(干活请看下个大标题) 近期学习刑法,总结的时候需要用Excel表将刑法条文分...于是就bing了系列博客,下载了xlrd,xlwt,后来发现它们打不开xlsx格式,而且写入操作看教程觉得鸡肋。又学习了beautiful...
  • 主要介绍了python3.7 openpyxl 在excel单元格中写入数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 本来我是想尝试,选中某个多个单元格复制到同个sheet的其他位置,找了很多资料没有找到,目前只有这么个办法,如果有大佬看到,欢迎补充请教。# encoding:utf-8import pandas as pdimport openpyxlxl = pd.read_...
  • 篇 自动化办公文章中介绍了 openpyxl 模块处理 Excel 文件的一些基本命令,但文章中涉及的操作命令并不是很全,因此就有了本篇文章;引入个例子从 创建 Workbook 到存储到本地磁盘,涉及的操作命令会更全面...
  • 本来我是想尝试,选中某个多个单元格复制到同个sheet的其他位置,找了很多资料没有找到,目前只有这么个办法,如果有大手看到,欢迎补充请教。 # encoding:utf-8 import pandas as pd import openpyxl xl = pd...
  • import openpyxl class Data(object): def __init__(self, file): self.file = file self.wb = openpyxl.load_workbook(self.file) # 创建工作簿对象 def getAllData(self, sheet): "...
  • python(openpyxl)复制excel数据到另个excel http://www.lfd.uci.edu/~gohlke/pythonlibs/ ctrl+F搜索下载openpyxl,下载后安装即可 1 #python3读写excel 2 3 from openpyxl import ...
  • from openpyxl import Workbook import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator import numpy as np import xlrd import xlwt from xlutils.copy import c...
  • 最近在做expansion of datset,所以需要把扩展的dataset写入到excel中 我已经矩阵运算全部搞定,最终输出的是两个输出 labels 和 features 自己整理为以下格式 label = [[0], [1], [2], [3] ] feature =...
  • import openpyxl workbook = openpyxl.Workbook() ws1 = workbook.create_sheet("Mysheet") workbook.active = 1#设置active参数,即工作表索引值 nrows = ws1.max_row # 获得行数 ncolumns = ws1.max_column # 获得...
  • 通过python xlrd openpyxl 模块实现数据写入
  • from openpyxl.styles import Font,Alignment,Side,Border,Color,colors,PatternFill from MMSpackagefile.codefile.ExcelData import ExcelData class CompareExcel(object): def __init__(self): pass ...
  • openpyxl 添加数据的时候不需要复制表格,这点尤为方便。  下面是在表格末尾添加数据,由于添加的数据已没有原本的单元格样式,所以需要设置他的单元格样式与上文保持一致。  pandas 如何获取所需数据的索引...
  • openpyxl:写入Excel工作表

    千次阅读 2018-12-05 19:58:38
    from openpyxl import Workbook from openpyxl.utils import get_column_letter print(range(100)) #创建个工作表 wb = Workbook() #工作表名称变量 dest_filename = ‘empty_book.xlsx’ #Sheet页第个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,897
精华内容 1,558
关键字:

openpyxl写入一行数据