新建表格id使用AUTO_INCREMENT自动增加不是从1开始

AUTO_INCREMENT是从当前数据库第一个数据开始自动增加的,也就是说如果当前数据库不止这一个表,他会计算你其他表长度N,创建新表它就是N+1开始

删除id列后新加一个在列首,wkqy替换成你创建的表名

ALTER TABLE wkqy DROP COLUMN id;
ALTER TABLE wkqy ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

# 加载需要插入数据的Excel workbook = load_workbook('C:\\Test_GIT\\common\\case\\data\\Admin.xlsx') # 插入条数限制,根据个人需要修改这个值 MAX_ROWS_TO_INSERT = 10 # 用于保存各 sheet 的字段数据 sheet_data_store = {} for sheet_name, field_rules in sheet_field_rules.items(): # 获取字段顺序 custom_order = field_rules.get('__order__', list(field_rules.keys())) # 创建或获取 sheet if sheet_name in workbook.sheetnames: sheet = workbook[sheet_name] else: sheet = workbook.create_sheet(sheet_name) # 判断当Excel表头是否是空的,如果是空的就将表头插入Excel中 if sheet.max_row == 0: sheet.append(custom_order) # 用于保存当前 sheet 插入的字段数据 sheet_data = defaultdict(list) # 获取引用规则 ref_rules = field_rules.get('__ref__', {}) # 自增字段声明 auto_increment_field = field_rules.get('__auto_increment__') # 获取当前 sheet 最后一行自增字段的值 start_value = 1 # 初始化一个变量 start_value,表示默认的起始编号为 1,如果表格是空的或没有找到自增字段的值,就从 1 开始 if auto_increment_field and sheet.max_row > 1: # auto_increment_field:是一个字符串,表示你要自增的字段名(如 "ID"、"位置"),sheet.max_row > 1:表示当前工作表已经有数据行(超过表头那一行) col_index = custom_order.index(auto_increment_field) + 1 # 列索引从 1 开始 last_value = sheet.cell(row=sheet.max_row, column=col_index).value # 获取最后一行中自增字段对应的单元格的值 if isinstance(last_value, (int, float)): # 判断是否是数字类型,如果不是就不进行自增 start_value = int(last_value) + 1 # 预加载所有引用字段的值 resolved_field_rules = {} # 初始化一个空字典,用于存储字段名与对应数据的映射关系 for field in custom_order: # 遍历 custom_order 列表,该列表定义了 Excel 表的列顺序 if field in ref_rules: # 判断当前字段是否在 ref_rules 字典中 src_sheet_name, src_field = ref_rules[field].split('.') if src_sheet_name in sheet_data_store: # sheet_data_store 是一个预先加载的数据缓存字典,保存了其他工作表的字段数据 resolved_field_rules[field] = sheet_data_store[src_sheet_name].get(src_field, []) # 从 sheet_data_store 中获取源工作表对应字段的数据,如果找不到,返回空列表 else: resolved_field_rules[field] = [] # 如果源工作表不存在于 sheet_data_store 中,就赋值为空列表 elif field in field_rules: # 如果字段不是引用字段,但存在于 field_rules 中(即本表字段的生成规则),则使用该规则 resolved_field_rules[field] = field_rules[field] else: resolved_field_rules[field] = [] # 插入数据 row_count = 0 # 初始化计数器,用于记录已插入的行数 for i in range(MAX_ROWS_TO_INSERT): # 循环插入 MAX_ROWS_TO_INSERT 行数据,i 是当前行的索引(从 0 开始) if row_count >= MAX_ROWS_TO_INSERT: break # 如果已插入的行数达到最大限制,就提前结束循环 row_data = [] # 初始化一个空列表,用于存储当前行的所有字段值 for field in custom_order: # 遍历 custom_order 中的字段顺序,为每一列生成数据 if auto_increment_field and field == auto_increment_field: # 如果当前字段是自增字段("位置"),就使用 start_value + i 生成递增值 value = start_value + i else: # 如果不是自增字段,就从 resolved_field_rules 中获取字段的值列表 values = resolved_field_rules.get(field, ['']) if isinstance(values, list): # 判断 values 是否为列表类型 value = values[i % len(values)] if len(values) > 0 else '' # 如果是列表类型,循环使用列表中的值,如果列表为空,则使用空字符串 else: value = values # 如果不是列表(例如是一个固定值),就直接使用该值 row_data.append(value) # 将当前字段的值加入当前行数据中 sheet_data[field].append(value) # 同时将该字段的值缓存到 sheet_data 字典中,方便后续使用 sheet.append(row_data) # 使用 openpyxl 的 sheet.append() 方法,将当前行数据写入 Excel 表格 row_count += 1 # 增加插入行数计数器 # 保存当前 sheet 的字段数据,供其他 sheet 引用 sheet_data_store[sheet_name] = sheet_data # 保存修改后的EXCEL到原文件路径 workbook.save('C:\\Test_GIT\\common\\case\\data\\Admin.xlsx')
09-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值