使用python xlwt把数据库数据,分sheet放入一个excel

博客提及Excel数据分页情况,每页可容纳200条数据,当有300多条数据时会分成两页。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pymysql
import xlwt
from datetime import datetime
from math import ceil


def getData(sql):
    # 创建数据库连接.
    conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='tpp', port=3306, charset='utf8')
    # 创建游标
    cur = conn.cursor()
    # 执行查询,
    cur.execute(sql)
    # fetchall()来获取所有内容。
    result = cur.fetchall()

    # 查询数据库表格字段
    col_result = cur.description  # 获取查询结果的字段描述,做为表格的头

    db_field = []
    for i in range(len(col_result)):
        db_field.append(col_result[i][0])
    # 关闭游标
    cur.close()
    # 关闭数据库连接
    conn.close()

    # 返给结果给函数调用者。
    return result, db_field


"""
使用xlwt中的Alignment来设置单元格的对齐方式,其中horz代表水平对齐方式,vert代表垂直对齐方式。
VERT_TOP          = 0x00    上端对齐
VERT_CENTER    = 0x01    居中对齐(垂直方向上)
VERT_BOTTOM  = 0x02    低端对齐
HORZ_LEFT        = 0x01    左端对齐
HORZ_CENTER   = 0x02    居中对齐(水平方向上)
HORZ_RIGHT     = 0x03    右端对齐

"""


def writeData2excel(name, sql):
    result, db_field = getData(sql)

    # 实例化一个Workbook()对象(即excel文件)
    wbk = xlwt.Workbook()
    # 设置对齐方式
    style = xlwt.XFStyle()
    al = xlwt.Alignment()
    al.horz = 0x01  # 左端对齐
    style.alignment = al

    # 基于每页xlrd每页最大纪录条数的考虑,分sheet存储。以200条每页为例
    countn = ceil(len(result) / 200)
    # 获取当前日期
    today = datetime.today()
    today_date = datetime.date(today)
    for m in range(1, countn + 1):
        sheet = wbk.add_sheet('Sheet_{0}'.format(m), cell_overwrite_ok=True)

        # 生成第一行,相当于表头
        for i in range(0, len(db_field)):
            # sheet1.write(0, i, db_field[i], set_style('Times New Roman', 220, True))
            # 0:表示从sheet的行数的下标,实际是第一行写入
            # i:表示从第几列开始
            # db_field[i]:表示把db_field重的数据从第0行写入
            sheet.write(0, i, db_field[i], style)

        # result为嵌套元祖
        for i in range(len(result[(m - 1) * 100:m * 100])):
            # 对result的每个子元素作遍历,
            for j in range(len(result[i])):
                # 将每一行的每个元素按行号i,列号j,写入到excel中。
                # 这里切片取得数据
                sheet.write(i + 1, j, (result[(m - 1) * 200:m * 200])[i][j], style)
        # excel名称保存。
        wbk.save(name + str(today_date) + '.xls')


if __name__ == '__main__':

    db_dict = {'Report_': 'select * from movies'}

    # 遍历字典每个元素的key和value。
    for k, v in db_dict.items():
        # 用字典的每个key和value调用writeData2excel函数。
        writeData2excel(k, v)

结果:

 

excel数据如下:

每页200条,300多条分了两页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值