简单介绍
- 利用xlrd读取xls数据,给xls表添加"所属平台"字段分列(以最长分列为准,填充空格)。
- 利用openpyxl,将分列后数据存储到xls文件中,名字格式固定。
具体代码
# 用户原始表格存放位置:D:\lvhanghmm\1 日常巡检\9 日常巡检资料数据源
# Excel读写参考:https://blog.csdn.net/AXIMI/article/details/102935496
import glob
import xlrd # 读 # pip install xlrd
import openpyxl # 写 # pip install openpyxl
import os
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment
if not os.path.exists("./未修改"):
os.mkdir("./未修改")
def 获取未修改文件列表():
file_list = glob.glob("./未修改/*.xls")
print("获取到的文件路径列表:", file_list)
return file_list
def 得到分列表头列表(最大分列数):
分列表头 = []
中文数字 = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]
for i in range(最大分列数):
分列表头.append(中文数字[i]+"级目录")
return 分列表头
def 设置单元格格式(sheet): # 参考:https://blog.csdn.net/qq_42774234/article/details/123007872?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-123007872-blog-125582295.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.2&utm_relevant_index=4
# 边框
border = Border(
left=Side(border_style='thin', color='000000'),
right=Side(border_style='thin', color='000000'),
top=Side(border_style='thin', color='000000'),
bottom=Side(border_style='thin', color='000000'),
)
# 对齐
alignment = Alignment(
horizontal='center',
vertical='center',
text_rotation=0,
indent=0
)
# # 字体
# font = Font(
# name='宋体',
# size=10,
# bold=True,
# italic=False,
# strike=False,
# color='000000'
# )
for row, row_ind in zip(sheet.iter_rows(), range(1, sheet.max_row + 1)):
for cell in row:
# 设置边框
sheet[cell.coordinate].border = border
# 设置居中对齐
sheet[cell.coordinate].alignment = alignment
# 行高20
# sheet.row_dimensions[row_ind].height = 20
# 设置字体
# sheet[cell.coordinate].font = font
def 对单个文件的所属平台进行分列追加(文件路径):
# ---------------------------------------读取数据部分------------------------------------------------------
filename = 文件路径
文件名时间 = filename.split("\\")[-1].split(" - ")[-1][:-4] # 获得文件名中的时间字符串 2024-02-04T201652.900
print("文件名时间:", 文件名时间)
book = xlrd.open_workbook(filename)
sheet = book.sheet_by_index(0) # 读取第一张表
序号 = sheet.col_values(0)
镜头名称 = sheet.col_values(1)
镜头编码 = sheet.col_values(2)
国标编码 = sheet.col_values(3)
所属平台 = sheet.col_values(4)
分辨 = sheet.col_values(5)
数模类 = sheet.col_values(6)
分类 = sheet.col_values(7)
在线状态 = sheet.col_values(8)
最后采集时间 = sheet.col_values(9)
IP = sheet.col_values(10)
# print(len(序号)) # 19219
# print(序号)
# print(len(镜头名称)) # 19219
# print(镜头名称)
# print(len(镜头编码)) # 19219
# print(镜头编码)
# ########### 将所属平台分列 ##############
print("数据条数:", len(所属平台)) # 19219
# print("所属平台:", 所属平台)
所属平台_ll = []
最大分列数 = 0
for item in 所属平台:
temp_list = item.split("/")
if 最大分列数 < len(temp_list):
最大分列数 = len(temp_list)
所属平台_ll.append(temp_list)
# print("原始的所属平台_ll:", 所属平台_ll)
print("最大分列数:", 最大分列数)
分列表头 = 得到分列表头列表(最大分列数)
print("分列表头:", 分列表头)
所属平台_ll[0] = 分列表头
for item in 所属平台_ll:
追加空格数 = 最大分列数-len(item)
if len(item) < 最大分列数:
item += ([" "] * 追加空格数)
# print("变换表头且追加空格后的所属平台_ll:", 所属平台_ll)
# print(len(所属平台_ll)) # 19219
row_before = list(zip(序号, 镜头名称, 镜头编码, 国标编码, 所属平台))
row_after = list(zip(分辨, 数模类, 分类, 在线状态, 最后采集时间, IP))
# print("row_before:", row_before)
# print(len(row_before))
# print("row_after:", row_after)
# print(len(row_after))
# -------------------------------------------写入数据部分-----------------------------------------------
print("正在转换并写入数据。。。。。。")
wb = openpyxl.Workbook()
sheet = wb.active
for i in range(len(所属平台_ll)):
sheet.append(list(row_before[i]) + 所属平台_ll[i] + list(row_after[i]))
print("正在设置单元格格式。。。。。。")
设置单元格格式(sheet)
save_file_name = "平台数据汇总表 - " + 文件名时间
wb.save(f"./{save_file_name}.xls")
def 读取并操作原始Excel表():
file_list = 获取未修改文件列表()
count_file = len(file_list) # 文件数
if count_file == 1:
file_path = file_list[0] # 文件路径
对单个文件的所属平台进行分列追加(file_path)
elif count_file > 1:
for i in range(count_file):
对单个文件的所属平台进行分列追加(file_list[i])
else:
print("未找到文件!!请在”未修改“文件夹中放入导出的平台文件!!")
def main():
读取并操作原始Excel表()
if __name__ == "__main__":
main()
打包成exe文件的命令
pyinstaller -F python_file_name.py
可放入多个文件同时转换分列
程序及文件下载链接
https://download.csdn.net/download/ungoing/88812752