xlwings包

# coding=utf-8 
import xlwings 
import os 
import sys 
from itertools import product

# 当前路径,当前文件
cur_path, cur_file = os.path.split(os.path.abspath(sys.argv[0])) 
# 上级目录 ..\\WP_V2
# parent_path = os.path.abspath(os.path.join(cur_path, '../'))
filepath = os.path.join(cur_path, 'demo.xlsx')

# xlwings
# Sheet2 样式
# Sheet3 案例
# Sheet4 图表
with xlwings.App(visible=False, add_book=False) as app:
    app.display_alerts=False
    app.screen_updating=False

    if os.path.exists(filepath):
        book = app.books.open(filepath) 
        print('PID:{}, 打开文件:{}'.format(app.pid, book.name))
    else:
        book = app.books.add()  # 或者xlwings.Book()
        print('创建文件:{}'.format(filepath))

    try:
        book.sheets.add('Sheet2', after='Sheet1') 
        sht2 = book.sheets['Sheet2']
        print('创建Sheet2')
    except:
        sht2 = book.sheets['Sheet2']
        print('已存在Sheet2')

    # 删除Sheet1
    try:
        sht1 = book.sheets['Sheet1'] # book.sheets[0] 
        sht1.delete()
    except:
        pass 

#############################  样式 start  #############################
    # 设置值
    sht2.range('A1').value = [1,2,3] #行值
    sht2.range('A2').options(transpose=True).value=[1,2,3] #列值
    sht2.range('D1').options(expand='table').value=[[1,2],[3,4]] #表格

    # 设置公式
    sht2.range('H1').formula = '=SUM(A1:E1)'

    # 设置值2, 读取range范围的值
    for i in range(1, 6):
        for j in range(1, 6):
            sht2.range(10+i, 10+j).value = '({}, {})'.format(10+i, 10+j)
    # print(sht2.range((11,11), (15,15)).expand().value)  # 批量读取
    # print(sht2.range(11,11).expand('right').value)  # 按行读取
    print(sht2.range(11,11).expand('down').value)   # 按列读取
    # options(transpose=True) 按列读取, 否则按行读取
    # print(sht2.range('K11:O15').options(transpose=True).value)   # 按列读取

    # 返回单元格绝对路径
    print(sht2.range('K11').get_address())  # $K$11

    # range对象
    rng1 = sht2.range('A1') 
    # 删除
    # rng1.delete(shift=None) #删除单元格 
    # rng1.clear() # 删除内容和样式
    rng1.clear_contents() #删除内容

    # 合并单元格 
    # sht2.range('F1:H3').merge(across=False)
    # 取消合并单元格 
    # sht2.range('F1:H3').unmerge()
    #设置颜色 
    # (product('ABCDEFGH', '1') 返回值是元组
    for cell in list(map(''.join, product('ABCDE', '1'))):
        sht2.range(cell).color = '#b1c5fd'
    #设置图片
    A10 = sht2.range('A10')
    sht2.pictures.add(os.path.join(cur_path, 'demo.png'), left=A10.left, top=A10.top, width=120, height=100)
    # 设置超链接
    sht2.range('I1').add_hyperlink(address='www.baidu.com', text_to_display='百度', screen_tip='百度一下,你就知道')
    print(sht2.range('I1').hyperlink)
    #设置数字格式 
    sht2.range('A1:A3').number_format = '0.00%' 
    # 行号 1 
    # print(sht2.range('A1:A3').row) 
    # 列号 1 
    # print(sht2.range('A1:A3').column) 
    # 设置行高和列宽 
    sht2.range('A1:A3').row_hight=20 
    sht2.range('A1:A3').column_width=20 
    # 自适应行高和列宽 
    sht2.range('A1:A3').autofit() 
    sht2.range('A1:A3').rows.autofit() 
    sht2.range('A1:A3').columns.autofit() 
    # 字体
    K1 = sht2.range('K1')
    K1.value = '中华儿女'
    K1.font.name='黑体'
    K1.font.color = '#8B0000' # todo
    K1.font.size=28
    K1.font.bold=True
    # 边框的风格和粗细
    K1.api.Borders(9).LineStyle = 5
    K1.api.Borders(9).Weight = 3

    # 数字
    L1 = sht2.range('L1')
    L1.value = '100'
    L1.api.NumberFormat = '0.0'
    # -4108 水平居中, -4131 水平靠左, -4152 水平靠右
    L1.api.HorizontalAlignment = -4152
    # -4130 自动换行对齐, -4108垂直居中, -4160 垂直居上, -4107 垂直居下
    L1.api.VerticalAlignment = -4107
    
#############################  样式 end  #############################


#############################  案例 start  #############################
    try:
        book.sheets.add('Sheet3', after='Sheet2') 
        sht3 = book.sheets['Sheet3']
        print('创建Sheet3')
    except:
        sht3 = book.sheets['Sheet3']
        print('已存在Sheet3')

    # 表头和内容
    titles = [['商品编号', '商品名称', '数量']]
    info_list = [
        [101, '帐篷', 5],
        [104, '行李箱', 12],
        [102, '微波炉', 7],
        [105, '电冰箱', 18]
    ]

    # 写入表头和内容
    sht3.range('A1').value=titles
    sht3.range('A2').value=info_list

    # 读取数据
    goods_list = sht3.range('A2').expand('table').value
    new_info_list = [
        [108, '电视机', 15],
        [104, '行李箱', 12],
        [109, '空调', 8]
    ]
    # 差集
    new_goods_no = list(set([item[0] for item in new_info_list]) - set([item[0] for item in info_list]))
    extra_new_info_list = list(filter(lambda item:item[0] in new_goods_no, new_info_list))
    sht3.range('A2').value = info_list + extra_new_info_list
#############################  案例 end  #############################


#############################  图表 start  #############################
    try:
        book.sheets.add('Sheet4', after='Sheet3') 
        sht4 = book.sheets['Sheet4']
        print('创建Sheet4')
    except:
        sht4 = book.sheets['Sheet4']
        print('已存在Sheet4')

    # https://blog.csdn.net/weixin_46847902/article/details/125695047
#############################  图表 end    #############################

    # 保存关闭
    book.save(filepath) 
    book.close() 



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容