zoukankan      html  css  js  c++  java
  • python操作Excel

    一、读取Excel中的数据:

     1 import xlrd
     2 
     3 # excle文件对象
     4 book = xlrd.open_workbook('income.xlsx')
     5 # print(f'包含表单数量:{book.nsheets}')
     6 # print(f'表单的名称分别为:{book.sheet_names()}')
     7 
     8 # 表单对象
     9 # 表单索引从0开始,获取第一个表单对象
    10 s1 = book.sheet_by_index(0)
    11 # 获取名为2018的表单对象
    12 # book.sheet_by_name('2018')
    13 # 获取所有的表单对象,返回一个列表
    14 # book.sheets()
    15 
    16 # print(f"表单名:{s1.name} ")
    17 # print(f"表单索引:{s1.number}")
    18 # print(f"表单行数:{s1.nrows}")
    19 # print(f"表单列数:{s1.ncols}")
    20 
    21 # row 行数(行数从0开始)  colx 列数(列数从0开始)
    22 # print(f"单元格A1内容是: {s1.cell_value(rowx=0, colx=0)}")
    23 
    24 # row_values获取指定行所有的数据,返回列表
    25 # print(f'第2行的内容是:{s1.row_values(rowx=1)}')
    26 
    27 # col_values获取指定列所有的数据,返回列表
    28 # print(f'第2列的内容是(从第二个数据开始):{s1.col_values(colx=1, start_rowx=1)}')
    29 
    30 # 求第一个表单所有月份的收入总和
    31 incomes = s1.col_values(colx=1, start_rowx=1)
    32 # print(f'2018年收入总和为:{sum(incomes)}')
    33 
    34 # 去掉包含星号的月份总和
    35 to_sub_incomes = 0
    36 # 先找到第一列月份数据,返回月份的列表
    37 monthes = s1.col_values(colx=0)
    38 # enumerate函数会将monthes转换成(索引,元素)组成的迭代器对象
    39 for row,month in enumerate(monthes):
    40     # print(row,month)
    41     if type(month) is str and month.endswith('*'):
    42         income = s1.cell_value(row, 1)
    43         # print(month, income)
    44         to_sub_incomes += income
    45 print(f'2018年的真实收入为:{int(sum(incomes)-to_sub_incomes)}')

      利用for循环求所有年份的总真实收入:

     1 import xlrd
     2 
     3 book = xlrd.open_workbook("income.xlsx")
     4 
     5 # 得到所有sheet对象
     6 sheets = book.sheets()
     7 
     8 income_all_years = 0
     9 for sheet in sheets:
    10     # 收入在第2列
    11     incomes = sheet.col_values(colx=1,start_rowx=1)
    12     # 去掉包含星号的月份收入
    13     to_sub_incomes = 0
    14     # 月份在第1列
    15     monthes = sheet.col_values(colx=0)
    16 
    17     for row,month in enumerate(monthes):
    18         if type(month) is str and month.endswith('*'):
    19             income = sheet.cell_value(row,1)
    20             print(month,income)
    21             to_sub_incomes += income
    22 
    23     actualIncome = int(sum(incomes) - to_sub_incomes)
    24     print(f"{sheet.name}年真实收入为: {actualIncome}")
    25     income_all_years += actualIncome
    26 
    27 print(f'全部收入为{income_all_years}')

    二、新建excel文件,写入数据:

     1 import openpyxl
     2 
     3 # 创建一个Excel workbook对象
     4 book = openpyxl.Workbook()
     5 
     6 # 创建时,会自动产生一个sheet,通过active获取
     7 sh = book.active
     8 
     9 # 修改当前 sheet 标题为工资表
    10 sh.title = '工资表'
    11 
    12 # 保存文件
    13 # book.save('信息.xlsx')
    14 
    15 # 增加一个名为 '年龄表' 的sheet,放在最后
    16 sh1 = book.create_sheet('年龄表—最后')
    17 
    18 # 增加一个sheet,放在最前
    19 sh2 = book.create_sheet('年龄表—最前', 0)
    20 
    21 # 增加一个 sheet,指定为第二个表单
    22 sh3 = book.create_sheet('年龄表2', 1)
    23 
    24 # 根据名称获取某个sheet对象
    25 sh_num = book['工资表']
    26 
    27 # 给第一个单元格写入内容
    28 sh_num['A1'] = '张三'
    29 
    30 # 获取某个单元格内容
    31 print(sh_num["A1"].value)
    32 
    33 # 根据行号列号,给第一个单元格写入内容
    34 # 注意和xlrd不同,是从1开始
    35 # sh_num.cell(2,2, value='12345')
    36 sh_num.cell(2, 2).value = '12345'
    37 
    38 # 根据行号列号, 获取某个单元格内容
    39 print(sh_num.cell(2, 2).value)
    40 
    41 # 最后一定要保存文件
    42 book.save('信息.xlsx')

      遍历字典写入数据:

     1 import openpyxl
     2 
     3 name_ages = {
     4     '张飞':38,
     5     '赵云':27,
     6     '许诸':36,
     7     '典韦':38,
     8     '关羽':39,
     9     '黄忠':49,
    10     '徐晃':43,
    11     '马超':23
    12 }
    13 
    14 # 创建一个Excel workbook对象
    15 book = openpyxl.Workbook()
    16 
    17 # 创建时,会自动长身一个sheeet,通过active获取
    18 sh = book.active
    19 
    20 sh.title = '年龄表'
    21 
    22 # 写标题栏
    23 sh['A1'] = '姓名'
    24 sh['B1'] = '年龄'
    25 
    26 i = 2
    27 for name_age in name_ages:
    28     sh.cell(i, 1).value = name_age
    29     sh.cell(i ,2).value = name_ages[name_age]
    30     i += 1
    31 
    32 # 保存文件
    33 book.save('信息表.xlsx')

    三、修改数据:

     1 import openpyxl
     2 
     3 # 加载excel文件
     4 wb = openpyxl.load_workbook('income.xlsx')
     5 
     6 # 得到sheet对象
     7 sheet = wb['2017']
     8 
     9 sheet['A1'] = '修改一下'
    10 
    11 # 指定不同的文件名,可以另存为别的文件
    12 wb.save('income-1.xlsx')
    13 
    14 # 在第2行的位置插入1行
    15 sheet.insert_rows(2)
    16 
    17 # 在第3行的位置插入3行
    18 sheet.insert_rows(3, 3)
    19 
    20 # 在第2列的位置插入1列
    21 sheet.insert_cols(2)
    22 
    23 # 在第2列的位置插入3列
    24 sheet.insert_cols(2, 3)
    25 
    26 # 指定不同的文件名,可以另存为别的文件
    27 wb.save('income-1.xlsx')
    28 
    29 # 在第2行的位置删除1行
    30 sheet.delete_rows(2)
    31 
    32 # 在第2行的位置删除3行
    33 sheet.delete_rows(2, 3)
    34 
    35 # 在第2列的位置删除1列
    36 sheet.delete_cols(2)
    37 
    38 # 在第2列的位置删除3列
    39 sheet.delete_cols(2,3)

      修改表格文字颜色、字体和大小:

     1 import openpyxl
     2 from openpyxl.styles import Font, colors
     3 
     4 # 加载文件得到sheet对象
     5 wb = openpyxl.load_workbook('income.xlsx')
     6 sheet = wb['2018']
     7 
     8 # 指定单元格字体颜色,
     9 sheet['A1'].font = Font(color=colors.RED,  # 使用预置的颜色常量
    10                         size=15,    # 设定文字大小
    11                         bold=True,  # 设定为粗体
    12                         italic=True  # 设定为斜体
    13                         )
    14 
    15 # 也可以使用RGB数字表示的颜色
    16 sheet['B1'].font = Font(color='981818')
    17 
    18 # 指定整行 字体风格
    19 font_rows = Font(color='BD6C6C')
    20 for y in range(1, 100):  # 从第1列到100列
    21     sheet.cell(3, y).font = font_rows
    22 
    23 # 指定整列 字体风格
    24 font_cols = Font(bold=True)
    25 for y in range(1, 100):  # 从第1行到100行
    26     sheet.cell(y, 2).font = font_cols
    27 
    28 # 保存文件
    29 wb.save('income-2.xlsx')

      修改背景颜色:

     1 import openpyxl
     2 # 导入Font对象 和 colors 颜色常量
     3 from openpyxl.styles import PatternFill
     4 
     5 wb = openpyxl.load_workbook('income.xlsx')
     6 sheet = wb['2018']
     7 
     8 # 指定 某个单元格背景色
     9 sheet['A1'].fill = PatternFill("solid", "E39191")
    10 
    11 # 指定 整行 背景色, 这里指定的是第2行
    12 fill = PatternFill("solid", "E39191")
    13 for y in range(1, 100): # 第 1 到 100 列
    14     sheet.cell(2, y).fill = fill
    15 
    16 # 指定 整列 背景色,略
    17 
    18 wb.save('income-3.xlsx')

      插入图片:

     1 import openpyxl
     2 from openpyxl.drawing.image import Image
     3 
     4 wb = openpyxl.load_workbook('income.xlsx')
     5 sheet = wb['2018']
     6 
     7 # 在第1行,第4列 的位置插入图片
     8 sheet.add_image(Image('1.png'), 'D1')
     9 
    10 # 指定不同的文件名,可以另存为别的文件
    11 wb.save('income-4.xlsx')
    12 
    13 # 如果运行提示:ImportError: You must install Pillow to fetch image objects
    14 # 安装Pillow库即可
  • 相关阅读:
    自定义控件其实很简单5/12
    自定义控件其实很简单1/3
    自定义控件其实很简单1/4
    自定义控件其实很简单1/6
    ListView addfooter 没显示 footer的原因(之一)
    android 版本和 api level 的对应关系
    derby入门
    OA系统与ERP的区别
    Windows下的定时任务
    linux学习笔记——安装问题
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12702412.html
Copyright © 2011-2022 走看看