栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

从0开始(一):openpyxl.sheet的改造

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从0开始(一):openpyxl.sheet的改造

openpyxl是一个很好的python操控excel的库。但是openpyxl在读取excel数据的时候有一些不好地方:
(一)当使用values方法获取数据时,获取的是set而不是list,对于某些应用场景来说,使用很不方便:

ws.values
for i in ws.values:
    print(i)
(20, ‘NAME’, ‘DATE_TIME’, ‘PAY’)
(0, 30, datetime.datetime(1972, 2, 23, 3, 10, 2), 8803)
(1, ‘黄瑞’, datetime.datetime(1977, 11, 29, 4, 49, 16), 5951)
(2, ‘李阳’, datetime.datetime(1982, 8, 30, 18, 12, 46), 7418)
(3, ‘石淑英’, datetime.datetime(2016, 4, 18, 11, 24, 17), 737)
(4, ‘陈红霞’, datetime.datetime(2011, 12, 12, 3, 12, 47, 1), 3555)
(5, ‘廖健’, datetime.datetime(1989, 9, 25, 20, 9, 45, 1), 2649)
(6, ‘韩雪梅’, datetime.datetime(2002, 1, 2, 8, 0, 51), 7344)
(7, ‘赵丽丽’, datetime.datetime(2018, 7, 1, 19, 35, 24), 8735)
(8, ‘侯建华’, datetime.datetime(1971, 8, 1, 16, 59, 1), 6148)
(9, ‘谭桂花’, datetime.datetime(2000, 4, 7, 5, 2, 38), 8900)

(二)当获取一列或者一行的数据的时候,返回的是一个生成器list,想要获得数据还需进一步操作:

for i in ws.rows:
    for j in i:
        print(j,j.value)
 20
 NAME
 DATE_TIME
 PAY
 0
 30
 1972-02-23 03:10:02
 8803

因此,在开始之前,需要首先对这个类进行一些自己的封装,使得使用时方便一些:

import openpyxl
from openpyxl.worksheet import worksheet


# 给一个生成器列表,返回值列表
def GetData(cell: list):
    data = []
    for i in cell:
        data.append(i.value)
    return data


class DealSheet:
    def __init__(self, sheet: worksheet):
        self.__sheet = sheet

    # 通过行数获取数据
    def get_value_by_row(self, row: int = 1):
        return GetData(self.__sheet[row])

    # 通过列数获取数据
    # 列数需转化为列数字(字符)对应的字符
    def get_value_by_col_s(self, col: str):
        return GetData(self.__sheet[col])

    # 列数需转化为列数字(数字)对应的字符
    def get_value_by_col_i(self, col: int):
        column = chr(col + 64)
        return self.get_value_by_col_s(column)

    def get_all(self):
        data = []
        min_col = 1
        max_col = self.__sheet.max_column

        for col in range(min_col, max_col + 1):
            data.append(self.get_value_by_row(col))

        return data

先这样,希望自己能坚持更新完!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号