示例页面

python-excel数据导入导出

xlrd 读取数据
xlwt 写入数据,要求列数不能超过256
xlsxwriter 写入数据,支持列数超过256列,但不支持带格式文件
openpyxl 性能不稳定

# 导入库
import xlrd

# 调用库中的函数,读取工作薄
xlsx = xlrd.open_workbook('excel位置')

# 读取工作薄中的某工作表
table = xlsx.sheet_by_index(0)  # 根据位置
# table = xlsx.sheet_by_name('工作表名') # 根据工作表名称
# 工作表较多时,for循环读取工作表名
for i in xlsx.sheet_names():
    print(i)

# 读取某单元格数据
print(table.cell_value(11,2)) # 实际对应单元格12行3列的值
print(table.cell(11,2).value)
print(table.row(11)[2].value)

import xlwt

# 新建工作薄
new_workbook = xlwt.Workbook()

# 创建工作表
worksheet = new_workbook.add_sheet('test') # 缺省默认为sheet1

# 工作表中写入数据,工作表.wirte(行,列,'值')
worksheet.write(0, 0, 'test1')

# 保存工作薄
new_workbook.save(r'D:\Users\ywango\Desktop\new_test.csv')
#new_workbook.save(r'D:\Users\ywango\Desktop\new_test.xlsx) # 无法打开工作薄

往带格式文档中写

# xlutils,excel模版格式复制到新建工作薄
from xlutils.copy import copy 
import xlrd
import xlwt

# 导入模版
# 保留格式信息,模版一定要存03版本格式,utils对新版支持较差
tem_excel = xlrd.open_workbook(r'D:\Users\ywango\Desktop\模版.xls', formatting_info=True) 
#tem_excel = xlrd.open_workbook(r'D:\Users\ywango\Desktop\模版.xlsx', formatting_info=True) # 会报错

# 对应工作表
tem_sheet = tem_excel.sheet_by_index(0)

# 新建工作薄
new_excel = copy(tem_excel)

new_sheet = new_excel.get_sheet(0)

# 对工作表新建样式
# 初始化样式
style = xlwt.XFStyle()

# 设置字体
font = xlwt.Font()
font.name = 'Microsoft YaHei UI'
font.bold = True
font.height = 11*20 # python中zlwt要对excel字体大小乘20

# 将字体添加到样式中
style.font = font

# 设置边框
borders = xlwt.Borders()
borders.top = xlwt.Borders.THIN  # 细线
borders.bottom = xlwt.Borders.THIN
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN

# 添加到整体样式中
style.borders = borders

# 设置对齐方式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平居中对齐
alignment.vert = xlwt.Alignment.VERT_CENTER # 垂直居中对齐

style.alignment = alignment

# 带上格式写入数据
new_sheet.write(2,1,12,style)
new_sheet.write(3,1,8,style)
new_sheet.write(4,1,10,style)

# 保存工作薄
new_excel.save(r'D:\Users\ywango\Desktop\填写.xls')

xlwt/xlsxwriter/openpyxl 对比

import xlwt
workbook = xlwt.Workbook()
sheet0 = workbook.add_sheet('sheet0')
for i in range(0,300):  # 超出xlwt支持的列,报错
    sheet0.write(0,i,i)
workbook.save(r'D:\Users\ywango\Desktop\test0.xls')
import xlsxwriter as xw
workbook = xw.Workbook(r'D:\Users\ywango\Desktop\test0.xlsx')
sheet0 = workbook.add_worksheet('sheet0')
for i in range(0,300):
    sheet0.write(0,i,i)
workbook.close()
import openpyxl
workbook = openpyxl.load_workbook(r'D:\Users\ywango\Desktop\模版.xlsx')
sheet0 = workbook['Sheet1']
sheet0['B3']='13'
sheet0['B4']='8'
sheet0['B5']='25'
workbook.save(r'D:\Users\ywango\Desktop\测试数据.xlsx')

通过读写汇总学生成绩

import xlrd
import xlwt

xlsx = xlrd.open_workbook(r'D:\Users\ywango\Desktop\test_data.xlsx')
sheet = xlsx.sheet_by_name('学生成绩')
all_data = []                           # 创建空列表
num_set = set()                    # 创建空集合
for row_i in range(1,sheet.nrows):
    num = sheet.cell_value(row_i,0)
    name = sheet.cell_value(row_i,1)
    grade = sheet.cell_value(row_i,3)
    
    student = {
        'num':num,
        'name':name,
        'grade':grade
    }
    all_data.append(student)
    num_set.add(num)
    
# print(all_data)
# print(num_set)

# 计算总分
sum_list = []
for num in num_set:
    name = ' '
    sum = 0
    for student in all_data:
        if num == student['num']:
            sum += student['grade']
            name = student['name']
    sum_stu = {
        'num' : num,
        'name' : name,
        'sum' : sum
    }
    sum_list.append(sum_stu)
# print(sum_list)

# 写入新的excel
new_workbook = xlwt.Workbook()
worksheet = new_workbook.add_sheet('2班')
worksheet.write(0,0,'学号')
worksheet.write(0,1,'姓名')
worksheet.write(0,2,'总分')

for row in range(0,len(sum_list)):
    worksheet.write(row+1,0,sum_list[row]['num'])
    worksheet.write(row+1,1,sum_list[row]['name'])
    worksheet.write(row+1,2,sum_list[row]['sum'])
    
new_workbook.save(r'D:\Users\ywango\Desktop\学生总成绩.xls')
posted @ 2021-02-19 14:55  没有风格的Wang  阅读(357)  评论(0编辑  收藏  举报