【python】使用xlrd和xlwt实现表格创建、sheet添加、内容存储

最近在编程的过程中,总是涉及将数据存储到EXECEL情况,下面将自己实现的方法进行分析与共享,有瑕疵的地方还请赐教。
一、直接上代码

"""
功能描述:实现execel表中插入数据
涵盖逻辑:
1、对于无文件,自动创建文件,后自动存储数据
2、对于有文件,无sheet页,自动创建sheet页,后自动存储数据
3、对于有文件,有sheet页,自动存储数据
"""

import xlrd,xlwt
from xlutils.copy import copy
import os

def add_new_sheet_or_data(save_file,sheet_name,col_names,data_list):
    """
    功能:实现execel多sheet页插入数据
    :param save_file:要存储的文件
    :param sheet_name:sheet的名字
    :param col_names:sheet表的表头
    :param data_list:要存储的数据,本例为嵌套list[[1,2,3,4],[11,22,33,44]],每个子list的长度建议与sheet表头对应
    :return:
    """
    #如果不存在文件,则创建文件以及sheet页
    if not os.path.exists(save_file):
        table = xlwt.Workbook(encoding= "utf-8")
        wbsheet = table.add_sheet(sheet_name, cell_overwrite_ok=True)
        if col_names:
            for i in range(len(col_names)):
                wbsheet.write(0, i, col_names[i],style=xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center'))
        row =1
    else:
        wb = xlrd.open_workbook(save_file)
        sheet_names = wb.sheet_names()
        table =copy(wb)
        # 如果存在文件,但不存在sheet页,则创建sheet页
        if sheet_name not in sheet_names:
            wbsheet = table.add_sheet(sheet_name)
            if col_names:
                for i in range(len(col_names)):
                    wbsheet.write(0, i, col_names[i],style=xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center'))
            row = 1
        #如果存在文件+sheet页,则直接获取行号
        else:
            wbsheet = table.get_sheet(sheet_name)
            row =len(wbsheet.rows)

    for i in range(len(data_list)):
        for j in range(len(data_list[i])):
                wbsheet.write(row, j, data_list[i][j],style=xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center'))
        row += 1
    table.save(save_file)

save_file = os.path.dirname(os.path.abspath(__file__))+"/test自动创建表格.xls"

"""
case1:无表
sheet_name = "试用第一次"
col_names = ("字段0","字段1","字段2","字段3")
data_list =[[1,2,3,4],[11,22,33,44]]
"""
"""
case2:有表,无sheet页
sheet_name = "试用第二次"
col_names = ("字段0","字段1","字段2","字段3")
data_list =[[1,2,3,4],[11,22,33,44]]
"""
"""
case3:有表,有sheet页
"""
sheet_name = "试用第二次"
col_names = ("字段0","字段1","字段2","字段3")
data_list =[[6,7,8,9],[66,77,88,99]]

add_new_sheet_or_data(save_file, sheet_name, col_names, data_list)

二、测试代码
(1)当无文档路径的情况下,会自动创建一个文档,并将数据存储到表格中
在这里插入图片描述
(2)当有文档,无对应的sheet页时,将自动添加sheet页,并存储
原sheet页无变化,
在这里插入图片描述
(3)有文档有sheet页时,自动存储数据

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 `xlwt` 库可以通过以下步骤来删除一个 sheet 表中的所有数据: 1. 打开 Excel 文件并获取 sheet 页对象 2. 使用 `sheet_obj.get_rows()` 方法获取 sheet 中的所有行 3. 遍历所有行,使用 `sheet_obj.row(row_num).height` 方法获取每一行的高度,并将其设置为 0,这样这一行中的所有单元格都会被清空 4. 使用 `sheet_obj.remove_sheet(sheet_obj)` 方法移除当前 sheet使用 `xlrd` 库可以通过以下步骤来删除一个 sheet 表中的所有数据: 1. 打开 Excel 文件并获取 sheet 页对象 2. 使用 `sheet_obj.nrows` 方法获取 sheet 中的总行数 3. 遍历所有行,使用 `sheet_obj.row_values(row_num)` 方法获取每一行的数据,然后将其清空 4. 使用 `sheet_obj.remove_sheet(sheet_obj)` 方法移除当前 sheet 表 示例代码: 使用 `xlwt` 库: ```python import xlwt from xlrd import open_workbook # 打开 Excel 文件 book = open_workbook('example.xls', formatting_info=True) # 获取 sheet 页对象 sheet_obj = book.sheet_by_name('Sheet1') # 遍历所有行 for i in range(sheet_obj.nrows): # 将每一行的高度设置为 0,清空该行中的所有单元格 sheet_obj.row(i).height = 0 # 移除当前 sheet 表 book.remove_sheet(sheet_obj) # 保存修改后的 Excel 文件 book.save('example.xls') ``` 使用 `xlrd` 库: ```python import xlrd from xlwt import Workbook # 打开 Excel 文件 book = xlrd.open_workbook('example.xls', formatting_info=True) # 获取 sheet 页对象 sheet_obj = book.sheet_by_name('Sheet1') # 遍历所有行 for i in range(sheet_obj.nrows): # 获取每一行的数据并清空 sheet_obj.row_values(i, start_colx=0, end_colx=None) # 移除当前 sheet 表 book.remove_sheet(sheet_obj) # 保存修改后的 Excel 文件 book.save('example.xls') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值