Python xlrd将excel表的指定数据copy到另一个excel表格中

部署运行你感兴趣的模型镜像

要复制excel表的内容:

分别在第15、16、17、18、19列

第二张的excel表格:

代码部分:


import xlrd
from datetime import datetime
from xlutils.copy import copy
excel_file = '2018材料出库单列表(含项目)研发0902-飞.XLS'               #导入excel数据
data=xlrd.open_workbook(excel_file)            # ----读取excel----
table = data.sheet_by_name("sheet1")            # 通过名称获取sheet
wb=xlrd.open_workbook('PMT1010S-SA-WT领料单.xls',formatting_info=True)       #打开另一张excel的表格 模板
new_wb =copy(wb)         #将xlrd对象拷贝转化为xlwt对象,要用到xlutils模块
new_sheet = new_wb.get_sheet(0)         #读取Excel的第一张工作表
rowx=5  #第二张excel要填入数据的行号
j=1
#将数放到指定的位置
for i in range(table.nrows):
    if table.row(i)[23].value=='PMT1004S-SG-ZT':   #根据某列的值进行筛选23列号   细分
        print(table.row_values(i, start_colx=0, end_colx=None)) #打印你筛选出来的数据
        print(table.row_values(i, start_colx=15, end_colx=19))   #开始15列 结束19列
        if  table.row(i)[5].value==43129.0:#根据某行的一个值进行第二次筛选
            #将筛选出来的数据写入第二个excel
            new_sheet.write(2, 3, table.cell_value(i, 5))
            new_sheet.write(rowx, 0, j)      # 行  列   内容#序号
            new_sheet.write(rowx, 1, table.cell_value(i,15))     #材料编码
            new_sheet.write(rowx, 2, table.cell_value(i,16))    #材料名称
            new_sheet.write(rowx, 3, table.cell_value(i,17))    #规格型号
            new_sheet.write(rowx, 4, table.cell_value(i,18))    #主计量
            new_sheet.write(rowx, 5, table.cell_value(i,19))    #数量
            j+=1        #序号+1
            rowx+=1     #换到下一行数据
