python 向excel表中添加新的sheet页或者向旧sheet中写入数据

import xlwt
import xlrd
from xlutils.copy import copy
import os
import numpy as np
import pandas as pd
class Excel_Add_Sheet():

    def save_table(self, table, file_name):
        # 保存表
        table.save(file_name)

    def add_new_sheet(self, file_name, sheet_name, title=None):
        """ 创建新的文件或者创建新的表
        :param file_name: 文件名
        :param sheet_name: 表名,不存在则创建
        :param title: 表不存在时则写入标题
        :return:
        """
        if not os.path.exists(file_name):
            table = xlwt.Workbook(encoding='utf-8')
            wbsheet = table.add_sheet(sheet_name, cell_overwrite_ok=True)
            if title:
                for i in range(0, len(title)):
                    wbsheet.write(0, i, title[i])
            sheet_names = []
            row = 1
        else:
            # 打开需要操作的excel表
            wb = xlrd.open_workbook(file_name)
            sheet_names = wb.sheet_names()
            table = copy(wb)
            if sheet_name not in sheet_names:
                wbsheet = table.add_sheet(sheet_name)
                if title:
                    for i in range(0, len(title)):
                        wbsheet.write(0, i, title[i])
                row = 1
            else:
                wbsheet = table.get_sheet(sheet_name)
                row = len(wbsheet.rows)
        return table, sheet_names, wbsheet, row

    def add_data_test(self):
        # 测试
        file_name = 'test.xlsx'
        sheet_name = 'sheet1'
        title = ['a', 'b', 'c']
        table, sheet_names, wbsheet, row = self.add_new_sheet(file_name, sheet_name, title)
        # 向新sheet中写入数据。
        num = [[i for i in range(1, 4)], [j for j in range(4, 7)]]
        data = np.array(num)
        pd_data = pd.DataFrame(data=data, index=['A', 'B'], columns=['C', 'D', 'E'])
        for i in range(pd_data.shape[0]):
            wbsheet.write(row + i, 0, int(pd_data.iloc[i, 0]))
            for j in range(1, pd_data.shape[1]):
                wbsheet.write(row + i, j, int(pd_data.iloc[i, j]))
        self.save_table(table, file_name)

    def add_data(self, file_name, title=None, datas=None, sheet_name=None):
        """
        :param file_name: 文件名
        :param title: sheet表标题
        :param datas: 列表数据格式[[1,2,3],[4,5,6]]
        :param sheet_name: sheet表名
        """
        table, sheet_names, wbsheet, row = self.add_new_sheet(file_name, sheet_name, title)
        # 向新sheet中写入数据。
        for i in range(len(datas)):
            wbsheet.write(row + i, 0, datas[i][0])
            for j in range(1, len(datas[i])):
                wbsheet.write(row + i, j, datas[i][j])
        self.save_table(table, file_name)


if __name__ == '__main__':
    start = Excel_Add_Sheet()
    # start.add_data_test()
    save_excel_path = './test.xlsx'
    title = ['a', 'b', 'c']
    lists = [[1, 2, 3], [4, 5, 6]]
    start.add_data(save_excel_path, title, lists, '表名')

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年6月25日
下一篇 2023年6月25日

相关推荐