You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl写入字符串至Excel报错,Pandas操作文件损坏求助

问题解决:Kindle高亮导出的两个Excel处理问题

一、openpyxl写入报错的修复

你遇到的TypeError是因为ws.append()要求传入列表、元组这类可迭代对象,而你最后传入的是单个字符串,代码里还有两个明显问题:

  1. 循环里每次用highlights = note.text覆盖变量,最后highlights只保留最后一条高亮内容
  2. wb.save没加括号,根本没执行保存操作

修正后的代码:

from bs4 import BeautifulSoup
from openpyxl import load_workbook

with open("test.html", "r", encoding="utf-8") as html_file:
    content = html_file.read()
    soup = BeautifulSoup(content, "lxml")

    note_tags = soup.find_all("div", class_="noteText")
    # 把所有高亮存到列表里
    highlights_list = [note.text.strip() for note in note_tags]

    wb = load_workbook('highlights.xlsx')
    ws = wb.active
    # 逐条写入Excel,每条占一行
    for highlight in highlights_list:
        # 把字符串包装成列表,符合append的要求
        ws.append([highlight])
    # 执行保存,必须加括号
    wb.save('highlights.xlsx')

二、Pandas处理时Excel损坏的解决

“at least one sheet must be visible”错误大多是因为保存Excel时,所有工作表被意外设置为隐藏状态,或者文件读写操作冲突导致的。给你几个可行的解决办法:

1. 直接新建DataFrame写入,避免修改原有文件

不要直接加载旧Excel追加,先把高亮数据整理成DataFrame,去重后直接写入(如果需要保留历史数据,可以先读入历史数据合并后去重):

from bs4 import BeautifulSoup
import pandas as pd

with open("test.html", "r", encoding="utf-8") as html_file:
    content = html_file.read()
    soup = BeautifulSoup(content, "lxml")

    note_tags = soup.find_all("div", class_="noteText")
    highlights_list = [note.text.strip() for note in note_tags]

    # 转成DataFrame
    df = pd.DataFrame(highlights_list, columns=["Kindle高亮"])
    # 去重,保留第一条出现的内容
    df = df.drop_duplicates(subset=["Kindle高亮"], keep="first")
    # 写入Excel,指定openpyxl引擎避免格式问题
    df.to_excel('highlights_clean.xlsx', index=False, engine='openpyxl')

2. 如果需要追加历史数据

如果要在已有Excel里追加,确保指定正确的引擎和模式,同时检查原有文件的工作表是否可见:

# 读入历史数据
history_df = pd.read_excel('highlights.xlsx', engine='openpyxl')
# 合并新数据并去重
combined_df = pd.concat([history_df, df]).drop_duplicates(subset=["Kindle高亮"], keep="first")
# 覆盖写入
combined_df.to_excel('highlights.xlsx', index=False, engine='openpyxl')

3. 排查文件本身问题

  • 如果原有highlights.xlsx之前被手动修改过(比如隐藏了工作表),先新建一个空白Excel文件再试
  • 更新Pandas和openpyxl到最新版本,避免版本兼容问题:
pip install --upgrade pandas openpyxl

内容的提问来源于stack exchange,提问作者Ren Tremendous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:40:35