python office 之 读写excel电子表格。

主要的可以操作excel的模块有:xlutils(仅支持xls文件),xlwings(支持vba),openpyxl,pandas,win32com(仅支持windoc,不太好用),xlsxwriter(不能打开,修改已有文件).

简单来说如果处理xls文件就使用xlrd,xlwt,xlutils(不得不说为什么不打包在一起呢),而如果要处理xlsx就使用openpyxl和xlsxwriter,这个很好用。

  1. xlutils,xlrd,xlwt的使用:
    官方文档 -->
    来个例子:
    我的数据是这样的:

目的是这样的:

代码是这样的:

import xlrd
import xlwt
class disposeXls(object):
    def __init__(self, f_name="成绩表.xls"):
        self.data = []
        self.courses = []
        self.dataD = []
        self.f_name = f_name
        self.needRC = [(0, 1446), {"姓名": 0, "学号": 1, "课程": 2, "成绩": 8},["姓名", "学号", "课程", "成绩"]]#定义所需要数据的行和列
        
        self.readXls()
        self.washDAta()
        self.formatting()
        self.saveXls()
        #print(self.dataD)
        #print(self.courses)

    def readXls(self):
        "读取xls文件的所有内容"
        book = xlrd.open_workbook(self.f_name)
        #打开一个xls文件
        sh = book.sheet_by_index(0)
        #获取第一个表单
        for i in range(sh.nrows):
            tempLIst = []
            #sh.nrows返回的是表格的总行数
            for j in range(sh.ncols):
                #sh.ncols返回的是表格的总列数,这样就可以遍历表格的所有数据了。
                tempLIst.append(sh.cell_value(i, j))
                #获取i行j列的值。
            self.data.append(tempLIst)

    def washDAta(self):
        "把数据进行加工,去除无用数据"
        self.data = self.data[self.needRC[0][0]: self.needRC[0][1]]
        for i, dataL in enumerate(self.data):
            tempList = []
            for j in self.needRC[2]:
                if j == "课程" and "(" in dataL[self.needRC[1][j]]:
                    dataL[self.needRC[1][j]] = dataL[self.needRC[1][j]][:3]
                tempList.append(dataL[self.needRC[1][j]])
            self.data[i] = tempList

    def formatting(self):
        "把列表转化为字典"
        lastName = ""
        for i in self.data:
            if lastName != i[0]:
                lastName = i[0]
                self.dataD.append([])
                self.dataD[-1].append(i[:2])
                self.dataD[-1].append({})
            self.dataD[-1][-1][i[2]] = i[3]
            if i[2] not in self.courses:
                self.courses.append(i[2])

    def saveXls(self):
        "把数据写入一个xls文件"
        wb = xlwt.Workbook()
        #创建一个xls文件对象
        sh = wb.add_sheet("mySheet")
        #新增一个表单
        for i, dateL in enumerate(self.dataD):
            for j, c in enumerate(self.courses):
                sh.write(i+1, j+2, dateL[1].get(c))
                # +1 的原因是,突然发现忘记了表头。
                #写入i行j列的数据
            sh.write(i+1, 0, dateL[0][0])
            sh.write(i+1, 1, dateL[0][1])
            #写入姓名和学号
        for i, c in enumerate(self.courses):
            sh.write(0, i+2, c)
            #写入课程名称
        wb.save("test.xls")

if __name__ == '__main__':
    test = disposeXls()

一共没几行,就是把数据读出来,然后统计一下再输出到Excel,不过用这三个模块真心没有openpyxl好用。

  1. openpyxl模块的使用:
    官方文档,维护的很频繁。 -->
    还有xlsxwriter的官方文档 -->

简单入门

from openpyxl import Workbook
wb = Workbook()
#创建一个工作簿
ws1 = wb.active
#至少建立一个工作表
ws = wb.create_sheet("mySheet",0)
ws1.title = "New Title"
#设置表的名字
ws.sheet_properties.tabColor = "1072BA"
#改变表选项卡的颜色
ws["A4"] = 4
ws.cell(row=1, column=1, value=1)
#两种修改表格内容的方法, cell的方法暂时还弄不懂它第一个参数的意义。
print(ws["A2"].value)
#访问A列2行的值,得到cell直接访问它的value属性,就是目标表格的值。

wb.save("sample.xlsx")
#保存

若要读取一个已经存在工作表,使用load_workbook()函数,其他操作都一样。
不得不说openpyxl的使用真是太清爽了。

复杂的使用方法

有使格式,使用公式,读取现有工作薄,合并单元格,插入图片,插入图表什么的功能太多,很费时间,而且不得不说openxpxl的官方文档做的非常好,所以这部分等以后再说吧
官方参考文档 -->

未完待续,如果有使用openxpxl的问题,可以给我留言。知无不言

posted @ 2017-03-23 15:01  即刻  阅读(3190)  评论(0编辑  收藏  举报