Python 基於 xlsxwriter 實現百萬資料匯出 excel

张大局發表於2024-03-29

追加匯出 + 自動切換 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()

相關文章