有锁期待未来 发表于 2024-3-30 00:12:18

Python 基于 xlsxwriter 实现百万数据导出 excel

追加导出 + 自动切换 sheet
⚠️ excel 中的每个 sheet 最多只能保存 1048576 行数据
# 获取项目的根路径 rootPath
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = curPath[:curPath.find(你的项目名称 + "/") + len(
你的项目名称 + "/")]
# 临时文件
local_file_path = os.path.join(rootPath, "temp.xlsx")
# 检查并删除现有的临时文件
if os.path.exists(local_file_path):
    os.remove(local_file_path)
   
sheet_number = 1
sheet_name_format = "Sheet_{}"

# 数据量大,导出的数据又包含url的话,会疯狂报警告,大家用不到可以删掉
workbook = xlsxwriter.Workbook(local_file_path, options={'strings_to_urls': False})
table = workbook.add_worksheet(sheet_name_format.format(sheet_number))

# sheet 数据总条数
page_total = 0
# 要写的行
row_number = 1
# 分批导出,每次 100000 条数据
default_limit = 100000
# 分批导出,第 1 页开始
page_number = 1

while True:
        # 分批获取数据
        data_list = get_data_list(page_number, default_limit) # 你的数据
        if len(data_list) == 0:
                break
        # sheet总条数,0代表第一次写入数据
        if page_total == 0:
                # 标题
                header = [你的标题]
                table.write_row(0, 0, header)
                # todo 因为我把每个 sheet 控制在了 100万条,就切换下一个 sheet 了。
                # todo 如果各位要是玩极限别忘了这里 page_total + 1
          
        for item in data_list:
                table.write_row(row_number, 0, list(item.values()))
                row_number = row_number + 1
          
        page_total = page_total + len(data_list)
        # 自动切换sheet
        if page_total >= 1000000:
                # 换下一个sheet   
                sheet_number = sheet_number + 1
                table = workbook.add_worksheet(sheet_name_format.format(sheet_number))
                # 初始化
                page_total = 0
                row_number = 1
        page_number = page_number + 1
# 关闭
workbook.close()
来源:https://www.cnblogs.com/yistack/p/18104628
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Python 基于 xlsxwriter 实现百万数据导出 excel