• 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的问题,可以给我留言。知无不言

  • 相关阅读:
    Idea中Module is not specified解决办法
    Navicat 导入数据时报Incorrect datetime value: '0000-00-00 00:00:00.000000' 错误
    SQL Server错误18456,window身份验证登录失败解决办法
    Linq
    web.config配置数据库连接
    $.ajax()方法详解
    将一张图片上传到指定的文件夹,然后在窗体上的PictrueBox控件中显示出来
    winform中picturebox自适应图片大小
    C#中产生SQL语句的几种方式
    [转]ORACLE触发器详解
  • 原文地址:https://www.cnblogs.com/jikeboy/p/6605213.html
Copyright © 2020-2023  润新知