赞
踩
需求:我要在指定的excel文件中追加写入数据,分成按行追加与按列追加2种方式。文件中原有数据的行数与列数未知,原有数据不可被覆盖。
这里记录一下我用openpyxl实现的方法。
条件:test.xlsx是已存在的文件,'sample1'这个sheet页是数据写入的目标页。
此方法使用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)
打开文件确认,新的数据已按行追加写入,结果符合预期。
这个方法是我在发现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文件中。
条件: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
※参考文章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。