都说 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')
还有其他的表格、图表什么的暂时用不到,这些先够用了~