属性错误: 'Worksheet' 对象没有 'set_column' 属性。

16

我得到了一个看起来有问题的错误。因为当然 worksheet 对象有 set_column() 作为函数,它在文档中有说明。我可能做了一些愚蠢的事情,比如掉了一个括号。

这里是错误信息:

Traceback (most recent call last):
  File "scrubaddresses.py", line 137, in <module>
    run()
  File "scrubaddresses.py", line 118, in run
    format_col_width(worksheet)
  File "scrubaddresses.py", line 24, in auto_format_cell_width
    ws.set_column('B:C', 20)
AttributeError: 'Worksheet' object has no attribute 'set_column'

这是我荒谬的导入。 Config 是一些常量,控制器有一些帮助函数。

from smartystreets_python_sdk import StaticCredentials, exceptions, Batch, ClientBuilder
from smartystreets_python_sdk.us_street import Lookup as StreetLookup
from pathlib import Path
import pandas as pd
import numpy as np
import config
from controller import getExcel, clean

所涉及的函数:

def format_col_width(ws):
    ws.set_column('B:C', 20)
    ws.set_column('D', 1)
    ws.set_column('E', 20)

传递ws的源头:

            df1 = df.replace(np.nan, '', regex=True)
            print(df1)

            df1.to_excel(writer, sheet, index = False, engine='xlsxwriter')
            worksheet = writer.sheets[sheet]
            format_col_width(worksheet)

我是不是忘记导入什么东西了?Xlsxwriter已经安装。

4个回答

14

出现该错误的原因是:'Worksheet' object has no attribute 'write'

这是因为您的电脑上尚未安装xlsxwriter。

您可以使用以下命令进行安装:

pip install xlsxwriter

它将会运行,ISA。


1
最糟糕的错误信息。你帮我节省了几个小时的时间。 - undefined

5

单列范围存在错误。由于该方法需要起始列和结束列,即使它们是相同的,范围应该为D:D而不是D

经过这样的修改,代码应该可以工作:

import pandas as pd

def format_col_width(ws):
    ws.set_column('B:C', 20)
    ws.set_column('D:D', 1)
    ws.set_column('E:E', 20)

df = pd.DataFrame({'Data1': [10, 20, 30, 20, 15, 30, 45]})

writer = pd.ExcelWriter('pandas_test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')

workbook  = writer.book
worksheet = writer.sheets['Sheet1']

format_col_width(worksheet)

writer.save()

输出结果: 在这里输入图片描述

请尝试上述代码并查看是否有效。如果无法正常工作,则可能未安装XlsxWriter,而Pandas正在默认使用OpenPyXL。


我已经修改了它,但不幸的是那不是问题所在——错误出现在第一行, File "scrubaddresses.py", line 24, in auto_format_cell_width ws.set_column('B:C', 20) 我确实运行了pip install xlsxwriter,但什么也没改变。也许我应该重新启动并再试一次,哈哈。奇怪的是,我将您的代码命名为test.py并运行,没有出现任何错误。 - Laura
我已经搞定了 - 它是在使用xlwt,因为我正在处理.xls文件。 - Laura
好的,我会在以后留意这个。 - jmcnamara

4

我也遇到了同样的问题,以下方法对我有效:

def format_col_width(ws):
    ws.column_dimensions['B'].width = 20
    ws.column_dimensions['C'].width = 20
    ws.column_dimensions['D'].width = 1
    ws.column_dimensions['E'].width = 20


1
这对我有效,谢谢。 - Ajay Kumar

1
    # monkey path :) -- https://dev59.com/v1EG5IYBdhLWcg3wHEJo
    # as of 2023/04/21
    # AttributeError: module 'numpy' has no attribute 'float'
    np.float = float  
    writer = pd.ExcelWriter('test.xlsx') 
    df.to_excel(writer, sheet_name='Sheet1', index=False, na_rep='NaN')
    for column in df:
        column_length = max(df[column].astype(str).map(len).max(), len(column))
        col_idx = df.columns.get_loc(column)
        #writer.sheets['Sheet1'].set_column(col_idx, col_idx, column_length)  <-- set_column deprecated
        writer.sheets['Sheet1'].column_dimensions[chr(65+col_idx)].width = column_length + 5   # add some extra space {5 here} to have a better look

你的答案可以通过添加更多支持信息来改进。请编辑以添加更多详细信息,例如引用或文档,以便他人确认您的答案是正确的。您可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接