python 处理 excel 基本操作
都说 python 处理 excel 简单,那怎么个简单法呢?接下来简单的了解下:
这里用的是包 openpyxl,没有的小伙伴需要下载一下:
pip install openpyxl
接着,我们准备好测试的 excel 文件,大概有以下内容:
准备一下python 入口文件:(导入使用的包)
# -*- coding: utf-8 -*- import openpyxl def main(): # 导入 excel 文件 wb = openpyxl.load_workbook('test.xlsx') return wb # file onload if __name__ == '__main__': # 获取读取的文件对象 wb = main()
使用 load_workbook('路径/文件名') 可以读取指定的 excel 文件到内存中。
有一堆的属性来获取各种信息:
def showInfo(wb): # 获取工作表 sheets = wb.get_sheet_names() print(sheets) # 当前激活的工作表 sheet = wb.active print(sheet.title) # 最大行数 print sheet.max_row # 最大列数 print sheet.max_column # 获取当前单元格 cell = sheet['A2'] # 值 print(cell.value) # 行下标 print(cell.row) # 列下标 print(cell.column) # 坐标 print(cell.coordinate)
或者高级点,可以直接获取有内容的单元格的信息:
def get_cells(wb): # 当前激活的工作表 sheet = wb.active # 按下标获取单元格 cell1 = sheet.cell(row=2, column=1) print(cell1.value) for i in range(1, 8, 2): print i, sheet.cell(row=i, column=1).value print '\n' # 选定区域获取表格内容 for rowOfCellObjects in sheet['A1': 'C3']: for cellObj in rowOfCellObjects: print cellObj.coordinate, cellObj.value print 'End of row' print '\n' print tuple(sheet['A1': 'C3'])
写入数据:(保存时建议存储为新文件,避免破坏初始数据没法修复)
def write_data(wb): # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') print sheet.title sheet['D1'] = 'Hello world!' print(sheet['D1'].value) # 保存,建议存成新文件,避免搞坏数据没法修复 wb.save('write_data.xlsx')
设置字体样式等:
def set_font_style(wb): # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') # 创建 Font 对象 fontObj1 = Font(name='Times New Roman', bold=True) sheet['D2'].font = fontObj1 sheet['D2'] = 'Bold Times New Roman' fontObj2 = Font(size=24, italic=True) sheet['D3'].font = fontObj2 sheet['D3'] = '24 pt Italic' wb.save('set_font_style.xlsx')
设置公式计算:
def set_formula(wb): # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') sheet['D4'] = 1 sheet['D5'] = 2 sheet['D6'] = 3 sheet['D7'] = '=SUM(D4: D6)' wb.save('set_formula.xlsx')
设置行高列宽:
def set_width_height(wb): # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') sheet['A1'] = 'Tall row' sheet['B2'] = 'Wide column' # 这里注意,行用的是数字下标 sheet.row_dimensions[1].height = 70 sheet.column_dimensions['B'].width = 20 wb.save('set_width_height.xlsx')
设置固定行:
def freeze_panes(wb): # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') sheet.freeze_panes = 'A2' wb.save('freeze_panes.xlsx') # 要取消固定,则设置 None 或者 A1
合并指定单元格:
def merge_cell(wb): # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') # 注意参数之间由 : 连接,没有空格! sheet.merge_cells('A1:D3') # 合并的单元格设置值,只能设置左上坐标单元格 sheet['A1'] = 'Twelve cells merged together.' wb.save('merge_cell.xlsx')
将合并的单元格拆分:
def unmerge_cell(): # 打开之前合并过单元格的文件 wb = openpyxl.load_workbook('merge_cell.xlsx') # 根据名称查询工作表 sheet = wb.get_sheet_by_name('Sheet1') # 完整的合并的始末位置。原值会留在左上位置 sheet.unmerge_cells('A1:D3') wb.save('unmerge_cell.xlsx')
入口测试调用:
# file onload if __name__ == '__main__': # 获取读取的文件对象 wb = main() # 展示相关信息 # showInfo(wb) # 获取选定区域表格 # get_cells(wb) # 存数据 # write_data(wb) # 设置文字样式 # set_font_style(wb) # 设置公式计算 # set_formula(wb) # 设置行高列宽 * 有错误,待研究 set_width_height(wb) # 冻结行 # freeze_panes(wb) # 合并单元格 # merge_cell(wb) # 取消合并单元格 # unmerge_cell() print('Done')
还有其他的表格、图表什么的暂时用不到,这些先够用了~