python怎么修改excel内的数据,python excel数据处理教程
本文主要介绍如何使用Python来校正excel表格数据,以及如何使用面向过程的编写将每一步放在不同的函数中。详细流程介绍可以参考以下小伙伴。
00-1010 1.导言2。代码实现和解释1。模块导入2。数据来自“原始数据表”3。生产记录更新表4中的日期和材料。生产数据更新表5中的数据修改。最后调用函数,保存数据3。效果展示4。结束。
目录
大家好,今天我要介绍我的Python列表。我花了不到两个小时就完成了这份清单。首先,我收到这个列表的思路是对excel表进行处理,建立两个表之间的联系,通过项目需求修改Excel表中的数据。我用面向过程的方法编写了它,并将每一步放在不同的函数中。我来介绍一下我是如何通过自己的思路一步步完成的。
先上客户的需求:
一、前言
二、代码实现及讲解
主要用到的模块为openpyxl、random
导入openpyxl
随机导入
从openpyxl.utils.cell导入get_column_letter,column_index_from_string
除了openpyxl和random,还使用了openpyxl中utils包下的cell模块的两种方法。第一种方法get_column_letter,用于将整数转换成excel中列属性对应的字符串,例如12转换成L,50转换成AX。
第二种方法是将字符串转换成整数,本质上类似于十进制和27之间的转换。当然,你也可以自己写。下面附上您编写的将行(整数)转换为列(字符串)的代码。
定义数字到字符串(n):
列=n - 1
real _ colum=
而列=26:
值=列//26
列=列% 26
real_colum=chr(值64)
real_colum=chr(第65列)
返回实数_列
1.模块的导入
#创建一个全局变量MATERIAL_MESSAGE
MATERIAL_MESSAGE=[]
#从小湾获取数据
def get _ construct _ message():
#读取原始数据表。xlsx表格
Wb=openpyxl.load_workbook(原始数据表. xlsx )
# Get获取当前活动的工作表,默认为第一张表。
ws=wb.active
#获取可在生产记录update.xlsx中使用的数据,并将其存储在MATERIAL_MESSAGE中
对于范围(1,ws.max_row 1):中的行
Ws [f a {row}]。value== date 3360
对于范围内的I(顺序( B ),顺序( I)):
材料=[]
#将日期转换成与生产记录更新中的文字相对应的形式。
Date=ws [f b {row}]。value.translate(字符串。maketrans (year ,-))
Date=date.replace(编号,)
材料.附加(日期)
i=chr(i)
material . append(ws[f“{ I } { row 1 }”)。价值分析
lue)
material.append(ws[f{i}{row + 3}].value)
MATERIAL_MESSAGE.append(material)
print(MATERIAL_MESSAGE)
3.获取生产记录更新表中的日期和材料
# 将客户要求的对应数据存入字典中TABLES = {"水泥":"水泥1","粉煤灰":"煤灰","河沙":"沙1","粗骨料1":"石1","粗骨料2":"石2","减水剂":"外加剂","水":"水"}
#存入生产记录更新表的日期和其所在的行数
DATE = []
#存入生产记录更新表的材料和其所在的列数
MATERIAL = []
wb = openpyxl.load_workbook(生产记录更新.xlsx)
ws = wb.active
#获取日期
def get_date():
for row in range(3,ws.max_row + 1):
#将日期进行分割合并转换成与MATERIAL_MESSAGE中对应日期的格式
date = str(ws[fB{row}].value).split()[0]
date_list = date.split(-)
if 0 in date_list[1]:
date_list[1] = date_list[1].replace(0,)
if 0 in date_list[2]:
date_list[2] = date_list[2].replace(0,)
date = -.join(date_list)
DATE.append([date,row])
pprint.pprint(DATE)
#获取材料
def get_material():
n = 0
for column in ws[1]:
n += 1
#判断该单元格的内容是否在TABLES中
if column.value in TABLES.values():
#运用行列转换的方法进行转换
MATERIAL.append([column.value,get_column_letter(n - 1)])
pprint.pprint(MATERIAL)
DATE表部分数据:
MATERIAL表数据:
4.对生产数据更新表中数据的修改
#两个参数分别为材料的类型和所在的列数def update_default(matrial,letter):
for row in range(3,ws.max_row + 1):
#判断单元格是否为空
if ws[f{letter}{row}].value != None:
for i in range(len(MATERIAL_MESSAGE)):
#需求条件,要将连个表中的日期和材料类型进行一一对应
if DATE[row-3][0] == MATERIAL_MESSAGE[i][0] and matrial == TABLES[MATERIAL_MESSAGE[i][1]]:
#修改形参letter对应列的每个符号要求的单元格对应的设定值
ws[f{letter}{DATE[row - 3][1]}].value = MATERIAL_MESSAGE[i][2]
#分别获取该列列号的下两列对应的列号
letter_random = get_column_letter(column_index_from_string(letter) + 2)
letter_real = get_column_letter(column_index_from_string(letter) + 1)
#判断该列是否在这三列中,若在其中则得到-2到2之间的随机数,否则-1到1之间的随机数,并更新误差值
if letter in (AV,BB,BE):
ws[f{letter_random}{DATE[row - 3][1]}].value = round(random.uniform(-2, 2), 1)
else:
ws[f{letter_random}{DATE[row - 3][1]}].value = round(random.uniform(-1, 1), 1)
#运用设定值和误差值更新中间的实际值
ws[f{letter_real}{DATE[row - 3][1]}].value = round(ws[f{letter}{DATE[row - 3][1]}].value * (1 + ws[f{letter_random}{DATE[row - 3][1]}].value * 0.01),2)
5.最后,调用函数并保存数据
def main():get_construct_message()
get_date()
get_material()
for i in MATERIAL:
update_default(i[0],i[1])
wb.save(生产记录更新.xlsx)
if __name__ == "__main__":
main()
三、效果展示
修改前部分数据:
修改后部分数据:
四、结尾
总的来说,难度不在于怎么修改数据,而是在于怎么把两个表相互关联,通过这次接单让我对excel表能够更加熟练地进行操作,接单既能提升自己的能力,又能赚点外快,何乐而不为呢?
到此这篇关于利用Python改正excel表格数据的文章就介绍到这了,更多相关Python修正excel数据内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。