精华内容
下载资源
问答
  • # -*- coding: utf-8 -*- # @Time : 2020/12/25 13:39 # @Author : ZhaoZT from openpyxl import load_workbook import xlwings as xlw import pythoncom import re def cell_2_loc(cell): """ AA2 --...

    ffd4e8bc9f6fb2bb3a8bcc44c05db61f.png
    # -*- coding: utf-8 -*-
    # @Time    : 2020/12/25 13:39
    # @Author  : ZhaoZT
    from openpyxl import load_workbook
    import xlwings as xlw
    import pythoncom
    import re
    
    
    def cell_2_loc(cell):
        """
        AA2 --> (2, 27)
        文本单元格转成数值元组
        :param cell:
        :return:
        """
        char = re.sub(r'd', '', cell)
        i_loc = int(re.sub(r'D', '', cell))
        j_loc = 0
        for i, i_char in enumerate(char):
            j_loc += 26 ** i + ord(i_char) - 65
        return i_loc, j_loc
    
    
    class Excel:
        """
        将openpyxl和xlwings对Excel的读,写,清除,合并/取消合并单元格,关闭API统一
        """
        def __init__(self, path: str, openpyxl=True):
            self.__path = path
            self.__openpyxl = openpyxl
            self.__app = None
            self.__wb = self.__open()
            self.__ws = None
    
        def __open(self):
            if self.__openpyxl:
                return load_workbook(self.__path)
    
            pythoncom.CoInitialize()
            self.__app = xlw.App(visible=False, add_book=False)
            return self.__app.books.open(self.__path)
    
        def switch(self, ws: str):
            """
            切换sheet
            :param ws:sheet_name
            :return:
            """
            if self.__openpyxl:
                self.__ws = self.__wb[ws]
                return
    
            self.__ws = self.__wb.sheets(ws)
    
        def delete(self, start_cell: str, end_cell: str):
            """
            清除内容
            :param start_cell: 开始单元格
            :param end_cell: 结束单元格
            :return:
            """
            if self.__openpyxl:
                for row in self.__ws[f'{start_cell}:{end_cell}']:
                    for cell in row:
                        cell.value = None
                return
    
            self.__ws.range(f'{start_cell}:{end_cell}').clear_contents()
    
        def write(self, data: list, start_cell: str):
            """
            往表里写文本
            :param data: 二维列表[[]]
            :param start_cell: 开始单元格
            :return:
            """
            i_loc, j_loc = cell_2_loc(start_cell)
            if self.__openpyxl:
                for i in range(len(data)):
                    for j in range(len(data[i])):
                        self.__ws.cell(row=i + i_loc, column=j + j_loc).value = data[i][j]
                return
            # xlwings的写表
            for i in range(len(data)):
                for j in range(len(data[i])):
                    self.__ws.range(i + i_loc, j + j_loc).value = data[i][j]
    
        def read(self, start_cell: str, end_cell=''):
            """
            读单元格的值
            :param start_cell: 开始的单元格
            :param end_cell: 结束的单元格
            :return:
            """
            end_cell = start_cell if end_cell == '' else end_cell
            if self.__openpyxl:
                res, cells = [], []
                for row in self.__ws[f'{start_cell}:{end_cell}']:
                    for cell in row:
                        cells.append(cell.value)
                    res.append(cells)
                    cells = []
                return res
            return self.__ws.range(f'{start_cell}:{end_cell}').value
    
        def close(self):
            """
            关闭工作簿
            :return:
            """
            if self.__openpyxl:
                self.__wb.save(filename=self.__path)
                self.__wb.close()
                return
    
            self.__wb.save()
            self.__wb.close()
            self.__app.quit()
    
        def merge(self, init_cell: str, cols: list):
            """
            合并单元格
            :param init_cell: 依据列的第一个单元格
            :param cols: 需要合并的列
            :return:
            """
            i_loc, j_loc = cell_2_loc(init_cell)
            if self.__openpyxl:
                init_val = self.__ws.cell(row=i_loc, column=j_loc).value
                start_loc = i_loc
                for i in range(i_loc+1, 50000):
                    val = self.__ws.cell(row=i, column=j_loc).value
                    if val != init_val:
                        for col in cols:
                            self.__ws.merge_cells(f'{col}{start_loc}:{col}{i-1}')
                        init_val = val
                        start_loc = i
                    if val is None:
                        break
            # xlwings的合并单元格
            init_val = self.__ws.range(i_loc, j_loc).value
            start_loc = i_loc
            for i in range(i_loc + 1, 50000):
                val = self.__ws.range(i, j_loc).value
                if val != init_val:
                    for col in cols:
                        self.__ws.range(f'{col}{start_loc}:{col}{i - 1}').api.merge()
                    init_val = val
                    start_loc = i
                if val is None:
                    break
    
        def unmerge(self):
            """
            取消合并单元格
            :return:
            """
            if self.__openpyxl:
                m_cells = self.__ws.merged_cells
                for m_cell in m_cells:
                    r1, r2, c1, c2 = m_cell.min_row, m_cell.max_row, m_cell.min_col, m_cell.max_col
                    if r2 - r1 > 0:
                        self.__ws.unmerge_cells(start_row=r1, end_row=r2, start_column=c1, end_column=c2)
                return
            # xlwings的取消合并,直接选择全表就可以
            info = self.__ws.used_range
            self.__ws.range((1, 1), (info.last_cell.row, info.last_cell.column)).api.unmerge()
    
    
    if __name__ == '__main__':
        wb = Excel(path='./data.xlsx', openpyxl=False)
        wb.switch('data')
        print(wb.read('A1', 'B100'))
        wb.close()
    展开全文
  • 一、前因 每天要从电子表格里提取数据,表格文件有点大,如下: 并且表格每天都在增加数据,不停变大...提取过程也是较慢,现就xlrd、openpyxlxlwings三种读取方式作比较,择优选择。 三、结果 图为读取指...

    一、前因

    每天要从电子表格里提取数据,表格文件有点大,如下:

    并且表格每天都在增加数据,不停变大,用EXCEL2007打开那叫一个慢,其实有用的数据就是那么更新的几条。

    二、思路

    用PYTHON把几个表中每天更新的内容提取了出来,汇总在一个表中,此表较小,操作快。提取过程也是较慢,现就xlrd、openpyxl、xlwings三种读取方式作比较,择优选择。

    三、结果

    图为读取指定文件的指定SHEET的总行数,并计算所划的时间,单位为秒,越小越快。

    读取XLS文件,用xlrd较快;读取xlsx文件,用openpyxl只读模式。

    四、代码

    import xlrd
    import openpyxl
    import xlwings
    import datetime

    t_0=datetime.datetime.now()#取出现在时间
    fn=u'D:/xiong/1.xls'
    app =xlwings.App(visible=False, add_book=False)
    xls = app.books.open(fn)#打开电子表格文件
    sheet1=xls.sheets[1]#打开第2个sheet
    info=sheet1.used_range
    n=info.last_cell.row#取出总行数
    print(u'总行数为:',n)
    t_5=datetime.datetime.now()-t_0
    print(u'xlwings读取xls文件80M时间为:',t_5)

    t_0=datetime.datetime.now()#取出现在时间
    fn=u'D:/xiong/1.xls'
    xls=xlrd.open_workbook(filename=fn)#打开电子表格文件
    sheet1=xls.sheet_by_index(1)#打开第二个sheet
    n=sheet1.nrows#取出总行数
    print(u'总行数为:',n)
    t_1=datetime.datetime.now()-t_0
    print(u'xlrd读取xls文件80M时间为:',t_1)

    print(u'\n**************下面为xlsx文件读取比较**************')
    t_0=datetime.datetime.now()
    fn=u'D:/xiong/2.xlsx'
    xlsx=xlrd.open_workbook(filename=fn)#打开电子表格文件
    sheet1=xlsx.sheet_by_index(0)#打开第1个sheet
    n=sheet1.nrows#取出总行数
    print(u'总行数为:',n)
    t_2=datetime.datetime.now()-t_0
    print(u'xlrd读取xlsx文件12M时间为:',t_2)

    t_0=datetime.datetime.now()
    fn=u'D:/xiong/2.xlsx'
    xlsx=openpyxl.load_workbook(fn)#打开电子表格文件
    sheet1=xlsx.worksheets[0]#打开第1个sheet
    n=sheet1.max_row#读取总行数
    print(u'总行数为:',n)
    t_3=datetime.datetime.now()-t_0
    print(u'openpyxl读取xlsx文件12M时间为:',t_3)

    t_0=datetime.datetime.now()
    fn=u'D:/xiong/2.xlsx'
    xlsx=openpyxl.load_workbook(fn,read_only=True)#打开电子表格文件
    sheet1=xlsx.worksheets[0]#打开第1个sheet
    n=sheet1.max_row#读取总行数
    print(u'总行数为:',n)
    t_4=datetime.datetime.now()-t_0
    print(u'openpyxl读取(只读)xlsx文件12M时间为:',t_4)

    t_0=datetime.datetime.now()#取出现在时间
    fn=u'D:/xiong/2.xlsx'
    app =xlwings.App(visible=False, add_book=False)
    xlsx = app.books.open(fn)#打开电子表格文件
    sheet1=xlsx.sheets[0]#打开第1个sheet
    info=sheet1.used_range
    n=info.last_cell.row#取出总行数
    print(u'总行数为:',n)
    t_6=datetime.datetime.now()-t_0
    print(u'xlwings读取xlsx文件12M时间为:',t_6)

    五、openpyxl应用场景

    xlsx=openpyxl.load_workbook(fn,read_only=True)这句要不要加“read_only=True”?

    其一:如果只是读取指定位置的数据,比如:sheet1.cell(330,1).value,加上比较快。

    不加的情况是

    加了的情况是

    快很多。

    其二:如果是对整个数据进行循环、条件查找什么的,不能加,否则慢的要死,等于死机。

    这样理解:加了“read_only=True”,数据不载入内存,需要就到磁盘查找,对大文件这样更快,但循环查找什么的,造成反复读盘,这样就慢了;不加,数据一次性载入内存,首次载入时间长,但载入内存后,处理起来就更快了。

     

     

    展开全文
  • 当时想到用python解决这个问题,但是时间紧迫没有认真研究这几个交互Excle的库,依照当时搜索的部分资料和自己亲身的使用来看,主要有: xlwt xlrd xlutils xlwings openpyxl 这几个库各有好处,也各有缺陷,综合来...

    0x00问题背景

    前段时间在工作中遇到了一个需求,简单介绍就是需要在过去6个月中某市每天不同蔬菜的菜价中查找公司所采购特定蔬菜对应那天的价格,计算差值,看似简单但数据量庞大,光录入就花了不少时间,耗费了大家不少精力,当时想到用python解决这个问题,但是时间紧迫没有认真研究这几个交互Excle的库,依照当时搜索的部分资料和自己亲身的使用来看,主要有:

    xlwt
    xlrd
    xlutils
    xlwings
    openpyxl

    这几个库各有好处,也各有缺陷,综合来看,上次直接使用了openpyxl是一个比较正确的选择。

    0x01python交互库介绍

    关于这几个库的介绍网上很多了,安装也都非常简单,可以按照pip install XXX的方式来安装,我将在这次问题中遇到的几个重要方面做记录:

    xlrd&&xlwt&&xlutils
    • 首先搜到的就是两个最简单的库xlwt和xlrd,两个库功能分开,一个负责读另一个负责写,但美中不足的就是只能支持对xls的写,所以不满足我们的使用需求,
    import xlrd
    import xlwt
    from xlutils.copy import copy
    book = xlrd.open_workbook() #打开一个表格文件,句柄传给book
    count = book.sheets()#获取sheets对象,这时使用len()获得sheet对象个数
    count = book.nsheets #共有多少个sheet
    

    获取一个sheet有两种方式,通过名字或通过编号,对应方法为book.sheet_by_index(0)book.sheet_by_name,获得sheet对象后读取特定单元格值cell_value(0,10),括号内为行列值,均从0开始计。且同类型的单元格数值可以直接比较。

    sheet1.nrows #获取行数,用来遍历
    

    xlwt创建一个新的工作表并对其进行修改,虽然修改的功能强大,但不能对xlsx修改,也不能在已有的表中做修改,所以还是有很多的限制的。而使用了xlutils导入的copy方法复制一个新的表格再利用xlwt对其修改时,操作后发现生成的xlsx不可读了,文件损坏,也饶了不少弯路。

    xlwings
    • 大家都说xlwings是最强大的excle交互库,包含了读写的全部功能,使用也比较简单,但是比起其他的库来说,操作的方式好像有呢么一丢丢不同,同样我们也了解一下打开文件、获取sheet、获取行数、获取单元格值这几个基本操作。
      导入库运行后发现还需要依赖库win32api
      1.可以使用pip install pypiwin32解决问题

      2.在https://sourceforge.net/projects/pywin32中下载对应自己python版本的win32包。安装前关闭占用python的进程,一路next。
    import xlwings
    book = xlwings.Book(strName) #
    sheet1 = book.sheets[0]  #选择一个sheet对象,编号为0
    sheet2 = book.sheet('9.17') #选择一个sheet对象,名称为9.17
    print sheet1[0,0].value  #读取0,0单元格的内容以index形式索引
    print sheet1.range('a1').value #以单元格名称为索引读取
    

    读取简单,对应的写入也非常简单

    sheet1[0,0].value = "XXX"
    sheet1.range('a1').value = "XXX"
    

    获取行列数,用来遍历

    nrow = sheet1.api.UsedRange.Rows.count
    ncol = sheet1.api.UsedRange.Columns.count
    

    基本也只用到这些操作了,下面着重讲讲我所用的openpyxl。

    openpyxl

    这个库是在实践中所用的库,使用简单,功能强大,与xlwings很难比较孰强孰弱,都能满足我们的时间需求。

    import openpyxl
    work = openpyxl.load_workbook('Test.xlsx')  #打开一个工作簿
    sheet_names = work.get_sheet_names() #获得sheet_name的数组
    sheet1 = work.get_sheet_by_name('9.99') #以sheet名称获取sheet对象
    sheet2 = work.get_sheet_by_name(sheet_names[0]) #获取名称数组后按索引,可以在不知道名称的情况下遍历
    print sheet1.cell(1,1).value #需要注意的是单元格从1,1开始,而不是0
    sheet1.cell(1,1).value = '111' #写单元格
    print sheet1.max_row #总行数
    print sheet1.max_column  #总列数
    work.save('001T_ok.xlsx')#保存更名
    

    0x02问题分析

    接触这个任务时有这个想法是第一次将python运用到实际,想要解放生产力,所以还是遇到了很多的小问题,记录一下以备不时之需,整个实践可以细化为几个部分,这也是在遇到问题后的分析思路。

    第一,操作方面:对需要修改表格的操作,包括打开,遍历,读写,然后保存。
    第二,逻辑方面:首先从第一项菜品开始,在本市对应日期的所有菜品中查找,找到对应价格,填写上去;>其次是有名称不统一的情况出现,例如“大葱”,“葱”、“姜”,“生姜”等同类菜品的不同叫法。
    第三,编码方面:名称均为汉字 ,分为打印输出的编码问题和日期比较的编码问题。
    第四,库对文件格式的支持问题:选择xlwings和openpyxl这两个库来完成实践。

    0x03代码实现

    细化为四个问题后开始代码的实现,操作方面上文已经提到。
    1.名称不一致问题又建了一个名称的更新表 Csql.xlsx,可以让查找不到的菜品在新的xlsx中替换名字查询,还可以随时追加新的内容,这时就再次遍历表就可以了。
    2.日期问题在每个录入的表中做标记,使用excle中内容来互相比较,避免格式问题。
    3.查询不到的使用try跳过。
    4.使用flag位标记。
    实现的代码也很简单,主要是记录一下使用的库和基本的操作。

    展开全文
  • 排除时间浮动,从中发现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文档在国内搜索基本很少,如下...
  • xlwings基础操作放弃openpyxl的基础理由:①不支持xls文件处理; ②亲测目前版本样式保存的bug还未解决;如果遇到上面两个问题,直接放弃openpyxl,拥抱xlwings吧,没什么出路;xlwings文档在国内搜索基本很少,如下...
  • openpyxl可以读写xlsxxlwings:依赖于pywin32,需要安装有excel软件,支持.xls和.xlsx格式openpyxl:不需要excel软件,仅支持.xlsx格式You are correct in thatxlwingsrelies onpywin32, whereasopenpyxldoes not....
  • xlwings系列文章我想分为四块:(一)问题引入、安装、操作Application,Workbooks和worksheets,range的方法(二)如何与VBA,pandas交互(三)xlwings实战(四)pandas,openpyxl,xlwings对比分析李鑫:python xlwings excel...
  • xlwings使用教程

    万次阅读 多人点赞 2019-10-21 15:34:11
    python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作text、...
  • openpyxl的一个坑

    千次阅读 2020-01-22 20:58:18
    这几天一直尝试用Python来做一些Excel的自动化,xlrd,openpyxlxlwings都尝试了,其中openpyxl有一个很奇葩的问题,即我发现无法使用load_wrokbook打开excel, xlrd和xlwings都可以。系统的提示是: Traceback ...
  • 特别提醒:openpyxl不支持对xls文件的处理,且对原文件的样式保存非常不友好,如果你有保存原文件样式要求的话,建议使用xlwings替代openpyxl基础操作:直接复制代码到编辑器,边看边运行,理解起来估计还快些~from ...
  • openpyxl 基础操作 Python

    2020-02-28 16:58:38
    openpyxl不支持对xls文件的处理,且对原文件的样式保存非常不友好,如果你有保存原文件样式要求的话,建议使用xlwings替代openpyxl 基础操作: 直接复制代码到编辑器,边看边运行,理解起来估计还快些~ from ...
  • (一)python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作...
  • xlwings系列文章我想分为四块:(一)问题引入、安装、操作Application,Workbooks和worksheets,range的方法(二)如何与VBA,pandas交互(三)xlwings实战(四)pandas,openpyxl,xlwings对比分析李鑫:python ...
  • openpyxl 常用接口

    2019-12-28 12:07:43
    目录 一. 几种操作excel的lib比较 二. openpyxl 基本用法 1. xlsx文件和工作表的常用...xlwings:简单强大,可替代VBA openpyxl:简单易用,功能广泛 pandas:使用需要结合其他库,数据处理是pandas立身之本 w...
  • 针对处理Excel的各种三方库xlrd, xlwt, xlutils, xlwings, openpyxl, xlsxwriter, win32com, DataNitro, pandas,较为全面的介绍 Xlwings 基础教程:https://www.cnblogs...
  • (一)python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作...
  • 在以前的推文中,我们介绍了操作Excel的模块Xlwings的知识,相关推文可以从本公众号的底部相关菜单获取。有小伙伴反映自己在一些文章中看到openpyxl也能对Excel进行相关的操作,于是留言想在本公众号里也能看到相关...
  • xlwings 操作图片笔记

    2020-09-28 18:35:31
    openpyxl:不需要excel软件,仅支持.xlsx格式 import xlwings as xw import time wb=xw.Book() #创建新的工作薄 sht=wb.sheets['Sheet1'] #实例化工作表 sht.range('A1').value='hello world !' #写入 print(sht....
  • 在之前的文章中我们曾详细的讲解了如何使用 openpyxl 操作Excel,其实在Python中还有其他可以直接操作 Excel 文件的库,如 xlwings 、 xlrd 、 xlwt 等等,本文就将讲解另一个优秀的库 xlwings 开头还是想说一下,...
  • 我读了很多关于如何使用openpyxl的书,但是我想读的是值而不是公式,这就是为什么我找到了xlwings。现在我发现在xlwings中很难找到细胞的坐标。在openpyxl中非常简单单元格坐标想要类似的东西。在我对python很陌生,...
  • 我已经阅读了很多关于如何使用openpyxl但我想读取值而不是公式,这就是我找到xlwings的原因。现在我发现在xlwings中寻找细胞协调的困难。它在openpyxl cell.coordinate中非常简单,并且想要类似的东西。我是python的...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 298
精华内容 119
关键字:

openpyxlxlwings