乐趣区

放弃openpyxl,拥抱xlwings(python操作xls)

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’]

# load_ws.range(‘A1’).value = ‘x123x213’

# 获取总行数(存在数据)
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.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 单列值读取到列表中,str() 是要把 int 转为 string
# 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()

退出移动版