首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Python 3.4 使用 xlutils3 追加寫入 Excel (.xls) 完整指南

     編輯:程式設計疑難解答

背景:Python 2 到 3 的遷移陷阱

Python 2.7 時代常用 xlrd + xlwt + xlutils.copy 實現對 .xls 讀取、複製、追加寫入。但 Python 3 中 xlutils 原包不再維護,需改用 xlutils3(第三方移植版),且 API 有細微差異,導致舊代碼報錯。

正確代碼範例 (Python 3.4+)

import xlrd
from xlutils3.copy import copy  # 注意導入路徑
import xlwt

# 1. 讀取現有 .xls
read_book = xlrd.open_workbook('test.xls', formatting_info=True)
read_sheet = read_book.sheet_by_index(0)
rows = read_sheet.nrows  # 現有行數,下一行即為追加位置

# 2. 複製一份可寫入的工作簿
write_book = copy(read_book)
write_sheet = write_book.get_sheet(0)

# 3. 追加寫入(第 rows 行,索引從 0 開始)
write_sheet.write(rows, 0, "新數據")  # 列 0
write_sheet.write(rows, 1, "更多內容") # 列 1

# 4. 保存(會覆蓋原文件,建議先備份)
write_book.save('test.xls')
print("追加成功")

關鍵差異點

  • from xlutils3.copy import copy 而非 from xlutils.copy import copy。
  • xlrd.open_workbook 必須加 formatting_info=True 以保留原格式(如列寬、樣式),否則複製後格式丟失。
  • .xls 格式限制:單表 65536 行,單元格 32767 字符。

更好的選擇:openpyxl 支援 .xlsx

若非強制使用 .xls,強烈建議遷移至 .xlsx 並使用 openpyxl:

from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
ws = wb.active
ws.append(["新數據", "更多內容"])
wb.save('test.xlsx')

優點:支援超大表、現代格式、無需複製工作簿、API 更直觀。

常見錯誤排查

  • AttributeError: module 'xlutils3' has no attribute 'copy' → 確認安裝 pip install xlutils3 且導入正確。
  • 寫入後公式失效 → xlutils3 不保留公式,只保留值。需用 openpyxl 或手動重寫公式。
  • 中文亂碼 → 確保源文件編碼正確,Python 3 預設 UTF-8,寫入字串無需額外編碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved