zoukankan      html  css  js  c++  java
  • python大战EXCEL--xlwings

    xlwings的特色

    • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
    • 可以和matplotlib以及pandas无缝连接
    • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。

    常用函数和方法

      1. Book 工作簿常用的api
        wb=xw.books[‘工作簿名称']
        • wb.activate()激活为当前工作簿
        • wb.fullname 返回工作簿的绝对路径
        • wb.name 返回工作簿的名称
        • wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
          -wb. close() 关闭工作簿
          代码例子:
          # 引用Excel程序中,当前的工作簿
          wb=xw.books.acitve
          # 返回工作簿的绝对路径
          x=wb.fullname
          # 返回工作簿的名称
          x=wb.name
          # 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
          x=wb.save(path=None)
          # 关闭工作簿
          x=wb.close()
      2. sheet 常用的api
        # 引用某指定sheet
        sht=xw.books['工作簿名称'].sheets['sheet的名称']
        # 激活sheet为活动工作表
        sht.activate()
        # 清除sheet的内容和格式
        sht.clear()
        # 清除sheet的内容
        sht.contents()
        # 获取sheet的名称
        sht.name
        # 删除sheet
        sht.delete
      3. range常用的api
        # 引用当前活动工作表的单元格
        rng=xw.Range('A1')
        # 加入超链接
        # rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
        # 取得当前range的地址
        rng.address
        rng.get_address()
        # 清除range的内容
        rng.clear_contents()
        # 清除格式和内容
        rng.clear()
        # 取得range的背景色,以元组形式返回RGB值
        rng.color
        # 设置range的颜色
        rng.color=(255,255,255)
        # 清除range的背景色
        rng.color=None
        # 获得range的第一列列标
        rng.column
        # 返回range中单元格的数据
        rng.count
        # 返回current_region
        rng.current_region
        # 返回ctrl + 方向
        rng.end('down')
        # 获取公式或者输入公式
        rng.formula='=SUM(B1:B5)'
        # 数组公式
        rng.formula_array
        # 获得单元格的绝对地址
        rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
        # 获得列宽
        rng.column_width
        # 返回range的总宽度
        rng.width
        # 获得range的超链接
        rng.hyperlink
        # 获得range中右下角最后一个单元格
        rng.last_cell
        # range平移
        rng.offset(row_offset=0,column_offset=0)
        #range进行resize改变range的大小
        rng.resize(row_size=None,column_size=None)
        # range的第一行行标
        rng.row
        # 行的高度,所有行一样高返回行高,不一样返回None
        rng.row_height
        # 返回range的总高度
        rng.height
        # 返回range的行数和列数
        rng.shape
        # 返回range所在的sheet
        rng.sheet
        #返回range的所有行
        rng.rows
        # range的第一行
        rng.rows[0]
        # range的总行数
        rng.rows.count
        # 返回range的所有列
        rng.columns
        # 返回range的第一列
        rng.columns[0]
        # 返回range的列数
        rng.columns.count
        # 所有range的大小自适应
        rng.autofit()
        # 所有列宽度自适应
        rng.columns.autofit()
        # 所有行宽度自适应
        rng.rows.autofit()
      4. books 工作簿集合的api
        # 新建工作簿
        xw.books.add()
        # 引用当前活动工作簿
        xw.books.active
      5. sheets 工作表的集合
        # 新建工作表
        xw.sheets.add(name=None,before=None,after=None)
        # 引用当前活动sheet
        xw.sheets.active

    1.打开已保存的Excel文档
    # 导入xlwings模块,打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭

    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    app.display_alerts=False
    app.screen_updating=False
    wb=app.books.open(filepath)
    wb.save()
    wb.close()
    app.quit()

    2. 新建Excel文档,命名为test.xlsx,并保存

    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    wb=app.books.add()
    wb.save(r'd:	est.xlsx')
    wb.close()
    app.quit()
    3.新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出Excel程序。
    import xlwings as xw
    app=xw.App(visible=True,add_book=False)
    wb=app.books.add()
    # wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
    wb.sheets['sheet1'].range('A1').value='人生'
    wb.save(r'd:	est.xlsx')
    wb.close()
    app.quit()

    引用工作簿、工作表和单元格

    1.引用工作簿,注意工作簿应该首先被打开

    wb.=xw.books['工作簿的名字‘]

    2.引用活动工作簿

    wb=xw.books.active

    3.引用工作簿中的sheet

    sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
    # 或者
    wb=xw.books['工作簿的名字']
    sht=wb.sheets[sheet的名字]

    4.引用活动sheet

    sht=xw.sheets.active

    5.引用A1单元格

    rng=xw.books['工作簿的名字‘].sheets['sheet的名字']
    # 或者
    sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
    rng=sht.range('A1')

    6.引用活动sheet上的单元格

    其中需要注意的是单元格的完全引用路径是:
    # 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
    xw.apps[0].books[0].sheets[0].range('A1')
    迅速引用单元格的方式是
    sht=xw.books['名字'].sheets['名字']
    # A1单元格
    rng=sht[’A1']
    # A1:B5单元格
    rng=sht['A1:B5']
    # 在第i+1行,第j+1列的单元格
    # B1单元格
    rng=sht[0,1]
    # A1:J10
    rng=sht[:10,:10]

    PS:

    对于单元格也可以用表示行列的tuple进行引用
    # A1单元格的引用
    xw.Range(1,1)
    #A1:C3单元格的引用
    xw.Range((1,1),(3,3))

    数据结构

    1.一维数据

    python的列表,可以和Excel中的行列进行数据交换,python中的一维列表,在Excel中默认为一行数据

    import xlwings as xw
    sht=xw.sheets.active
    # 将1,2,3分别写入了A1,B1,C1单元格中
    sht.range('A1').value=[1,2,3]
    # 将A1,B1,C1单元格的值存入list1列表中
    list1=sht.range('A1:C1').value
    # 将1,2,3分别写入了A1,A2,A3单元格中
    sht.range('A1').options(transpose=True).value=[1,2,3]
    # 将A1,A2,A3单元格中值存入list1列表中
    list1=sht.range('A1:A3').value

    2.二维数据
    python的二维列表,可以转换为Excel中的行列。二维列表,即列表中的元素还是列表。在Excel中,二维列表中的列表元素,代表Excel表格中的一列。例如:

    # 将a1,a2,a3输入第一列,b1,b2,b3输入第二列
    list1=[[‘a1’,'a2','a3'],['b1','b2','b3']]
    sht.range('A1').value=list1
     
    提取运行结果
    # 将A1:B3的值赋给二维列表list1
    list1=sht.range('A1:B3‘).value

    3.Excel中区域的选取表格

    第一列

    # 选取第一列
    rng=sht. range('A1').expand('down')
    rng.value=['a1','a2','a3'
     
    第一行
    # 选取第一行
    rng=sht.range('A1').expand('right')
    rng=['a1','b1']
     
     
    # 选取表格
    rng.sht.range('A1').expand('table')
    rng.value=[[‘a1’,'a2','a3'],['b1','b2','b3']]
     表格
     





  • 相关阅读:
    打印九九乘法表
    PAT (Basic Level) Practice (中文) 1091 N-自守数 (15分)
    PAT (Basic Level) Practice (中文)1090 危险品装箱 (25分) (单身狗进阶版 使用map+ vector+数组标记)
    PAT (Basic Level) Practice (中文) 1088 三人行 (20分)
    PAT (Basic Level) Practice (中文) 1087 有多少不同的值 (20分)
    PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)
    PAT (Basic Level) Practice (中文) 1085 PAT单位排行 (25分) (map搜索+set排序+并列进行排行)
    PAT (Basic Level) Practice (中文) 1083 是否存在相等的差 (20分)
    PAT (Basic Level) Practice (中文) 1082 射击比赛 (20分)
    PAT (Basic Level) Practice (中文) 1081 检查密码 (15分)
  • 原文地址:https://www.cnblogs.com/wqbin/p/11880932.html
Copyright © 2011-2022 走看看