一个实例,下次运用时,可以照猫画虎。涉及了新建sheet,插入列表,设置行高,字号,csv文件读取,列表去重,表头插入,保存退出等。都有注释,一看就懂~
代码
import csv
import xlwings as xw
from itertools import islice
# 读取的文件名
A_server_file = 'A_server.csv'
B_server_file = 'B_server.csv'
# 输出的excel文件名
out_excel_file = 'A_B_Out.xlsx'
# 定义excel中的sheet
host_sheet = 'A和B的主机名对比'
ip_sheet = 'A和B的IP对比'
# 从A和B中提取的应用名
pre_app = 'XXX'
# 每个sheet定义2个list,xlwings在插入列时,是以list形式插入的
# 所有的主机名列表
a_host_list = []
b_host_list = []
# 所有的IP列表
a_ip_list = []
b_ip_list = []
# 读取之前脚本生成的csv文件,提取B文件的信息到列表。
with open(B_server_file, 'r', encoding='utf8', newline='') as csv_f:
# csv文件有表头的话,要去除第1行的表头
csv_r = csv.reader(csv_f)
for row in islice(csv_r, 1, None):
if pre_app == row[-1]:
# row的定义,按具体的数据记录定位
b_host_list.append(row[-2])
b_ip_list.append(row[-3])
print('read content to {} file.'.format(B_server_file))
# 读取之前脚本生成的csv文件,提取A文件的信息到列表。
with open(A_server_file, 'r', encoding='utf8', newline='') as csv_f:
# csv文件有表头的话,要去除第1行的表头
csv_r = csv.reader(csv_f)
for row in islice(csv_r, 1, None):
if pre_app == row[-1]:
# row的定义,按具体的数据记录定位
a_host_list.append(row[1])
a_ip_list.append(row[2])
print('read content to {} file.'.format(A_server_file))
# 列表去重
a_host_list = list(set(a_host_list))
b_host_list = list(set(b_host_list))
a_ip_list = list(set(a_ip_list))
b_ip_list = list(set(b_ip_list))
# 插入首行作列的表头
a_host_list.insert(0, 'a_host')
b_host_list.insert(0, 'b_host')
a_ip_list.insert(0, 'a_ip')
b_ip_list.insert(0, 'b_ip')
# 使用xlwings实例脂excel,并操作之
app = xw.App(visible=False, add_book=False)
wb = app.books.add()
# excel里加sheet
wb.sheets.add(host_sheet)
wb.sheets.add(ip_sheet)
# 定位一个具体的shell
sht_host_sheet = wb.sheets[host_sheet]
# 在每列插入数据
sht_host_sheet.range("A1").options(transpose=True).value = a_host_list
sht_host_sheet.range("B1").options(transpose=True).value = b_host_list
# 设置excel格式
# 表示A1开始,向右所有列,多选。不然得一个一个选择
sht_host_sheet.range('A1').expand('right').color = (255, 0, 0)
# 自动调整单元格大小。
# sht_host_sheet.autofit()
# 设置从A1向右的所有列宽
sht_host_sheet.range('A1').expand('right').column_width = 60
# 通过多的列设置所有表格的字体和行高
sht_host_sheet.range('B1').expand('down').font_size = 38
sht_host_sheet.range('B1').expand('down').row_height = 40
# 定位一个具体的shell
sht_ip_sheet = wb.sheets[ip_sheet]
# 在每列插入数据
sht_ip_sheet.range("A1").options(transpose=True).value = a_ip_list
sht_ip_sheet.range("B1").options(transpose=True).value = b_ip_list
# 设置excel格式
# 表示A1开始,向右所有列,多选。不然得一个一个选择
sht_ip_sheet.range('A1').expand('right').color = (255, 0, 0)
# 自动调整单元格大小。
# sht_ip_sheet.autofit()
# 设置从A1向右的所有列宽
sht_ip_sheet.range('A1').expand('right').column_width = 60
# 通过多的列设置所有表格的字体和行高
sht_ip_sheet.range('B1').expand('down').font_size = 38
sht_ip_sheet.range('B1').expand('down').row_height = 40
# 保存及退出,都是套路
wb.save(out_excel_file)
print(wb.sheets)
wb.close()
app.quit()