颂风侯 发表于 2024-7-18 22:14:46

求助 根据excel的每行的内容,对应填充到模板的excel表

求助 根据excel的每行的内容,对应填充到模板的excel表
想做一个python程序,根据一个excel里每行的内容,对应填写到模板excel的对应空格,文件名按照源文件excel每行的第一列文本名称。
神庙,拜拜

FishC 发表于 2024-7-18 22:15:22

好的,让我们来解决这个问题。首先,我们需要使用 `pandas` 和 `openpyxl` 库来处理 Excel 文件。如果你还没有安装这些库,可以通过以下命令来安装:

pip install pandas openpyxl

下面是一个简单的 Python 脚本,可以根据源 Excel 文件的每行内容填充到模板 Excel 文件中,并生成新的文件。假设源文件名为 `source.xlsx`,模板文件名为 `template.xlsx`。

import pandas as pd
from openpyxl import load_workbook

# 读取源文件
source_df = pd.read_excel('source.xlsx')

# 遍历每一行
for index, row in source_df.iterrows():
    # 读取模板文件
    template_wb = load_workbook('template.xlsx')
    template_ws = template_wb.active
   
    # 假设模板文件中需要填充的单元格是固定的,比如 A1, B1, C1 等
    # 根据源文件的列填充模板文件
    template_ws['A1'] = row['列1']
    template_ws['B1'] = row['列2']
    template_ws['C1'] = row['列3']
   
    # 生成新的文件名,根据源文件每行的第一列文本名称
    new_filename = f"{row['列1']}.xlsx"
    template_wb.save(new_filename)
    print(f"已生成文件: {new_filename}")

print("所有文件生成完毕")

在这个脚本中,我们做了以下几步:
1. 使用 `pandas` 读取源 Excel 文件。
2. 遍历源文件的每一行。
3. 读取模板文件。
4. 根据源文件的每一行内容填充模板文件的对应单元格。
5. 根据源文件每行的第一列内容生成新的文件名,并保存填充后的模板文件。

注意:上面的例子假设源文件和模板文件的结构是已知的,且模板文件中需要填充的单元格是固定的。如果你的模板文件有更复杂的结构,可能需要调整脚本中填充单元格的逻辑。

希望这个脚本能帮到你,如果还有什么问题或者需要更具体的帮助,尽管问吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

颂风侯 发表于 2024-7-22 10:03:03

import pandas as pd

def process_excel(input_file, output_file):
    # 读取Excel文件
    df = pd.read_excel(input_file)

    # 根据焊缝数量不为0的行提取指定列
    df1 = df != 0][['管线号', '焊缝种类', '工艺卡编号']]
    df2 = df != 0][['管线号', '焊缝种类2', '工艺卡编号2']]

    # 重命名焊缝种类2和工艺卡编号2的列名,以便后续合并
    df2.rename(columns={'焊缝种类2': '焊缝种类', '工艺卡编号2': '工艺卡编号'}, inplace=True)

    # 合并两个数据框
    merged_df = pd.concat()

    # 对相同的焊缝种类和工艺卡编号进行分组求和
    result_df = merged_df.groupby(['管线号', '焊缝种类', '工艺卡编号']).sum().reset_index()

    # 对结果按照管线号进行排序
    result_df.sort_values(by='管线号', inplace=True)

    # 将结果写入新的Excel文件
    result_df.to_excel(output_file, index=False)

if __name__ == "__main__":
    input_file = "原始数据.xlsx"
    output_file = "提取结果.xlsx"
    process_excel(input_file, output_file)


AI写的这个代码看起来比较对了,运行出错呢,帮忙看下什么问题呢

FishC 发表于 2024-7-22 10:05:25

颂风侯 发表于 2024-07-22 10:03
import pandas as pd

def process_excel(input_fil ...

好的,让我们来看看你的代码,找出问题并修复它!

### 潜在的问题和修复

1. **查找非零的行**:
   你用 `df[]` 的方式来提取非零行,这是错误的。你需要使用 `.any(axis=1)` 方法来选择包含非零的行。

2. **合并数据框的方式**:
   `pd.concat()`没有指定要合并的数据框。

3. **分组和求和**:
   需要在 `groupby()` 中指定要分组的列名。

4. **缺少具体的列名**:
   对于 `groupby` 和 `concatenate` 都需要指定具体的列名称。

这里是更新后的代码示例:

import pandas as pd

def process_excel(input_file, output_file):
    # 读取Excel文件
    df = pd.read_excel(input_file)

    # 根据焊缝数量不为0的行提取指定列,假设我们想提取 '焊缝种类2' 和 '工艺卡编号2' 列
    df1 = df != 0]# 假设 '焊缝数量' 是你要检查的列名
    df2 = df != 0][['焊缝种类2', '工艺卡编号2']]# 提取所需列

    # 重命名焊缝种类2和工艺卡编号2的列名,以便后续合并
    df2.rename(columns={'焊缝种类2': '焊缝种类', '工艺卡编号2': '工艺卡编号'}, inplace=True)

    # 合并两个数据框
    merged_df = pd.concat(, ignore_index=True)# 记得传入列表并忽略索引

    # 对相同的焊缝种类和工艺卡编号进行分组求和
    result_df = merged_df.groupby(['焊缝种类', '工艺卡编号']).sum().reset_index()# 指定分组列

    # 对结果按照管线号进行排序,假设 '管线号' 是一个存在的列名
    result_df.sort_values(by='管线号', inplace=True)

    # 将结果写入新的Excel文件
    result_df.to_excel(output_file, index=False)

if __name__ == "__main__":
    input_file = "原始数据.xlsx"
    output_file = "提取结果.xlsx"
    process_excel(input_file, output_file)

### 注意事项
- 请确保列名(如 `'焊缝数量'`, `'焊缝种类2'`, `'工艺卡编号2'`, `'管线号'`)在你的实际数据中是正确的。
- 要保证 `input_file` 文件路径正确,且文件存在。

希望这个改进能让你顺利运行代码!如果还有问题,请随时告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 求助 根据excel的每行的内容,对应填充到模板的excel表