new_wb.save('PMT1010S-SA-WT领料单2.xlsx')   #将表格保存为新的表格,也可以覆盖原来的模板

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 我们参考了用户提供的引用内容,特别是引用[1]和引用[2]中关于Python读取Excel数据的详细方法。 用户需求:使用Python读取Excel数据并填写到对应表格中的方法。这里可能有两种理解: 1. 读取一个Excel文件的数据,然后写入到一个Excel文件(或同一个文件的不同位置)的表格中。 2. 读取一个Excel文件的数据,然后根据某种逻辑填写到同一个文件的其他表格中。 引用[2]中使用了xlrd库,但注意xlrd在2.0.0版本后只支持读取.xls文件(不支持.xlsx)。因此,如果需要处理.xlsx文件,我们可能需要使用其他库,如openpyxl(用于读写)或者xlwings等。 考虑到用户可能是要读取并写入,我们选择使用openpyxl库,因为它支持读写.xlsx文件(且功能强大)。外,pandas库也是处理Excel数据的常用工具,它底层可以调用openpyxl或xlrd进行读写。 根据用户需求,我们分两种情况: 情况1:读取一个Excel文件的数据,然后写入到一个Excel文件中。 情况2:读取一个Excel文件的数据,然后写入到同一个Excel文件的不同工作中。 我们以情况1为例,展示一个完整的步骤。如果需要修改同一个文件,则需要注意保存时不要覆盖原文件(可以先保存为新文件再替换,或者使用临时文件)。 步骤: 1. 安装必要的库(如果未安装): pip install openpyxl 2. 使用openpyxl读取源Excel文件,获取数据。 3. 打开目标Excel文件(如果不存在则创建),将数据写入指定位置。 示例代码: 假设我们有一个名为“source.xlsx”的Excel文件,其中第一个工作(Sheet1)的A1:B10区域有数据,我们要将这些数据读取出来,然后写入到一个名为“target.xlsx”的Excel文件(如果不存在则创建)的“Sheet1”工作中,从A1开始写入。 注意:我们也可以写入到同一个文件,但为了避免覆盖,我们需要先读取整个文件,然后修改,再保存。但openpyxl在修改同一个文件时,建议先保存到临时文件再覆盖,或者直接保存为一个文件。如果是同一个文件,我们可以这样: 读取源文件 -> 修改(添加数据) -> 保存为原文件名(此时会覆盖原文件,但要注意原文件是否被其他程序占用) 这里我们先展示读取一个文件并写入一个文件。 但如果用户的需求是读取一个文件,然后根据读取的数据进行一些处理,再填写到同一个文件的不同位置,那么我们可以: 1. 使用openpyxl打开文件(同时支持读写) 2. 读取数据 3. 处理数据 4. 将处理后的数据写入到同一个文件的其他位置 5. 保存 下面我们分别给出两个示例: 示例1:从一个Excel文件读取数据,写入到一个Excel文件(新文件) 示例2:在同一个Excel文件中读取数据,并将处理后的数据写入到同一个文件的新工作中(避免覆盖原工作) 由于用户的问题中提到了“填写到对应表格中”,我们假设用户需要将读取的数据原样写入到一个位置(可能是一个文件或同一个文件的不同工作)。 我们以示例2(写入同一个文件的不同工作)为例: 步骤: 1. 导入openpyxl库 2. 加载现有的工作簿(假设文件名为data.xlsx) 3. 选择读取数据的工作(例如“Sheet1”) 4. 读取需要的数据(例如A1:B10) 5. 创建一个新的工作(或在已有的工作中操作,这里我们创建新工作) 6. 将读取的数据写入新工作(例如从新工作的A1开始) 7. 保存工作簿 注意:如果写入同一个文件,我们使用openpyxl的load_workbook函数时,使用data_only=True可以读取公式计算后的值,但如果是公式则需要外处理。 代码示例: """ import openpyxl # 加载现有工作簿(如果文件不存在,则创建新工作簿) try: wb = openpyxl.load_workbook('data.xlsx') except FileNotFoundError: # 创建一个新工作簿 wb = openpyxl.Workbook() # 默认有一个工作,我们将其设置为源数据工作(后面我们会创建新工作,所以这里先保留) # 注意:如果文件不存在,我们可能需要先写入一些源数据?但用户的需求是读取,所以我们假设文件存在 # 但为了示例完整,我们假设文件存在的情况,所以这里不处理,直接退出 print("文件不存在,请确保data.xlsx存在。") exit() # 获取源数据工作(假设第一个工作) source_sheet = wb.worksheets[0] # 或者通过名字:wb['Sheet1'] # 读取源数据(假设读取A1:B10区域) data_to_copy = [] for row in range(1, 11): # 行索引从1到10 row_data = [] for col in range(1, 3): # 列索引从1到2(A和B) cell_value = source_sheet.cell(row=row, column=col).value row_data.append(cell_value) data_to_copy.append(row_data) # 创建新的工作(如果已经存在同名工作,则先删除?或者使用其他名称) # 检查是否已存在名为“NewSheet”的工作 if 'NewSheet' in wb.sheetnames: # 删除已有的工作 del wb['NewSheet'] new_sheet = wb.create_sheet(title='NewSheet') # 将数据写入新工作,从A1开始 for r_index, row_data in enumerate(data_to_copy, start=1): for c_index, cell_value in enumerate(row_data, start=1): new_sheet.cell(row=r_index, column=c_index, value=cell_value) # 保存工作簿(会覆盖原文件) wb.save('data.xlsx') """ 上述代码完成了从同一个文件的一个工作读取数据,写入到同一个文件的一个工作。 但是,如果数据量很大,可以使用更高效的方式(比如使用append方法,但这里我们数据是二维列,可以逐行写入)。 外,如果用户需要写入到不同的文件,那么只需要: 1. 读取源文件(source.xlsx) 2. 创建一个新的工作簿(或者加载目标文件) 3. 将数据写入目标工作簿 4. 保存为一个文件(如target.xlsx) 示例代码(不同文件): """ import openpyxl # 打开源工作簿 wb_source = openpyxl.load_workbook('source.xlsx') source_sheet = wb_source.active # 获取活动工作 # 读取数据(这里假设读取全部有数据的区域,但注意:全部区域需要先确定范围) # 我们可以使用max_row和max_column max_row = source_sheet.max_row max_col = source_sheet.max_column data_to_copy = [] for row in range(1, max_row+1): row_data = [] for col in range(1, max_col+1): row_data.append(source_sheet.cell(row, col).value) data_to_copy.append(row_data) # 创建目标工作簿 wb_target = openpyxl.Workbook() target_sheet = wb_target.active target_sheet.title = 'CopiedData' # 写入数据 for r_index, row_data in enumerate(data_to_copy, start=1): for c_index, value in enumerate(row_data, start=1): target_sheet.cell(row=r_index, column=c_index, value=value) # 保存目标工作簿 wb_target.save('target.xlsx') """ 此外,还可以使用pandas库,它更简洁,适合处理结构化数据。 使用pandas读取Excel文件,然后写入一个Excel文件: 步骤: 1. 安装pandas和openpyxl:pip install pandas openpyxl 2. 使用pandas读取源文件 3. 将数据写入目标文件 示例: """ import pandas as pd # 读取源文件 df = pd.read_excel('source.xlsx', sheet_name='Sheet1') # 将数据写入目标文件 df.to_excel('target.xlsx', sheet_name='NewSheet', index=False) """ 以上方法更加简洁。所以,如果用户的需求是简单的读取和写入,使用pandas是最简单的方式。 总结: 根据用户的具体需求,我们可以选择使用openpyxl或pandas。如果只是简单的数据读写,推荐pandas;如果需要对Excel文件进行更复杂的操作(如格式修改),则使用openpyxl。 因此,针对用户的问题,我们推荐两种方法: 方法一:使用pandas(简单) 方法二:使用openpyxl(更灵活) 用户可以根据实际需求选择。 注意:写入同一个文件时,使用pandas会覆盖整个文件(除非使用ExcelWriter进行追加工作,但这样操作相对复杂)。所以,如果是追加数据到同一个文件的不同工作,使用openpyxl更方便。 如果用户需要保留原文件的其他工作,同时新增一个工作,那么使用方法二(openpyxl)更合适。 因此,我们根据用户的需求场景给出建议。 §§相关问题§§ 1. 如何用Python同时读写同一个Excel文件而不覆盖原有数据? 2. pandas在读写Excel文件时,如何避免覆盖原有工作? 3. 使用openpyxl读取Excel文件时,如何获取工作中实际使用的行数和列数? 4. 使用Python处理Excel文件,除了openpyxl和pandas,还有哪些常用库? 5. 如何用Python将多个Excel文件的数据合并到一个Excel文件中? </think> ### Python读取Excel数据并填写到对应表格的实现方法 根据您的需求,以下是使用Python读取Excel数据并填写到对应表格的详细实现方案: #### 方法一:使用openpyxl库(推荐) ```python from openpyxl import load_workbook # 1. 加载工作簿 workbook = load_workbook('数据源.xlsx') # 源文件 target_workbook = load_workbook('目标表格.xlsx') # 目标文件 # 2. 选择工作 source_sheet = workbook['Sheet1'] # 源数据 target_sheet = target_workbook['填写位置'] # 目标 # 3. 读取并填写数据(示例:A1到C10区域) for row in range(1, 11): # 行范围 for col in range(1, 4): # 列范围(A-C) # 读取源数据 cell_value = source_sheet.cell(row=row, column=col).value # 填写到目标位置(偏移至E列开始) target_sheet.cell(row=row, column=col+4, value=cell_value) # E1起始 # 4. 保存目标文件 target_workbook.save('更新后的表格.xlsx') ``` #### 方法二:使用pandas库(适合大数据量) ```python import pandas as pd # 1. 读取源数据 df_source = pd.read_excel('数据源.xlsx', sheet_name='Sheet1') # 2. 加载目标文件 with pd.ExcelWriter('目标表格.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: # 3. 将数据写入指定位置(示例:Sheet2的B2起始) df_source.to_excel( writer, sheet_name='Sheet2', startrow=1, # 从第2行开始(0-indexed) startcol=1, # 从B列开始 index=False # 不写入索引 ) ``` #### 关键参数说明: 1. **数据定位**: - `startrow/startcol`:指定写入起始位置 - 单元格定位:`sheet['A1'] = value` 或 `sheet.cell(row=1, column=1, value=value)` 2. **读取范围控制**: ```python # 读取特定区域 data = pd.read_excel('文件.xlsx', usecols='A:C', nrows=100) ``` 3. **数据类型处理**: ```python # 保留原始格式 df = pd.read_excel(..., dtype={'电话': str, '日期': datetime}) ``` #### 注意事项: 1. 安装必要库: ```bash pip install openpyxl pandas ``` 2. 文件路径使用原始字符串防错:`r'C:\文件夹\文件.xlsx'` 3. 写入现有文件时: - openpyxl直接修改工作簿 - pandas需使用`ExcelWriter`的追加模式 4. 大数据处理建议分块读取: ```python for chunk in pd.read_excel(..., chunksize=1000): process(chunk) ``` > 两种方法各有优势:openpyxl适合精确单元格操作,pandas适合结构化数据处理[^1][^2]。实际选择取决于具体需求场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值