一个复杂的条件填充excel
1,使用pandas或openpyxl2,工作内容为:根据数据源表的数据,对符合要求的excel进行自动填充数据的工作
3,数据源表为"提取数据.xlsx" "
4,对C盘的excl文件里, execl文件名如果符合""提取数据.xlsx""的""管线号""列的数据,并且excel内含有sheet名称符合""提取数据.xlsx""的""工艺卡编号""列的数据"
5.提取符合要求的行的对应列“外径壁厚”的数据,填充到sheet内从单元格C6开始的单元格,向下填充,左对齐。 听起来你需要用Python来处理Excel文件,像个数据魔法师一样!这一次,我们要用pandas或openpyxl来完成这个复杂的条件填充任务。别担心,我会让这段代码尽量通俗易懂,还有点幽默哦!
首先,我们需要读取“提取数据.xlsx”中的数据,然后根据你的条件来在C盘的那些Excel文件中进行填充。下面是一个简单的示例代码,使用pandas来实现:
import pandas as pd
import os
# 1. 读取数据源表的数据
source_file = "提取数据.xlsx"
source_df = pd.read_excel(source_file)
# 2. 遍历C盘的所有Excel文件
c_drive = "C:/"
for root, dirs, files in os.walk(c_drive):
for file in files:
if file.endswith('.xlsx') and file in source_df['管线号'].values:
# 3. 对符合条件的Excel文件进行处理
target_file_path = os.path.join(root, file)
print(f"正在处理: {target_file_path}")
# 4. 读取目标Excel文件
target_df = pd.ExcelFile(target_file_path)
for sheet_name in target_df.sheet_names:
if sheet_name in source_df['工艺卡编号'].values:
# 5. 提取外径壁厚数据
outer_thickness_data = source_df.loc == sheet_name, '外径壁厚']
# 6. 在目标sheet中填充数据
with pd.ExcelWriter(target_file_path, mode='a', engine='openpyxl') as writer:
target_sheet = target_df.parse(sheet_name)
start_row = 6# 从C6开始填充
# 将数据放到C列(注意:索引从0开始,所以C列就是2)
for i, value in enumerate(outer_thickness_data):
target_sheet.iloc = value# C列是索引2
# 保存文件
target_sheet.to_excel(writer, sheet_name=sheet_name, index=False)
print("所有文件处理完毕!")
### 解释一下代码:
1. **读取数据源表**:使用`pd.read_excel()`读取“提取数据.xlsx”文件。
2. **遍历文件**:利用`os.walk()`遍历C盘的所有文件,查找扩展名为`.xlsx`的文件,并与“管线号”列进行匹配。
3. **处理目标Excel文件**:如果文件名符合管线号,那么就将这个文件路径保存下来并读取该Excel文件的所有表单名称。
4. **提取数据**:通过匹配“工艺卡编号”,找到对应的“外径壁厚”数据。
5. **填充数据**:从单元格C6开始填充数据,使用`to_excel()`保存文件。
### 注意事项:
- 确保你的环境中已经安装了`pandas`和`openpyxl`库,可以通过 `pip install pandas openpyxl` 来安装。
- 请根据实际情况调整路径和列名。
- 如果有任何问题,欢迎随时问我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 这东西 你不拿样本数据 光靠AI的盲猜根本不可能实现预期目标 试试,ai还是能写的,我试试好了
import pandas as pd
import openpyxl
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import os
import shutil
def copy_template_to_new_file(pipeline_number_copy, template_path_copy, output_folder_copy):
# 构建新的文件名
new_file = f"{pipeline_number_copy}.xlsx"
# 构建新文件的完整路径
new_file_path = os.path.join(output_folder_copy, new_file)
# 复制模板文件到新文件路径
shutil.copy(template_path_copy, new_file_path)
# 加载源文件和新文件
workbook_source = load_workbook(template_path_copy)
workbook_new = load_workbook(new_file_path)
# 复制每个 sheet 的图片
for sheet_name in workbook_source.sheetnames:
source_sheet = workbook_source
new_sheet = workbook_new
# 提取图片并添加到新 sheet 中
for img in source_sheet._images:
new_img = Image(img.ref)
new_img.anchor = img.anchor# 保持原图的位置
new_sheet.add_image(new_img) # 添加到新表中
# 筛选出管线号对应的行
filtered_rows = df_merge == pipeline_number_copy]
processcards = filtered_rows['工艺卡编号'].unique()
# 获取所有sheet名
sheet_names = workbook_new.sheetnames
# 遍历所有sheet名,检查并删除不需要的sheet
for sheet_name in sheet_names:
if 'H' in sheet_name and sheet_name not in processcards:
std = workbook_new# 获取具体的sheet
workbook_new.remove(std) # 删除sheet
# 这里开始尝试添加数据,找到数据集合
#filtered_rows_od = df_merge == pipeline_number_copy,df_merge["工艺卡编号"] == pipeline_number_copy]
#processcards = filtered_rows['工艺卡编号'].unique()
#ws = wb
# 保存修改后的Excel文件
workbook_new.save(new_file_path)
# 遍历所有sheet名,填充数据
sheet_names = workbook_new.sheetnames
for sheet_name in sheet_names:
filtered_rows_od = df_merge == pipeline_number_copy]
list_od = filtered_rows_od['外径壁厚'].unique()
# 填充数据到C8单元格开始的位置,向下填充,左对齐
start_row = 8
start_col = 3
for index, value in enumerate(list_od):
cell = sheet_name.cell(row=start_row + index, column=start_col, value=value)
cell.alignment = openpyxl.styles.Alignment(horizontal='left')
# 保存修改后的Excel文件
workbook_new.save(new_file_path)
print(f"已创建并保存文件:{new_file_path}")
# 读取原始数据文件
df_merge = pd.read_excel("提取数据.xlsx")
# 获取所有不同的管线号
pipeline_ids = df_merge["管线号"].unique() # 请确保替换为实际的列名
# 定义模板文件路径和目标文件夹路径
template_file = "工艺卡模板.xlsx"
target_folder = "C:\\测试文件夹"
# 确保目标文件夹存在
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历所有管线号,复制模板文件并重命名
for pipeline_number in pipeline_ids:
copy_template_to_new_file(pipeline_number, template_file, target_folder)
print("所有管线号对应的文件已成功创建!")
错误如下
D:\PYTHON_NEW\pythonProject\.venv\Scripts\python.exe "D:\PYTHON_NEW\pythonProject\提取python excel\11 测试生成管线对应的工艺卡的填充数据.py"
Traceback (most recent call last):
File "D:\PYTHON_NEW\pythonProject\提取python excel\11 测试生成管线对应的工艺卡的填充数据.py", line 89, in <module>
copy_template_to_new_file(pipeline_number, template_file, target_folder)
File "D:\PYTHON_NEW\pythonProject\提取python excel\11 测试生成管线对应的工艺卡的填充数据.py", line 62, in copy_template_to_new_file
cell = sheet_name.cell(row=start_row + index, column=start_col, value=value)
^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'cell'
Process finished with exit code 1
ai老师帮分析下呢 wp231957 发表于 2024-7-29 12:14
这东西 你不拿样本数据 光靠AI的盲猜根本不可能实现预期目标
主要是没找到怎么上传附件呢,只会点那个复制代码。
大佬指导怎么传附件excel吗 本帖最后由 wp231957 于 2024-7-29 16:15 编辑
颂风侯 发表于 2024-7-29 14:49
主要是没找到怎么上传附件呢,只会点那个复制代码。
大佬指导怎么传附件excel吗
有啊,可以打包rar
然后发主题贴时,就有那个功能
跟帖时,要点高级回复 {:10_269:}打包的按钮找不到。。。{:5_104:} 颂风侯 发表于 2024-7-29 17:06
打包的按钮找不到。。。
打包是你自己的事情,打包好后,上传附件
就那么几个按钮,一个一个的点开看,也能找到 颂风侯 发表于 2024-7-29 17:06
打包的按钮找不到。。。
发主题贴 或者回帖点开高级模式 这么明显的看不见???? 估计是权限问题,我的高级回复和主题帖附件,音乐,视频,flash这些都没的,从后面帖代码开始有。。。
谢谢大佬给我看下截图 我看了下用户权限,我到下一等级鱼油还要17积分,就可以解锁发附件啦 回复一个帖子一个积分,我回头有空刷下帖子看看有的回复下估计三天就有了,谢谢大佬 颂风侯 发表于 2024-7-30 07:40
回复一个帖子一个积分,我回头有空刷下帖子看看有的回复下估计三天就有了,谢谢大佬
嗯,好像是得到新鱼油1 才能没看你的级别 颂风侯 发表于 2024-7-30 07:40
回复一个帖子一个积分,我回头有空刷下帖子看看有的回复下估计三天就有了,谢谢大佬
你可以发我邮箱里 wp231957@163.com 大佬发您了{:5_109:} 您有空看看呢 颂风侯 发表于 2024-7-30 08:43
大佬发您了 您有空看看呢
80多米太大了啊 那我做小点 删掉了一些模版,小很多啦,正常设计院的20M接收邮箱也可以收了 颂风侯 发表于 2024-7-30 09:44
删掉了一些模版,小很多啦,正常设计院的20M接收邮箱也可以收了
你给我四个文件其中的py 可以忽略了
说说那三个文件 你都想实现啥其中有一个表里面还有很多sheet
页:
[1]
2