zoukankan      html  css  js  c++  java
  • 【Python】处理Excel的库Xlwings

    # # 引入库
    import xlwings as xw
    import time
    
    # 打开Excel程序,默认设置:程序可见,只打开不新建工作薄
    # app = xw.App(visible=True,add_book=False)
    #新建工作簿 (如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)
    # wb = app.books.add()
    
    # 打开已有工作簿(支持绝对路径和相对路径)
    # wb = app.books.open('example.xlsx')
    练习的时候建议直接用下面这条,这样的话就不会频繁打开新的Excel
    wb = xw.Book('example.xlsx')
    
    print('-----新建sheet-----')
    wb.sheets.add('jenny')
    
    # 引用Excel工作表,单元格
    print('-----引用-----')
    # 引用工作表
    sht = wb.sheets[0]
    #sht = wb.sheets[第一个sheet名]
    
    # 引用单元格
    rng = sht.range('a1')
    # #rng = sht['a1']
    # #rng = sht[0,0] 第一行的第一列即a1,相当于pandas的切片
    print ("引用单元格: "+str(rng.value))
    #
    # # 引用区域
    rng = sht.range('a1:a5')
    #rng = sht['a1:a5']
    #rng = sht[:5,0]
    print ("引用区域: "+str(rng.value))
    
    # 重头戏:写入数据
    # (xlwings多个单元格的写入大多是以表格形式)
    print('-----写入-----')
    # 选择起始单元格A1,写入字符串‘Hello’
    print('-----写入单元格-----')
    sht.range('a1').value = 'Hello'
    time.sleep(3)
    # 默认按行插入:A1:D1分别写入1,2,3,4
    print('-----按行写入-----')
    sht.range('a1').value = [1,2,3,4]
    time.sleep(3)
    
    # 等同于
    # sht.range('a1:d1').value = [1,2,3,4]
    
    # 按列插入: A2:A5分别写入5,6,7,8
    # 你可能会想
    sht.range('a2:a5').value = [5,6,7,8]
    
    # 但是你会发现xlwings还是会按行处理的,上面一行等同于
    # sht.range('a2').value = [5,6,7,8]
    
    # 正确语法:
    print('-----按列写入-----')
    sht.range('a2').options(transpose=True).value = [5,6,7,8]
    # 既然默认的是按行写入,我们就把它倒过来嘛(transpose),单词要打对,如果你打错单词,它不会报错,而会按默认的行来写入(别问我怎么知道的)
    
    # 我们输入信息的时候往往不只是写入一行或一列,
    # 多行输入就要用二维列表了:
    sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]
    
    #B2到E5单元格全部赋同样的值
    sht.range("B2","E5").value="bb"
    
    # 说完了写入就该讲读取了,记住了写入,读取就简单了
    # 读取A1:D4(直接填入单元格范围就行了)
    print('-----读取单元格内容-----')
    print("读取A1:D4: "+str(sht.range('a1:d4').value))
    
    # 返回的值是列表形式,多行多列为二维列表,但有一点要注意,返回的数值默认是浮点数
    a = sht.range('a1:d1').value
    print("读取A1:D1: "+str(a))
    for i in a:
        print("读取单元格: "+str(i))
        print("单元格数据类型: "+str(type(i)))
    
    # 读取excel的第一列怎么做?
    a = sht.range('a:a').value
    print (a)
    print(len(a))
    # 你将会得到一个1048576个元素的列表,也就是空值也包含进去了,所以这种方法不行
    
    # 思路:先计算单元格的行数(前提是连续的单元格)
    rng = sht.range('a1').expand('table')
    nrows = rng.rows.count
    
    # 接着就可以按准确范围读取了
    a = sht.range(f'a1:a{nrows}').value
    print("读取excel的第一列: "+str(a))
    
    # 同理选取一行的数据也一样
    ncols = rng.columns.count
    #用切片
    fst_col = sht[0,:ncols].value
    print("读取excel的第一行: "+str(fst_col))
    
    # 获取单元格字体,大小,颜色等属性
    print('-----读取格式-----')
    font_name = sht.range('A1').api.Font.Name	# 获取字体名称
    font_size = sht.range('A1').api.Font.Size	# 获取字体大小
    bold = sht.range('A1').api.Font.Bold		# 获取是否加粗,True--加粗,False--未加粗
    color = sht.range('A1').api.Font.Color		# 获取字体颜色
    print("A1单元格字体:"+font_name)
    print("A1单元格大小:"+str(font_size))
    print("A1单元格是否加粗:"+str(bold))
    print("A1单元格颜色:"+str(color))
    
    # 设置单元格字体,大小,颜色等属性
    print('-----设置格式-----')
    sht.range('A1').api.Font.Name = 'Times New Roman'	# 设置字体为Times New Roman
    sht.range('A1').api.Font.Size = 15			# 设置字号为15
    sht.range('A1').api.Font.Bold = True		# 加粗
    sht.range('A1').api.Font.Color = 0x0000ff	# 设置为红色RGB(255,0,0)
    font_name = sht.range('A1').api.Font.Name	# 获取字体名称
    font_size = sht.range('A1').api.Font.Size	# 获取字体大小
    bold = sht.range('A1').api.Font.Bold		# 获取是否加粗,True--加粗,False--未加粗
    color = sht.range('A1').api.Font.Color		# 获取字体颜色
    print("A1单元格字体:"+font_name)
    print("A1单元格大小:"+str(font_size))
    print("A1单元格是否加粗:"+str(bold))
    print("A1单元格颜色:"+str(color))
    
    # 设置背景色
    print('-----设置背景色-----')
    sht.range('A6:V10').color = (255,0,255)
    time.sleep(3)
    
    sht["A1048576"].end('up').row #最大行,根据单元格位置
    print(sht["XFD1"].end('left').column) #最大列,根据单元格位置
    
    # 清理内容,清理数据及格式
    print('-----清理内容,清理数据及格式-----')
    sht.range('A6:V10').clear()
    
    # 删除行和列,插入行和列
    print('-----按行写入-----')
    sht.range('b2').value = ["papi","lucy","kunal","snoopy"]
    print('-----按列写入-----')
    sht.range('b3').options(transpose=True).value = ["year","month"]
    print('-----删除行和列,插入行和列-----')
    sht.api.rows(1).delete #删除首行
    time.sleep(3)
    sht.api.columns(1).delete# 删除首列
    sht.api.columns(2).insert #插入列
    sht.api.rows(2).insert #插入行
    time.sleep(3)
    
    # 合并单元格
    print('-----合并单元格-----')
    sht.range('A1:A5').api.merge()
    
    # 保存工作簿
    wb.save('example.xlsx')
    
    # 退出工作簿(可省略)
    wb.close()
    
    # 退出Excel
    app.quit()
    #
    

      

  • 相关阅读:
    为Delphi配置多套环境
    0425-字符输入流FileReader
    使用 IntraWeb (9)
    使用 IntraWeb (7)
    使用 IntraWeb (6)
    使用 IntraWeb (5)
    使用 IntraWeb (4)
    使用 IntraWeb (3)
    使用 IntraWeb (2)
    使用 IntraWeb (1)
  • 原文地址:https://www.cnblogs.com/MasterMonkInTemple/p/11857487.html
Copyright © 2011-2022 走看看