一、前言
大家好,今天我来介绍一下我接的第一个Python单子。我完成这个单子前后不到2小时。
首先我接到这个单子的想法是处理Excel表,在两个表之间建立联系,并通过项目需求,修改excel表中的数据。我是运用面向过程写的,将每一步都放在了不同的函数中,下面让我来介绍一下我是怎么通过自己的思路一步一步完成的。
做完单子后,老师很快就给我转账了,并且没有二次修改,感觉很省心:
投稿这篇文章后,老师又给我50元稿费:
先上客户的需求
二、代码实现及讲解
- 模块的导入
主要用到的模块为openpyxl、random
import openpyxl
import random
from openpyxl.utils.cell import get_column_letter,column_index_from_string
除了运用到openpyxl和random还用到了openpyxl中的utils包下cell模块的两个方法,第一个方法get_column_letter的作用是将整型转换为对应excel中列属性的字符串,例如:12转换为L,50转换为AX
第二个方法是将字符串转换为整型,其本质类似于10进制和27进制之间的转换,当然你也可以自己写,下面附上自己写的行(整型)转换为列(字符串)的代码。
def num_to_string(n):
column = n - 1
real_colum = ''
while column >= 26:
value = column // 26
column = column % 26
real_colum += chr(value + 64)
real_colum += chr(column + 65)
return real_colum
2.获取“数据原表”中数据
#创建一个全局变量MATERIAL_MESSAGE
MATERIAL_MESSAGE = []
#获取小宛中数据
def get_construct_message():
#读取数据原表.xlsx表
wb = openpyxl.load_workbook('数据原表.xlsx')
#获取获取当前活动工作表,默认为第一个表
ws = wb.active
#获取在生产记录更新.xlsx中的可以用到的数据存入MATERIAL_MESSAGE中
for row in range(1,ws.max_row + 1):
if ws[f'A{row}'].value == '日期':
for