xlwings模块的日常使用

Python的xlwings模块经常用来操作xlsx文档,是办公党比较常用的。
下面就是一个示例,从文件A.xlsx中读取一些数据,在B.xlsx中做筛选,然后保存到C.xlsx

import xlwings as xw

fileA = r"A.xlsx"
fileB = r"B.xlsx"
fileC = r"C.xlsx"

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False
# 打开 A.xlsx 文件
wb_a = app.books.open(fileA)
sheet_a = wb_a.sheets[0]

# 读取 A.xlsx 中某一列的数据
file_names = sheet_a.range('A1').expand('down').value[1:]
#print(file_names)
wb_a.close()
print("begin to filter")
# 打开 B.xlsx 文件
wb_b = app.books.open(fileB)
sheet_b = wb_b.sheets[0]

# 读取 B.xlsx 中某一列的数据(假设为URL)
urls = sheet_b.range('AU1').expand('down').value[1:]
#print(urls)

# 根据 A.xlsx 中的文件名筛选 B.xlsx 中的数据
print("Used range:",sheet_b.used_range)
data = sheet_b.used_range.value

# 根据 A.xlsx 中的文件名筛选 B.xlsx 中的数据
filtered_data = [data[0]]  # 保留 B.xlsx 表头
for row in data[1:]:
    fullurl = row[46] # 假设文件名在 B.xlsx 中的第47列(AU列)
    if not fullurl: continue
    for file_name in file_names:
        if file_name in fullurl:  
            filtered_data.append(row)
            break

wb_b.close()
# 创建新的 Excel 文件 C.xlsx 并保存筛选后的数据
print("begin to save")
wb_c = app.books.add()
sheet_c = wb_c.sheets[0]
# 逐行写入数据
# for i, row in enumerate(filtered_data):
#     sheet_c.range('A{}'.format(i+1)).value = row
sheet_c.range('A1').value = filtered_data
wb_c.save(fileC)
wb_c.close()

# 关闭所有打开的工作簿
app.quit()

print("done")

 

posted @ 2024-11-21 20:04  黑月教主  阅读(47)  评论(0编辑  收藏  举报