都说 python 处理 excel 简单,那怎么个简单法呢?接下来简单的了解下:

  这里用的是包 openpyxl,没有的小伙伴需要下载一下:

pip  install openpyxl

  接着,我们准备好测试的 excel 文件,大概有以下内容: 

python load 当前文件夹 python load_workbook_python load 当前文件夹

 

   准备一下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)

 

python load 当前文件夹 python load_workbook_合并单元格_02

 

   或者高级点,可以直接获取有内容的单元格的信息:

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'])

python load 当前文件夹 python load_workbook_数据_03

 

  写入数据:(保存时建议存储为新文件,避免破坏初始数据没法修复)

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')

python load 当前文件夹 python load_workbook_python_04

 

  设置字体样式等:

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')

python load 当前文件夹 python load_workbook_合并单元格_05

 

  设置公式计算:

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')

python load 当前文件夹 python load_workbook_数据_06

 

  设置行高列宽:

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')

python load 当前文件夹 python load_workbook_python load 当前文件夹_07

 

  设置固定行:

def freeze_panes(wb):
    # 根据名称查询工作表
    sheet = wb.get_sheet_by_name('Sheet1')
    sheet.freeze_panes = 'A2'
    wb.save('freeze_panes.xlsx')
    # 要取消固定,则设置 None 或者 A1

python load 当前文件夹 python load_workbook_python load 当前文件夹_08

 

  合并指定单元格:

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')

python load 当前文件夹 python load_workbook_合并单元格_09

 

  将合并的单元格拆分:

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')

python load 当前文件夹 python load_workbook_合并单元格_10

   入口测试调用:

# 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')

   还有其他的表格、图表什么的暂时用不到,这些先够用了~