首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexError:至少必须有一个工作表是可见的

IndexError:至少必须有一个工作表是可见的
EN

Stack Overflow用户
提问于 2017-10-20 01:01:43
回答 5查看 38.1K关注 0票数 12
代码语言:javascript
运行
复制
 def multiple_dfs(sheet, row=2):

    writer = pd.ExcelWriter("testing.xlsx", engine='openpyxl')

    f1 = {
        'user': ['Bob', 'Jane', 'Alice'], 
        'income': [40000, 50000, 42000],
    }

    f2 = {
        'amount': ['Chest', 'Bras', 'Braa'], 
        'income': [40000, 50000, 42000]
    }

    frames = [f1, f2]


    for f in frames:
        try:
            wb = load_workbook("testing.xlsx")
            ws = wb.get_sheet_by_name("aaa")

            writer.wb = wb
            writer.sheets = dict((ws.title, ws) for ws in wb.worksheets)

            row = ws.max_row + 2
        except:
            pass 

        df = pd.DataFrame(f)
        df.to_excel(writer, sheet, startrow=row, index=False)
        writer.save()
    # writer.close()

multiple_dfs('aaa')

我犯了这个错误,但我不能改正。我调整了代码中正在发生的事情的简短表示,但很难看出真正的问题在哪里。这是

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "create_and_update_xlsx_sheets.py", line 144, in <module>
    create_and_update_worksheets()
  File "create_and_update_xlsx_sheets.py", line 140, in create_and_update_worksheets
    writer.save()
  File "/home/jeremie/.virtualenvs/NHL/lib/python3.5/site-packages/pandas/io/excel.py", line 824, in save
    return self.book.save(self.path)
  ...
  File "/home/jeremie/.virtualenvs/NHL/lib/python3.5/site-packages/openpyxl/writer/workbook.py", line 61, in get_active_sheet
    raise IndexError("At least one sheet must be visible")
IndexError: At least one sheet must be visible

我怎么才能解决这个问题?

P.S.要注意错误被显示的时间是一半。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-10-20 01:13:21

看起来,您想要做的就是将每个DataFrame写到同一个工作表中(在最后一个表后面附加),所以我认为您可以这样写:

代码语言:javascript
运行
复制
start_row = 1
for df in frames:  # assuming they're already DataFrames
    df.to_excel(writer, sheet, startrow=start_row, index=False)
    start_row += len(df) + 1  # add a row for the column header?
writer.save()  # we only need to save to disk at the very end!
票数 4
EN

Stack Overflow用户

发布于 2017-10-25 08:39:55

或者,如果您不需要加载工作簿,您只需要使用xlsxwriter而不是openpyxl;它没有这个问题。您还可以使用普通的

代码语言:javascript
运行
复制
from openpyxl import Workbook
#...
wb= Workbook()
ws=wb.active
with pd.ExcelWriter(output_filepath, engine="openpyxl") as writer:
    writer.book=wb
    writer.sheets = dict((ws.title, ws) for ws in wb.worksheets)
    #useful code
    df.to_excel(writer, sheet, ...)
    writer.save()

现在,您可以使用pandas.to_excel和未被翻译成openpyxl的有趣的openpyxl方法(这不是我的方法,而是在这里找到的,但是找不到)

票数 14
EN

Stack Overflow用户

发布于 2022-01-08 23:43:23

在Pandas 1.3.5中,我需要将引擎指定为xlsxwriter。

代码语言:javascript
运行
复制
with pd.ExcelWriter('path-to-.xlsx-file',engine='xlsxwriter') as writer:     
    df.to_excel(writer, 'spreadsheet-name')

https://pandas.pydata.org/docs/dev/reference/api/pandas.ExcelWriter.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46840960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档