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)

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

Python使用openpyxl在excel中追加一行数据、一列数据_第1张图片

方法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文件中。

Python使用openpyxl在excel中追加一行数据、一列数据_第2张图片

追加写入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)

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

Python使用openpyxl在excel中追加一行数据、一列数据_第3张图片

注意事项

使用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

你可能感兴趣的:(Python学习,python,开发语言,excel)