美文网首页清风PythonWEPython
Python-Excel 模块哪家强

Python-Excel 模块哪家强

作者: 清风Python | 来源:发表于2019-07-06 23:27 被阅读46次
    收回昨晚的说说

    每个星期最喜欢的就是周五,不用学习无需考虑公众号该些什么内容。可以和朋友烧烤、啤酒加聊天。
    温馨提示:今日中考结束,请各位朋友莫吃鸡、勿王者。向我们中老年选手一样玩玩Dota1这种中学生不会玩的游戏

    以上这条是昨天和朋友high时,发的说说...结果打脸了,中小学生无处不在啊,**“朋友家中坐,二黑没赢过” **哈哈。

    今天写点什么?

    周五在公司,有一个朋友寒暄过后,说问一个简单的问题,然后居然让我感受到面试一样的感觉,“python读取excel文件时,如何能识别单元格中的删除线...”虽然之前总结过excel的相关模块和知识但这个着实有点偏门,刚好那会忙,说中午帮他看看。午休时间看了下,最后将解决方法整理告知了同事,顺便拉他入伙了我的公众号,哈哈....
    所以,今天就来说说python读写excel吧...

    python操作excel

    最原始的莫过于两位老牌黄金搭档xlrd xlwt了,针对二者的封装有如下模块:

    • xlutils & xlrd & xlwt
      为什么把这三个一起说?
      首先,xlutils封装了xlrd xlwt,所以在使用前,会先下载这两个依赖的模块。
      其次,这两个模块主要用于处理xls文件,而对xlsx的文件处理很挫,甚至xlwt不支持...
      但为何到现在依然在使用这些模块,因为他对xls文档处理的优势....

    • win32com & DataNitro
      这两个模块又是怎么一回事儿?他俩仅支持windows系统环境
      win32com这个模块大家不算陌生了,windows下的操作,哪儿他都能插一腿...至于使用,就点击链接自己看吧...
      至于DataNitro,本来不想说的,但毕竟很多帖子都提到了它,我不写不太好,但大家知道他是一个Excel 的插件,安装也需单独到官网下载即可....

    • pandas
      pandas作为数据分析利器,在处理excel方面也是犀利的一腿....

    import  pandas  as pd
    #方法一:默认读取第一个表单
    df=pd.read_excel('lemon.xlsx')#这个会直接默认读取到这个Excel的第一个表单
    data=df.head()#默认读取前5行的数据
    print("获取到所有的值:\n{0}".format(data))#格式化输出
    
    #方法二:通过指定表单名的方式来读取
    df=pd.read_excel('lemon.xlsx',sheet_name='student')#可以通过sheet_name来指定读取的表单
    data=df.head()#默认读取前5行的数据
    print("获取到所有的值:\n{0}".format(data))#格式化输出
    
    #方法三:通过表单索引来指定要访问的表单,0表示第一个表单
    #也可以采用表单名和索引的双重方式来定位表单
    #也可以同时定位多个表单,方式都罗列如下所示
    df=pd.read_excel('lemon.xlsx',sheet_name=['python','student'])#可以通过表单名同时指定多个
    # df=pd.read_excel('lemon.xlsx',sheet_name=0)#可以通过表单索引来指定读取的表单
    # df=pd.read_excel('lemon.xlsx',sheet_name=['python',1])#可以混合的方式来指定
    # df=pd.read_excel('lemon.xlsx',sheet_name=[1,2])#可以通过索引 同时指定多个
    data=df.values#获取所有的数据,注意这里不能用head()方法哦~
    print("获取到所有的值:\n{0}".format(data))#格式化输出
    
    • xlsxwriter
      xlsxwriter拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。
      代码示例:
    import xlsxwriter
    
    # Create a workbook and add a worksheet.
    workbook = xlsxwriter.Workbook('Expenses01.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Some data we want to write to the worksheet.
    expenses = (
        ['Rent', 1000],
        ['Gas',   100],
        ['Food',  300],
        ['Gym',    50],
    )
    
    # Start from the first cell. Rows and columns are zero indexed.
    row = 0
    col = 0
    
    # Iterate over the data and write it out row by row.
    for item, cost in (expenses):
        worksheet.write(row, col,     item)
        worksheet.write(row, col + 1, cost)
        row += 1
    
    # Write a total using a formula.
    worksheet.write(row, 0, 'Total')
    worksheet.write(row, 1, '=SUM(B1:B4)')
    
    workbook.close()
    
    • xlwings
      xlwings简单强大,使用方便。而且搞下ode是,这是为数不多的模块开发者,在平台卖课的,哈哈....
      image.png
    import xlwings as xw
    
    #连接到excel
    workbook = xw.Book(r'path/myexcel.xlsx')#连接excel文件
    #连接到指定单元格
    data_range = workbook.sheets('Sheet1').range('A1')
    #写入数据
    data_range.value = [1,2,3]
    #保存
    workbook.save()
    
    • openpyxl
      最后要说说个人比较常用,也很方便的一个excel处理模块openpyxl....这个模块突出的优势在于,对excel单元格样式的设置方面特别详细。所以针对openpyxl,详细的介绍一下.
    openpyxl
    • 写一个工作簿
    >>> from openpyxl import Workbook
    >>> from openpyxl.utils import get_column_letter
    >>>
    >>> wb = Workbook()
    >>>
    >>> dest_filename = 'empty_book.xlsx'
    >>>
    >>> ws1 = wb.active
    >>> ws1.title = "range names"
    >>>
    >>> for row in range(1, 40):
    ...     ws1.append(range(600))
    >>>
    >>> ws2 = wb.create_sheet(title="Pi")
    >>>
    >>> ws2['F5'] = 3.14
    >>>
    >>> ws3 = wb.create_sheet(title="Data")
    >>> for row in range(10, 20):
    ...     for col in range(27, 54):
    ...         _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
    >>> print(ws3['AA10'].value)
    AA
    >>> wb.save(filename = dest_filename)
    
    • 读取现有工作簿
    >>> from openpyxl import load_workbook
    >>> wb = load_workbook(filename = 'empty_book.xlsx')
    >>> sheet_ranges = wb['range names']
    >>> print(sheet_ranges['D18'].value)
    3
    
    • 插入图像 (需要依赖pillow..)
    >>> from openpyxl import Workbook
    >>> from openpyxl.drawing.image import Image
    >>>
    >>> wb = Workbook()
    >>> ws = wb.active
    >>> ws['A1'] = 'You should see three logos below'
    >>> # create an image
    >>> img = Image('logo.png')
    >>> # add to worksheet and anchor next to cells
    >>> ws.add_image(img, 'A1')
    >>> wb.save('logo.xlsx')
    
    • 使用样式
      样式用于在屏幕上显示时更改数据的外观。它们还用于确定数字的格式。
      样式可以应用于以下方面:
    • 字体设置字体大小,颜色,下划线等
    • 填充以设置图案或颜色渐变
    • 边框设置单元格上的边框
    • 单元格排列
    • 保护

    以下是默认值

    >>> from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
    >>> font = Font(name='Calibri',
    ...                 size=11,
    ...                 bold=False,
    ...                 italic=False,
    ...                 vertAlign=None,
    ...                 underline='none',
    ...                 strike=False,
    ...                 color='FF000000')
    >>> fill = PatternFill(fill_type=None,
    ...                 start_color='FFFFFFFF',
    ...                 end_color='FF000000')
    >>> border = Border(left=Side(border_style=None,
    ...                           color='FF000000'),
    ...                 right=Side(border_style=None,
    ...                            color='FF000000'),
    ...                 top=Side(border_style=None,
    ...                          color='FF000000'),
    ...                 bottom=Side(border_style=None,
    ...                             color='FF000000'),
    ...                 diagonal=Side(border_style=None,
    ...                               color='FF000000'),
    ...                 diagonal_direction=0,
    ...                 outline=Side(border_style=None,
    ...                              color='FF000000'),
    ...                 vertical=Side(border_style=None,
    ...                               color='FF000000'),
    ...                 horizontal=Side(border_style=None,
    ...                                color='FF000000')
    ...                )
    >>> alignment=Alignment(horizontal='general',
    ...                     vertical='bottom',
    ...                     text_rotation=0,
    ...                     wrap_text=False,
    ...                     shrink_to_fit=False,
    ...                     indent=0)
    >>> number_format = 'General'
    >>> protection = Protection(locked=True,
    ...                         hidden=False)
    >>>
    
    The End

    OK,今天的内容就到这里,如果觉得有帮助,欢迎将文章或我的微信公众号【清风Python】分享给更多喜欢python的人,谢谢。

    相关文章

      网友评论

        本文标题:Python-Excel 模块哪家强

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