python读写Excel

作者: rill_ | 来源:发表于2018-02-11 17:54 被阅读0次

    外媒报道,微软正考虑添加 Python 为官方的一种 Excel 脚本语言,如果获得批准,Excel 用户将能够像目前使用 VBA 脚本一样,使用 Python 脚本与 Excel 文档、数据以及一些 Excel 核心函数进行交互。

    之前做java还是做nodejs,对于读写excel一直是一个头疼的问题,在java中有开源的POI,无论功能和使用上都很齐全;转而看nodejs这一块,在处理excel问题上一直是一个头疼的问题,之前做一个项目,就是因为nodejs无法实现模板处理方法而必须使用其他的语言或者方法处理。

    最近公司在做一个django的项目,其中后台涉及到一些python读写excel的方法,简单做个记录

    开源模块

    • xlwings

    可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。

    • openpyxl

    简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。

    • pandas

    数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器。

    • win32com

    从命名上就可以看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操作。需要注意的是,该库不单独存在,可通过安装 pypiwin32 或者 pywin32 获取。

    • xlsxwriter

    拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。

    • DataNitro

    作为插件内嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,协同其他 python 库亦是小事一桩。然而,这是付费插件...

    • xlutils

    基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特点中规中矩,比较大的缺点是仅支持 xls 文件。

    openpyxl

    通过openpyxl去读取excel中单元格内容
    例如我们读取一个excel文件中的内容


    image.png
    # -*- coding: utf-8 -*-
    from openpyxl import load_workbook
    from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
    
    def getSheet(filename, sheetname):
        wb = load_workbook(filename=filename)
        sheet_ranges = wb[sheetname]
    
        return wb, sheet_ranges
    
    def readSheetContent(sheet_ranges):
        flag = True
        row = 1
        while(flag):
            if(sheet_ranges[u'A'+str(row)].value is None):
                flag = False
                break
            
            # 获取cell
            rule_key = sheet_ranges[u'A'+str(row)]
            error_level = sheet_ranges[u'B'+str(row)]
            line = sheet_ranges[u'C'+str(row)]
            result = sheet_ranges[u'D'+str(row)]
            reason = sheet_ranges[u'E'+str(row)]
            changeID = sheet_ranges[u'F'+str(row)]
            # 获取cell内容
            # 1. 获取cell value值
            print("Row"+str(row), rule_key.value, error_level.value, line.value, result.value, reason.value, changeID.value)
            # 2. 获取cell相关属性
            # 2.1 数据类型
            rule_key_data_type = rule_key.data_type
            print("rule_key_data_type:",rule_key_data_type)
            # 2.2 编码格式
            rule_key_encoding = rule_key.encoding
            print("rule_key_encoding:", rule_key_encoding)
            # 2.3 填充色相关
            rule_key_fill = rule_key.fill
            rule_key_fill_bgcolor = rule_key.fill.bgColor.value
            rule_key_fill_fgcolor = rule_key.fill.fgColor.value
            print("rule_key_fill_bgcolor:",rule_key_fill_bgcolor)
            print("rule_key_fill_fgcolor:",rule_key_fill_fgcolor)
            # 2.4 字体相关
            rule_key_font = rule_key.font
            print("rule_key_font:", 
                    rule_key_font.name, 
                    rule_key_font.size, 
                    rule_key_font.bold, 
                    rule_key_font.italic, 
                    rule_key_font.vertAlign,
                    rule_key_font.underline,
                    rule_key_font.strike)
    
            # 3 修改单元格
            if(row > 1):
                result.value = True
                reason.value = u"modify cell content"+str(row)
                changeID.value = row
            row += 1
            
    
        return sheet_ranges
    
    
    def saveWorkbook(wb, targetname):
        wb.save(filename = targetname)
    
    filename = u"./test/test.xlsx"
    sheetname = u"Sheet1"
    
    wb, sheet_ranges = getSheet(filename, sheetname)
    
    readSheetContent(sheet_ranges)
    
    saveWorkbook(wb, filename)
    

    执行完了以后的结果:


    image.png

    上面的这个例子,给出了一个通用的excel的读写方法,详细的文档可以参考https://openpyxl.readthedocs.io/en/stable/tutorial.html

    pandas

    Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。1
    pandas的文档可以参考[https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html#]
    还是参考上面的例子,我们读取test.xlsx文件内容

    # -*- coding: utf-8 -*-
    import pandas
    
    def dataconvert(data):
        # print(data)
        if type(data) == unicode:
            return data
        elif type(data) == str:
            return data
        elif type(data) == long:
            return data
        elif type(data) == pandas._libs.tslib.Timestamp:
            return str(data)
        else:
            return ""
    
    excelname = './test/test.xlsx'
    xlsx = pandas.read_excel(excelname, header=0, index_col=0)
    
    for idx, row in xlsx.iterrows():
        rule_key = idx
        error_level = dataconvert(row[u"error_level"])
        line = dataconvert(row[u"line"])
        result = dataconvert(row[u"是否有问题"])
        reason = dataconvert(row[u"理由"])
        changeID = dataconvert(row[u"提交ID"])
    
        print(rule_key, error_level,line, result, reason, changeID)
    

    输出结果:


    image.png

    其他可以参考Pandas Excel examplePandas独有的基本数据结构

    相关文章

      网友评论

        本文标题:python读写Excel

        本文链接:https://www.haomeiwen.com/subject/nuczsxtx.html