精华内容
下载资源
问答
  • 排除时间浮动,从中发现xlwings整列读取的速度非常快,但遍历速度相当慢,openpyxl的总体情况慢一点,xlrd读取处于中游,但是整列和遍历两种情况下读取速度相差不大,我想这应该是写法不同而已,处理时按照的方法...

    由于肺炎封城在家,没有开学,实习也还没有开始,所以我把去年的实习实践中做的一些数据分析小算法进行一个再查看的过程,然后其中一个算法引起了我的注意,这个算法主要是为了公司里的一个ID信息的一个数据分析,大概问题是这样的:
    在一个树(非二叉树)中选取一个结点,以这个节点为根节点,将这颗子树上的所有结点值输出(不分先后)。

    1. 数据情况
      一个excel表,表中2列、631040行数据,第1列为所有的结点,第2列为前一列结点的父结点。一共11.1MB的数据

    2. 语言
      python

    算法其实很简单,就根据深度优先算法进行处理,其中在读取数据的时候我用的openpyxl,将两列数据分别读入两个父子列表进行查询,openpyxl的代码是这样的:

    # 采用openpyxl读取
    childlist = []
    fatherlist = []
    excel = openpyxl.load_workbook(fileexcel)
    table = excel['Sheet1']
    rownum = table.max_row
    for i in range(2,rownum + 1):
        childnum = table.cell(row = i, column = 1).value
        fathernum = table.cell(row = i, column = 2).value
        childlist.append(childnum)
        fatherlist.append(fathernum)
    

    事实上就是一个遍历获取的过程,然后我这几天尝试用xlwings和xlrd来进行数据读取

    # 采用xlwings整列读取
    app = xw.App(visible=False, add_book=False)
    excel = app.books.open(fileexcel)
    table = excel.sheets[0]
    print(table)
    rownum = table.api.UsedRange.Rows.count
    print(rownum)
    childlist = table.range((1, 1), (rownum, 1)).value
    fatherlist = table.range((1, 2), (rownum, 2)).value
    
    # 采用xlwings遍历读取
    childlist = []
    fatherlist = []
    excel = openpyxl.load_workbook(fileexcel)
    table = excel.sheets[0]
    rownum = table.api.UsedRange.Rows.count
    for i in range(2,rownum + 1):
        childnum = table.cell(row = i, column = 1).value
        fathernum = table.cell(row = i, column = 2).value
        childlist.append(childnum)
        fatherlist.append(fathernum)
    
    # 采用xlrd遍历读取
    childlist = []
    fatherlist = []
    excel = xlrd.open_workbook(fileexcel)
    table = excel.sheet_by_index(0)
    rownum = table.nrows
    for i in range(1, rownum):
    	childnum = table.cell(i, 0).value
        fathernum = table.cell(i, 1).value
        childlist.append(childnum)
        fatherlist.append(fathernum)
    
    # 采用xlrd整列读取
    excel = xlrd.open_workbook(fileexcel)
    table = excel.sheet_by_index(0)
    rownum = table.nrows
    childlist = table.col_values(0)
    fatherlist = table.col_values(1)
    

    我顺便把时间也给记录了下来,结果是这样的:

    读取方法读取时间(秒)
    openpyxl读取(遍历)36.377
    采用xlwings读取(整列)8.129
    采用xlwings读取(遍历)300秒后未处理完
    采用xlrd读取(整列)24.923
    采用xlrd读取(遍历)26.262

    排除时间浮动,从中发现xlwings整列读取的速度非常快,但遍历速度相当慢,openpyxl的总体情况慢一点,xlrd读取处于中游,但是整列和遍历两种情况下读取速度相差不大,我想这应该是写法不同而已,处理时按照的方法应该都是遍历吧,基于xlwings与vba的关系,我想可能在读取的时候vba进行了处理,对于openpyxl的话,我查找了网上的信息,没有找到整列读取的代码写法,所以没能进行测试。

    (ps:python小白,本篇文章纯属是个人见解为主,如果大家有更好的操作方法也请指正,谢谢)

    展开全文
  • xlwings基础操作放弃openpyxl的基础理由:①不支持xls文件处理; ②亲测目前版本样式保存的bug还未解决;如果遇到上面两个问题,直接放弃openpyxl,拥抱xlwings吧,没什么出路;xlwings文档在国内搜索基本很少,如下...

    xlwings基础操作

    放弃openpyxl的基础理由:①不支持xls文件处理; ②亲测目前版本样式保存的bug还未解决;

    如果遇到上面两个问题,直接放弃openpyxl,拥抱xlwings吧,没什么出路;

    xlwings文档在国内搜索基本很少,如下是基本的单元格操作;

    在如下未满足的情况,可以看下Office操作文档 ,xlwings可以调它的api。

    # coding=utf-8

    import xlwings as xw

    # 设置程序不可见运行

    app = xw.App(visible=False, add_book=False)

    # =============== 第一部分,创建并写入数据 =====================

    # 创建一个test2.xlsx表,并写入数据

    # wb = app.books.add()

    # ws = wb.sheets.active

    # arr = []

    # for col in range(1,4):

    # arr_temp = []

    # for row in range(1,4):

    # arr_temp.append(col*10+row)

    # arr.append(arr_temp)

    # ws.range("A1:B3").value=arr

    # wb.save("data/test2.xlsx")

    # wb.close()

    # app.quit()

    # exit()

    # ============== 第二部分,插入、删除行和列 ========================

    # 导入已存的demo表格

    load_wb = app.books.open("data/test2.xlsx")

    # # 打开活动的工作薄的活动工作簿,或者指定的工作簿

    load_ws = load_wb.sheets.active

    # load_ws = load_wb.sheets["Sheet"]

    # 获取总行数(存在数据)

    rows = load_ws.api.UsedRange.Rows.count

    cols = load_ws.api.UsedRange.Columns.count

    # print("该表格总共有:"+str(rows)+" 行")

    # print("该表格总共有:"+str(cols)+" 列")

    # exit()

    # 1-①在第二行前插入2行(可理解为: 在第2-4行插入空白行)

    # load_ws.api.rows("2:4").insert

    # 1-②删除第2-4行

    # load_ws.api.rows("2:4").delete

    # 2-①在第二列前插入2列(这里处理的不是很好,其实是增加了对应区域的单元格,并未直接增加列)

    # load_ws.range("B1:C"+str(cols)).api.insert

    # 2-②删除第2-4列

    # load_ws.range("B1:C"+str(cols)).api.delete

    # ============== 第三部分,修改指定单元格的值 ========================

    # load_ws.range("A1").value = "x11"

    # ============== 第四部分,合并单元格 ========================

    # load_ws.range("A1:A2").api.merge

    # ============== 第五部分,获取单元格横纵坐标index ========================

    rng=xw.Range("B2")

    # 返回当前格子的行值

    # print(rng.row)

    # 返回当前格子的列值

    # print(rng.column)

    # 返回和设置当前格子的高度和宽度

    print(rng.width)

    print(rng.height)

    rng.row_height=40

    rng.column_width=50

    # 指定单元格的高度和宽度自适应

    # rng.columns.autofit()

    rng.rows.autofit()

    print(rng.width)

    print(rng.height)

    # load_ws.range("A1:A2").api.height = 20

    # ============== 第六部分,其它 ========================

    # lst=load_ws.range("A1:A"+str(load_ws["A1048576"].end("up").row)).value #把excel单列值读取到列表中

    # lst1=load_ws.range("A1:C"+str(load_ws["A1048576"].end("up").row)).value # 把excel连续两个列的值读取到列表中

    # lst=load_ws.range("A1:A"+str(load_ws["A1048576"].end("up").row)).value #A列的值

    # lst2=load_ws.range("C1:C"+str(load_ws["A1048576"].end("up").row)).value#C列的值

    # lst3=list(zip(lst,lst2))#合并起来然后转为列表

    # dicta=dict(lst3)#列表转为字典

    # ============== 第七部分,Office操作文档 ========================

    # https://docs.microsoft.com/en-us/office/vba/api/excel.range(object)

    load_wb.save()

    load_wb.close()

    app.quit()

    展开全文
  • openpyxlxlwings两个模块都是python中使用广泛的excel处理模块,但两者各有利弊,openpyxl读取速度快,但不支持在原有表格上写入内容;xlwings调用速度稍微比较慢,但支持读取和更改原有表格的内容。之前写过关于...

    openpyxl和xlwings两个模块都是python中使用广泛的excel处理模块,但两者各有利弊,openpyxl读取速度快,但不支持在原有表格上写入内容;xlwings调用速度稍微比较慢,但支持读取和更改原有表格的内容。之前写过关于《Python使用xlwings实现写入Excel》的简单教程Python使用xlwings实现写入Excel》icon-default.png?t=L892https://blog.csdn.net/userak47/article/details/119081169可以实现在指定表格,行,列写入内容

    def wrtxl(a,b,c,value):  #写入表格内容(页,行,列,内容)
        # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
        wb.sheets[a-1][b-1,c-1].value=value
        #print(wb.sheets[0][1,1].value)
        wb.save()

    本次对原来的代码进行了一个升级,原本只能输入表格序号和行数、列数来读取或写入内容,现在可以输入表格名(例如“人员名单”)和表格具体位置(例如“A6”)

    以下是openpyxl和xlwings混合使用的完整代码

    import xlwings as xw
    import openpyxl
    
    class xexcel:   #xlwings功能
        global app,wb
        def open(path):
            #初始化写入表格程序
            global app,wb
            app=xw.App(visible=False,add_book=False)
            #visible=True   显示Excel工作簿;False  不显示工作簿
            #add_book=False   不再新建一个工作簿;True  另外再新建一个工作簿
            #app.display_alerts=False
            #app.screen_updating=False
            wb=app.books.open(path)  #写入的表格路径
    
        #读取表格内容
        def rdvalue(sheet:"可输入表格名或表格序号",address:"可输入行数或者表格位置如:A6",column:"列数"=0):   #读取excel函数(页,行,列)
            if type(sheet)==int:
                if type(address)==int:
                    re=wb.sheets[sheet-1][address-1,column-1].value
                else:
                    re=wb.sheets[sheet-1][address].value
            else:
                if type(address)==int:
                    re=wb.sheets[sheet][address-1,column-1].value
                else:
                    re=wb.sheets[sheet][address].value
            return re
    
        #写入表格内容
        def wtvalue(value:"输入的内容",sheet:"可输入表格名或表格序号",address:"可输入行数或者表格位置如:A6",column:"列数"=0):   #读取excel函数(页,行,列)
            if type(sheet)==int:
                if type(address)==int:
                    wb.sheets[sheet-1][address-1,column-1].value=value
                else:
                    wb.sheets[sheet-1][address].value=value
            else:
                if type(address)==int:
                    wb.sheets[sheet][address-1,column-1].value=value
                else:
                    wb.sheets[sheet][address].value=value
    
        def size(sheet,r,c):
            wb.sheets[sheet][r].row_height=c
            wb.sheets[sheet][r].colum_height=c
    
        def bgcolor(sheet,r,c):
            wb.sheets[sheet][r].color=c
    
        def wrtxl(a,b,c,value):  #写入表格内容(页,行,列,内容)
            # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
            wb.sheets[a-1][b-1,c-1].value=value
            
        #关闭excel和app
        #运行结束务必执行保存和关闭命令
        def close():
            wb.save()
            wb.close()
            app.quit()
        def save():
            wb.save()
    
    
    class oexcel:
        global workbook
        def open(filename):   #读取Excel
            global workbook
            workbook=openpyxl.load_workbook(filename)
            
        def value(n:"页码或者页名",row:"行",column:"列"):  #读取表格内容('页',行,列) 页可为页名或页码
            if type(n)==int:
                sheetname=workbook.get_sheet_names()[n-1]
                worksheet=workbook.get_sheet_by_name(sheetname)
            else:      
                worksheet=workbook.get_sheet_by_name(n)
            value=worksheet.cell(row,column).value
            return value
    
        def bgcolor(n:"页码或者页名",row:"行",column:"列"):  #读取表格背景颜色('页',行,列) 页可为页名或页码
            if type(n)==int:
                sheetname=workbook.get_sheet_names()[n-1]
                worksheet=workbook.get_sheet_by_name(sheetname)
            else:      
                worksheet=workbook.get_sheet_by_name(n)
            ce=worksheet.cell(row,column)
            color=ce.fill.start_color.rgb
            return color

    展开全文
  • xlwingsopenpyxl的区别

    2020-12-06 12:02:05
    openpyxl可以读写xlsxxlwings:依赖于pywin32,需要安装有excel软件,支持.xls和.xlsx格式openpyxl:不需要excel软件,仅支持.xlsx格式You are correct in thatxlwingsrelies onpywin32, whereasopenpyxldoes not....

    xlrd可以读xls、xlsx;

    xlwt可以写xls;

    openpyxl可以读写xlsx

    xlwings:依赖于pywin32,需要安装有excel软件,支持.xls和.xlsx格式

    openpyxl:不需要excel软件,仅支持.xlsx格式

    You are correct in that xlwings relies on pywin32, whereas openpyxl does not.

    openpyxl

    A ".xlsx" excel file is essentially a zip-file containing multiple XML files formatted according to Microsoft's OOXML specification. With this specification it's possible to create a program capable of directly reading/writing excel files in just about any programming language. This is the approach applied in openpyxl: it uses python code to read/write excel files directly.

    xlwings

    A Microsoft Excel application can be started and controlled by an external program through the Win32 COM API. The pywin32 package provides an interface between Win32 COM and Python. Through a python script with the right pywin32 commands you can fully control an Excel Application (open excel files, query data from cells, write data to cells, save excel files, etc.). The pywin32 commands that you can use mirror the Excel VBA commands, albeit with python syntax.

    xlwings is (among other things) a user-friendly wrapper around pywin32. It introduces several concise-yet-powerful methods. An example would be the methods for direct conversion of an excel cell range to a numpy array or pandas dataframe (and vice versa).

    Summary

    A fundamental difference between xlwings and openpyxl is that the former requires that MS Excel is installed on your machine, whereas the latter does not.

    展开全文
  • 一、前因 每天要从电子表格里提取数据,表格文件有点大,如下: 并且表格每天都在增加数据,不停变大...提取过程也是较慢,现就xlrd、openpyxlxlwings三种读取方式作比较,择优选择。 三、结果 图为读取指...
  • Python 中使用openpyxlxlwings都可以读取操作Excel文件,本文主要介绍一下openpyxlxlwings之间的区别,以及使用的相关示例代码。 原文地址:Python openpyxlxlwings读取操作Excel的区别及使用示例
  • 当时想到用python解决这个问题,但是时间紧迫没有认真研究这几个交互Excle的库,依照当时搜索的部分资料和自己亲身的使用来看,主要有: xlwt xlrd xlutils xlwings openpyxl 这几个库各有好处,也各有缺陷,综合来...
  • 库 功能描述 ...openpyxl 读写Excel 的xlsx/xlsm/xltm/xltx文件 简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等功能应有尽有;缺点是对VBA的支持不够好,读取文件效率较其他库低。 ...
  • 得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的轮子,使用较多的有: xlwings openpyxl pandas win32com xlsxwriter DataNitro xlutils 上次我们介绍了下 xlutils,不少读者留言表示有比它更好使的模块,...
  • 1.选择库 xlwt: 写入.xls excel 文件(单元格的样式处理) xlwings: 将 .xls另存为.xlsx openpyxl:行的组合 1.xlwt的单元格样式: # 1、简单使用 workbook = xlwt.Workbook() # 创建一个工作簿 worksheet = ...
  • 一、需求:某公司管理的多个资管计划每天生成A表,业务人员需手工打开每个A表,将某些行、列删除后方可打印上报。...解答:openpyxl不支持xls格式,xlwt无法删除行和列,最终选择xlwings;三、代码实现:#!...
  • 速度很快 打开文件: 0.1026921272277832 按照单元格遍历程序结束: 1.0002880096435547 如果文件是打开的,速度超快 import xlrd from openpyxl import load_workbook import time import xlwings as xw1 file_name...
  • xlwings基础操作放弃openpyxl的基础理由:①不支持xls文件处理; ②亲测目前版本样式保存的bug还未解决;如果遇到上面两个问题,直接放弃openpyxl,拥抱xlwings吧,没什么出路;xlwings文档在国内搜索基本很少,如下...
  • 文章目录前言安装模块正文一、openpyxl 读取 .xlsx二、openpyxl 读取 .xlsx(只读模式)三、xrld 读取 .xlsx四、CSV 读取 .csv结论 前言 搭了一个配置表检查平台,单个项目使用时执行效率还能接收,可后面部署到公司...
  • xlrd/xlwt和openpyxl处理Excel的区别与效率 说我是搞算法的,但是其实目前仅仅是python 因:近日需要处理一批表格xlsx整合成csv,但是文件太多 区别 python中xlrd/xlwt与openpyxl处理Excel的主要区别在于写入操作 xlwt...
  • 那如果要用xlwings呢,该怎么改append这个循环呢?谢谢。 试了好久如下,没成功 <p>arrtemp.append([daimas[i],names[i],zuixinjias[i],zhangdiefus[i],zhangdiees[i],  chengjiaoliangs[i],...
  • Python-Excel 模块哪家强?

    千次阅读 2021-02-03 01:33:31
    #写入数据 workbook.Worksheets('Sheet1').Cells(1,1).Value = 'data' #关闭并保存 workbook.SaveAs('newexcel.xlsx') excel_app.Application.Quit() 6.5 openpyxl基本代码 import openpyxl # 新建文件 workbook = ...
  • Python中操作Excel的库非常多,为开发者提供了多种选择,如:xlrd、 xlwt、xlutils、xlwings、pandas、 win32com、openpyxl、xlsxwriter等等。 其中: 前三个一般混合使用,对Excel读写操作,适合旧版Excel,仅支持...
  • xlwings使用教程

    千次阅读 2020-12-03 23:32:05
    (一)python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作...
  • xlwings系列文章我想分为四块:(一)问题引入、安装、操作Application,Workbooks和worksheets,range的方法(二)如何与VBA,pandas交互(三)xlwings实战(四)pandas,openpyxl,xlwings对比分析李鑫:python xlwings excel...
  • xlwings 使用xlwings关联的pywin32的api接口 sht.api.PageSetup.RightHeader =‘your header’ sht.api.PageSetup.LightHeader =‘your header’ 其他修改excel页眉的方法 XlsWriter XlsWriter可以很方便的往...
  • ws.cell(row=i + 2, column=j + 1, value=c) ws.cell(row=i + 2, column=j + 1).hyperlink = url 找了好久
  • 开头还是想说一下,各个库之间没有明确的好坏之分,每个库都有其适合的应用场景,并且xlwingsopenpyxl许多区别决定了它们的能力是互为补充: “ xlwings:需要安装有 Excel 软件,支持.xls和.xlsx格式;可以调用 ...

空空如也

空空如也

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

openpyxlxlwings