开发者社区 问答 正文

用python openpyxl编辑xlsx表格读取写入选取既定单元格的数据

本人小白, 通过openpyxl,来把一个Excel中指定两列的数据写入一个已存的Excel表中,(选定的两列数据写入时,最后一列如果没有数据则不写入)(指定两列数据要的全是数字类的,他们上边几行有文字) 求给位大佬解析下,应该怎么写这个程序

展开
收起
1923454170887492 2020-08-02 17:47:35 932 分享 版权
阿里云 AI 助理回答

你好!根据你的需求,使用Python的openpyxl库来读取一个Excel文件中的指定两列数据,并将这些数据追加到另一个已存在的Excel表中,同时确保如果最后一行没有数字则不写入,可以参考以下示例代码。这里假设你想要读取的是源Excel文件(source.xlsx)的A列和B列,并且要写入的目标Excel文件(target.xlsx)已经存在,我们将在其Sheet1中追加数据。

首先,请确保你已经安装了openpyxl库,如果没有安装,可以通过pip安装:

pip install openpyxl

然后,你可以使用以下Python脚本来实现这个功能:

from openpyxl import load_workbook
from openpyxl.utils.cell import get_column_letter

# 读取源Excel文件
source_wb = load_workbook('source.xlsx')
source_ws = source_wb.active

# 写入目标Excel文件
target_wb = load_workbook('target.xlsx')
target_ws = target_wb.active

# 获取源Excel的最后一行有数据的行号
last_row = max([cell.row for cell in source_ws['A'] if cell.value is not None])

# 遍历指定列(例如A列和B列),并检查是否为数字类型的数据
for row in range(1, last_row + 1):
    value_a = source_ws[f'A{row}'].value
    value_b = source_ws[f'B{row}'].value
    
    # 检查是否全为数字
    if isinstance(value_a, (int, float)) and isinstance(value_b, (int, float)):
        # 找到目标工作表的最后一行的下一行
        next_empty_row = target_ws.max_row + 1
        target_ws[f'{get_column_letter(1)}{next_empty_row}'] = value_a
        target_ws[f'{get_column_letter(2)}{next_empty_row}'] = value_b

# 保存修改后的目标Excel文件
target_wb.save('target.xlsx')

print("数据迁移完成!")

这段代码首先加载了源Excel文件和目标Excel文件,然后遍历源文件中指定的两列(A列和B列),检查每一行的值是否都是数字类型。如果是,则将这两列的值追加到目标Excel文件的Sheet1中。注意,这里假设“全是数字类的”指的是整数或浮点数类型,且忽略了非数字类型的上几行文字内容。最后,它保存了修改后的目标Excel文件。

请根据实际情况调整文件路径和列的选择。希望这能帮助到你!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答