python多种方式读取excel并输出为json

319 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

之前在处理excel数据的时候都是通过xlwt/xlrd库,对于excel表格进行的操作,xlrd是读excel,xlwt是写excel的库。处理小数据量时,没有什么问题,一但处理的数据量变大时,这两个库就有点力不从心了。

xlwt 与xlrd 存在的问题

最开始使用xlwt,xlrd进行读取和写入,发现报错

ValueError: column index (256) not an int in range(256)

我需要处理的excel有300多条, xlwt不能操作256列以上的数据,我们使用openpyxl

import json

from openpyxl import load_workbook

file = "1.xlsx" 
un_use_str = '123.'


class ExcelUtils:
    def __init__(self):
        self.file = file
        self.wb = load_workbook(self.file)
        sheets = self.wb.get_sheet_names()
        self.sheet = sheets[0]
        self.ws = self.wb[self.sheet]

    # 行数
    def get_rows(self):
        rows = self.ws.max_row
        return rows

    # 列数
    def get_clos(self):
        clo = self.ws.max_column
        return clo

    # 获取值
    def get_cell_value(self, row, column):
        cell_value = self.ws.cell(row=row, column=column).value
        return cell_value

    # 修改值并保存
    def set_cell_value(self, row, column, cell_value):
        try:
            self.ws.cell(row=row, column=column).value = cell_value
            self.wb.save(self.file)
        except Exception as e:
            print("error :{}".format(e))
            self.wb.save(self.file)

    # 替换单元格中的内容
    def replace_cell_value(self):
        # 遍历第一行的值,
        for i in range(1, self.get_clos() + 1):
            cell_value = self.get_cell_value(1, i)
            # 是否存在需要替换的值
            if un_use_str in cell_value:
                cell_replace = cell_value.replace(un_use_str, "")
                self.set_cell_value(1, i, cell_replace)


def to_json():
    excel_utils = ExcelUtils()
    excel_dict = {}

    clo = excel_utils.get_clos()
    # 遍历excel中的值存入字典中
    for i in range(1, clo + 1):
        dict_key = excel_utils.get_cell_value(1, i)
        dict_value = excel_utils.get_cell_value(2, i)
        excel_dict[dict_key] = dict_value
    # 字典转json
    excel_json = json.dumps(excel_dict)
    return excel_json

def to_json2():
    excel_utils = ExcelUtils()
    excel_list= []

    clo = excel_utils.get_clos()
    # 遍历excel中的值存入字典中
    for j in range(2,excel_utils.get_rows()+1):
        excel_dict = {}
        for i in range(1, clo + 1):
            dict_key = excel_utils.get_cell_value(1, i)
            dict_value = excel_utils.get_cell_value(j, i)
            excel_dict[dict_key] = dict_value
        excel_list.append(excel_dict)

    # 字典转json
    excel_json = json.dumps(excel_list)
    return excel_json

if __name__ == "__main__":
       # 只有两行数据的情况
    compare_json = to_json()
    print(compare_json)

    # 多行数据的情况
    compare_json = to_json2()
    print(compare_json)

可以不用再类中写方法,这里主要是本人用来熟悉python语法 代码中file 是指 excel的路径 un_use_str 是指需要在excel中匹配替换的字符串,如果没有用到可以填"", excel中的格式为下所示 解析两行的数据使用:to_json()

nameagephone
zzl111111

解析多行的数据使用to_json2()

nameagephone
zzl111111
zll121112
llz131113