目录
  • 工具
  • 读取Excel文件内容
  • 写入Excel文件内容
  • Excel文件样式调整
    • 设置表头的位置
    • 设置单元格的宽高
  • 总结

    工具

    python3.7

    Pycharm

    Excel

    xlwt&xlrd

    读取Excel文件内容

    当前文件夹下有一个名为“股票数据.xlsx”的Excel文件,可以按照下列代码方式来操作它。

    import xlrd
    
    # 使用xlrd模块的open_workbook函数打开指定Excel文件并获得Book对象(工作簿)
    wb = xlrd.open_workbook('股票数据.xlsx')
    # 通过Book对象的sheet_names方法可以获取所有表单名称
    sheetname = wb.sheet_names()[0]
    # 通过指定的表单名称获取Sheet对象(工作表)
    sheet = wb.sheet_by_name(sheetname)
    # 通过Sheet对象的nrows和ncols属性获取表单的行数和列数
    print(sheet.nrows, sheet.ncols)
    for row in range(sheet.nrows):
        for col in range(sheet.ncols):
            # 通过Sheet对象的cell方法获取指定Cell对象(单元格)
            # 通过Cell对象的value属性获取单元格中的值
            value = sheet.cell(row, col).value
            # 对除首行外的其他行进行数据格式化处理
            if row > 0:
                # 第1列的xldate类型先转成元组再格式化为“年月日”的格式
                if col == 0:
                    # xldate_as_tuple函数的第二个参数只有0和1两个取值
                    # 其中0代表以1900-01-01为基准的日期,1代表以1904-01-01为基准的日期
                    value = xlrd.xldate_as_tuple(value, 0)
                    value = f'{value[0]}年{value[1]:>02d}月{value[2]:>02d}日'
                # 其他列的number类型处理成小数点后保留两位有效数字的浮点数
                else:
                    value = f'{value:.2f}'
            print(value, end='\t')
        print()
    # 获取最后一个单元格的数据类型
    # 0 - 空值,1 - 字符串,2 - 数字,3 - 日期,4 - 布尔,5 - 错误
    last_cell_type = sheet.cell_type(sheet.nrows - 1, sheet.ncols - 1)
    print(last_cell_type)
    # 获取第一行的值(列表)
    print(sheet.row_values(0))
    # 获取指定行指定列范围的数据(列表)
    # 第一个参数代表行索引,第二个和第三个参数代表列的开始(含)和结束(不含)索引
    print(sheet.row_slice(3, 0, 5))
    

    写入Excel文件内容

    Excel文件写入可以通过xlwt 模块的Workbook类创建工作簿对象,通过工作簿对象的add_sheet方法可以添加工作表,通过工作表对象的write方法可以向指定单元格中写入数据,最后通过工作簿对象的save方法将工作簿写入到指定的文件或内存中。下面代码操作了一个学员成绩表的写入。

    import random
    
    import xlwt
    
    student_names = ['关羽', '张飞', '赵云', '马超', '黄忠']
    scores = [[random.randint(40, 100) for _ in range(3)] for _ in range(5)]
    # 创建工作簿对象(Workbook)
    wb = xlwt.Workbook()
    # 创建工作表对象(Worksheet)
    sheet = wb.add_sheet('一年级二班')
    # 添加表头数据
    titles = ('姓名', '语文', '数学', '英语')
    for index, title in enumerate(titles):
        sheet.write(0, index, title)
    # 将学生姓名和考试成绩写入单元格
    for row in range(len(scores)):
        sheet.write(row + 1, 0, student_names[row])
        for col in range(len(scores[row])):
            sheet.write(row + 1, col + 1, scores[row][col])
    # 保存Excel工作簿
    wb.save('考试成绩表.xlsx')
    

    Excel文件样式调整

    还可以通过XFStyle对象来设置单元格的不同样式。主要包括字体(Font)、对齐方式(Alignment)、边框(Border)和背景(Background)的设置。

    header_style = xlwt.XFStyle()
    pattern = xlwt.Pattern()
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    # 0 - 黑色、1 - 白色、2 - 红色、3 - 绿色、4 - 蓝色、5 - 黄色、6 - 粉色、7 - 青色
    pattern.pattern_fore_colour = 5
    header_style.pattern = pattern
    titles = ('姓名', '语文', '数学', '英语')
    for index, title in enumerate(titles):
        sheet.write(0, index, title, header_style)
    

    设置表头的位置

    align = xlwt.Alignment()
    # 垂直方向的对齐方式
    align.vert = xlwt.Alignment.VERT_CENTER
    # 水平方向的对齐方式
    align.horz = xlwt.Alignment.HORZ_CENTER
    header_style.alignment = align
    

    设置单元格的宽高

    # 设置行高为40px
    sheet.row(0).set_style(xlwt.easyxf(f'font:height {20 * 40}'))
    titles = ('姓名', '语文', '数学', '英语')
    for index, title in enumerate(titles):
        # 设置列宽为200px
        sheet.col(index).width = 20 * 200
        # 设置单元格的数据和样式
        sheet.write(0, index, title, header_style)
    

    总结

    其他操作Excel文件的三方库(如openpyxl)大家有兴趣可以自行了解。掌握了Python程序操作Excel的方法,可以解决日常办公中很多繁琐的处理Excel电子表格工作,最常见就是将多个数据格式相同的Excel文件合并到一个文件以及从多个Excel文件或表单中提取指定的数据。当然,如果要对表格数据进行处理,使用Python数据分析神器之一的pandas库可能更为方便,因为pandas库封装的函数以及DataFrame类可以完成大多数数据处理的任务。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。