【问题标题】:AttributeError: 'Worksheet' object has no attribute 'set_column'AttributeError:“工作表”对象没有属性“set_column”
【发布时间】:2020-12-09 02:54:57
【问题描述】:

我收到一个错误,看起来……错了。因为当然工作表对象具有 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 是一些常量,controller 有一些辅助函数。

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 已安装。

【问题讨论】:

    标签: python excel pandas xlsxwriter


    【解决方案1】:

    单列范围存在错误。它们应该是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。

    【讨论】:

    • 我改变了它,但不幸的是这不是问题 - 错误出现在第一行,`文件“scrubaddresses.py”,第 24 行,在 auto_format_cell_width ws.set_column('B:C', 20) ` 我确实运行了 pip install xlsxwriter,但没有任何改变。也许我应该重新启动并再试一次,大声笑。奇怪的是,我将您的代码作为 test.py 运行,它没有抛出任何错误。
    • 我已经弄清楚了 - 它使用的是 xlwt,因为我正在处理 .xls 文件。
    • 好一个。以后我会注意的。
    【解决方案2】:

    我遇到了同样的问题,以下对我有用:

    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
    
    

    【讨论】:

    • 这对我有用,谢谢...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2015-04-12
    • 1970-01-01
    • 2021-07-05
    • 2012-12-01
    • 2021-04-19
    • 2021-11-22
    相关资源
    最近更新 更多