import csv
import decimal
import os
import openpyxl
# 获取模板 excel 的操作对象
from openpyxl.chart import Series, LineChart, BarChart, ScatterChart, Reference
from openpyxl.utils import get_column_letter
wb = openpyxl.load_workbook("C:\\Users\\CMS01\\Desktop\\SCHH621TEG_LDO(PLDO、NLDO、CPLDO)测试需求_20230814.xlsx")
names = wb.sheetnames
sheet6 = wb['Sheet6']
'''
for row in sheet6['A0:DP820']:
for cell in row:
cell.value = ''
'''
path = "D:\\laboratory\\LDO电流带载"
path_list = os.listdir(path)
path_list.sort()
for filename in path_list:
file = open(os.path.join(path, filename)) # 打开csv文件
reader = csv.reader(file) # 读取csv文件
data = list(reader) # 将csv数据转化为列表
length_h = len(data) # 得到数据行数
length_l = len(data[0]) # 得到每行长度
x = 3
y = path_list.index(filename) * 4 + 1
sheet6.cell(x, y).value = filename
sheet6.merge_cells(start_row=x, start_column=y, end_row=x, end_column=y + 1)
for i in range(45, length_h): # 从第48行开始读取
x += 1
if x < 6:
sheet6.cell(x, y).value = data[i][5]
sheet6.cell(x, y + 1).value = data[i][6]
if x >= 6:
sheet6.cell(x, y).value = float(data[i][5])
sheet6.cell(x, y + 1).value = float(data[i][6])
if isinstance(data[i][5], str) and 'e' in data[i][5].lower():
sheet6.cell(x, y).value = decimal.Decimal(data[i][5])
print(filename + "...over")
max_columns = 0
# 调整所有列的宽度
for column in sheet6.columns:
sheet6.column_dimensions[column[0].column_letter].width = 18
max_columns += 1
print("调整所有列的宽度" + "...over")
for column in range(1, max_columns+1, 4):
# 画图
chart = LineChart() # 折线图
# x 坐标的数据,通常用一列数据作为,这里选择第一列
x_data = Reference(sheet6, min_col=column, min_row=6, max_col=column, max_row=sheet6.max_row)
data = Reference(sheet6, min_col=column + 1, min_row=6, max_col=column + 1, max_row=sheet6.max_row)
if sheet6.cell(6, column).value < 1:
x_data = Reference(sheet6, min_col=column, min_row=7, max_col=column, max_row=sheet6.max_row)
data = Reference(sheet6, min_col=column + 1, min_row=7, max_col=column + 1, max_row=sheet6.max_row)
chart.add_data(data, from_rows=False, titles_from_data=False)
# from_rows:如果是True表示将一行的数据作为一个条线,如果是False表示按列画
# titles_from_data:如果是True,表示每一组(根据from_rows确定是每一行还是每一列)数据的第一个作为title
# --------------------------------------------------------------------------------
chart.set_categories(x_data) # 设置横坐标
chart.y_axis.title = 'Volts' # 设置y轴的名字
chart.x_axis.title = 'Amps' # 设置x轴的名字
chart.title = sheet6.cell(3, column).value
column_letter = get_column_letter(column) # 将列号转换为字母表示的列名
chart_position = f"{column_letter}758" # 设置图表的插入位置,例如A1、B1、C1、...
sheet6.add_chart(chart, chart_position) # 将图标加到sheet中,可以指定图左上角的位置
print("折线图——"+sheet6.cell(3, column).value + "...over")
wb.save("C:\\Users\\CMS01\\Desktop\\SCHH621TEG_LDO(PLDO、NLDO、CPLDO)测试需求_20230814.xlsx")
print("all over")
Python读取csv文件并写入excel文件,加生成折线图
发布时间 2023-09-07 16:14:35作者: 羽小兮