Python使用openpyxl在excel中追加一行数据、一列数据

需求:我要在指定的excel文件中追加写入数据,分成按行追加与按列追加2种方式。文件中原有数据的行数与列数未知,原有数据不可被覆盖。

这里记录一下我用openpyxl实现的方法。

追加写入1行数据

条件:test.xlsx是已存在的文件,'sample1'这个sheet页是数据写入的目标页。

方法1.使用append

此方法使用worksheet.max_row获取指定sheet中的最大行数,接着使用append将一个list类型的值添加到最大行数的下一行。

import openpyxl

if __name__ == '__main__':
    # 指定文件路径
    file_full_path = r'D:\Test\test.xlsx'
    # sheet名称
    sheet_name = 'sample1'

    # 获取指定的文件
    wb = openpyxl.load_workbook(file_full_path)
    # 获取指定的sheet
    ws = wb[sheet_name]
    # 获得最大行数
    max_row_num = ws.max_row
    # 获得最大列数
    max_col_num = ws.max_column

    # 将当前行设置为最大行数
    ws._current_row = max_row_num

    # 使用append方法,将行数据按行追加写入
    values = ['Jack', '12', '2023/11/12', 'Failed']
    ws.append(values)

    # 保存文件
    wb.save(file_full_path)

打开文件确认,新的数据已按行追加写入,结果符合预期。

方法2.使用for循环

这个方法是我在发现append之前调试成功的,作为参考也放上来,最终效果一样。

import openpyxl

if __name__ == '__main__':
    # 指定文件路径
    file_full_path = r'D:\Test\test.xlsx'
    # sheet名称
    sheet_name = 'sample1'

    # 获取指定的文件
    wb = openpyxl.load_workbook(file_full_path)
    # 获取指定的sheet
    ws = wb[sheet_name]
    # 获得最大行数
    max_row_num = ws.max_row
    # 获得最大列数
    max_col_num = ws.max_column

    values = ['Lisa', '35', '2023/11/27', 'Passed']

    # 追加一行数据
    for i in range(1, max_col_num + 1, 1):
        ws.cell(max_row_num + 1, i).value = values[i - 1]

    # 保存文件
    wb.save(file_full_path)

for i in range(1, max_col_num + 1, 1)指的是以1为起点,max_col_num+1终点,1为步长递增。按照C语言的方式理解,就是for(uint8 i = 1; i < max_col_num+1, i++)。

values是一个list类型的变量,从索引0开始依次取值,将值添加到(3行,1列)、(3行,2列)、(3行,3列)、(3行,4列)单元格中。

最后打开文件确认,确认行数据被成功写入excel文件中。

追加写入1列数据

条件:test.xlsx是已存在的文件,'sample2'这个sheet页是数据写入的目标页。

以下是运行成功的代码,往指定sheet页中追加1列数据。

import openpyxl

if __name__ == '__main__':
    # 指定文件路径
    file_full_path = r'D:\Test\test.xlsx'
    # sheet名称
    sheet_name = 'sample2'

    # 获取指定的文件
    wb = openpyxl.load_workbook(file_full_path)
    # 获取指定的sheet
    ws = wb[sheet_name]
    # 获得最大行数
    max_row_num = ws.max_row
    # 获得最大列数
    max_col_num = ws.max_column

    values = ['Jack', '17', '2023/10/2', 'Failed']

    for each in values:
        # 通过row关键字指定行,colunm关键字指定列,均从1开始
        ws.cell(row=values.index(each) + 1, column=max_col_num+1, value=each)

    # 保存文件
    wb.save(file_full_path)

打开工作簿确认,列数据被追加写入,结果符合预期。

注意事项

使用openpyxl处理单元格数据时,起始坐标从(1,1)开始,不是(0,0)。

假如把cell(3,1)写成cell(3,0) ,会报错ValueError: Row or column values must be at least 1

※参考文章

https://blog.csdn.net/Gsdxiaohei/article/details/82048180

https://fishc.com.cn/thread-144721-1-1.html

  • 19
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Pythonopenpyxl库来实现向已有数据Excel的空行追加数据,不覆盖原数据的功能。下面是一份示例代码,供参考: ```python import openpyxl # 打开已有的Excel表格 workbook = openpyxl.load_workbook('example.xlsx') # 选择要操作的工作表 worksheet = workbook['Sheet1'] # 获取该工作表最后一行的行数 last_row = worksheet.max_row # 将要写入数据存储在一个列表 new_data = ['new data 1', 'new data 2', 'new data 3'] # 追加数据到新的空行 for i in range(len(new_data)): worksheet.cell(row=last_row+i+1, column=1).value = new_data[i] # 保存修改后的Excel表格 workbook.save('example.xlsx') ``` 在上面的示例代码,我们首先使用openpyxl库打开了一个名为`example.xlsx`的Excel表格,并选择了其名为`Sheet1`的工作表。然后,我们使用`max_row`属性获取该工作表最后一行的行数,并将要写入的新数据存储在一个列表`new_data`。 接下来,我们使用一个for循环来遍历新数据列表,将每个元素写入一个新的空行。具体地,我们使用`cell()`方法来获取对应单元格的对象,并使用`value`属性设置其值。其,`row`参数表示要写入的行号,`column`参数表示要写入的列号,这里我们只写入了第1列。 最后,我们使用`save()`方法将修改后的Excel表格保存到文件。这样,就实现了向已有数据Excel的空行追加数据,不覆盖原数据的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值