一、是否需要close()?
在使用 openpyxl 时,wb.save() 后一般不需要再手动调用 wb.close()。wb.save() 会自动处理文件写入和释放。
如果是使用openpyxl.load_workbook(filename, read_only=True) 打开了一个只读模式的工作簿,此时会建立文件流,需要在使用完之后调用 wb.close() 来释放资源。不然的话内存中可能还会保留一个对文件的占用。
二、在操作ws.cell()时,column可以指定字符串吗,例如‘AK’?
不可以直接使用列字母 'AK' 作为 column 参数,所以这时候需要openpyxl.utils.column_index_from_string() 把 'AK' 转换成数字列号:
from openpyxl.utils import column_index_from_stringcol_num = column_index_from_string('AK') # AK → 37ws.cell(row=new_row, column=col_num, value='ssss')
反过来,如果有列号,想变成列字母:
from openpyxl.utils import get_column_lettercol_letter = get_column_letter(37) # → 'AK'
三、如何排除第 1 列再找最大行
def get_real_max_row(ws):for row in reversed(range(1, ws.max_row + 1)):# 遍历该行中除第1列以外的单元格for cell in ws[row][1:]:if cell.value is not None:return rowreturn 0
四、Excel中的行和列的index是从0开始的吗?
在使用 openpyxl 处理 Excel 的时候,Excel 中的行和列索引是从 1 开始的,例如:
openpyxl.cell(row=1, column=1) 对应的是 Excel 中的单元格 A1
row=1 是第 1 行
column=1 是第 1 列(即 A 列)
column=2 是 B 列,以此类推