使用 XLSXwriter 编写图像以 Excel 返回" workbook not callable"



使用以下链接的第一个答案Python:将图像和数据帧写入同一excel文件作为指南:

我有下面的脚本,我喜欢在其中将一个数据帧对象写入一张表,并将一堆图像写入另一张表。

class name():
def some_func(self):
self.writer = pd.ExcelWriter('Name1',engine='xlsxwriter')
return

def write_excel(self):
self.df.to_excel(self.writer,sheet_name='Name',index=False, header=False)
self.writer.save()   
return
def write_excel(self):
self.workbook = self.writer.book('Name1')
self.worksheet = self.writer.sheets(name='images')
images=[]
do some stuff
for i,image in enumerate(images):
self.worksheet.insert_image('D1',0,y_postn[i],image)  
self.writer.save()   
return

它返回以下错误

'Workbook' object is not callable

不确定如何解释或修复此错误?。。。

错误来自以下行:

self.workbook = self.writer.book('Name1')

Book是一个对象,而不是一个方法,它有以下字段(__call__不是其中之一(:

_Workbook__active_sheet
_Workbook__all_fonts_num_formats_xf_styles_rec
_Workbook__all_links_rec
_Workbook__backup_on_save
_Workbook__backup_rec
_Workbook__bof_rec
_Workbook__bookbool_rec
_Workbook__boundsheets_rec
_Workbook__codepage_rec
_Workbook__country_code
_Workbook__country_rec
_Workbook__custom_palette_b8
_Workbook__datemode_rec
_Workbook__dates_1904
_Workbook__dsf_rec
_Workbook__eof_rec
_Workbook__ext_sst_rec
_Workbook__first_tab_index
_Workbook__fngroupcount_rec
_Workbook__height_twips
_Workbook__hide_obj_rec
_Workbook__hpos_twips
_Workbook__hscroll_visible
_Workbook__intf_end_rec
_Workbook__intf_hdr_rec
_Workbook__intf_mms_rec
_Workbook__obj_protect
_Workbook__obj_protect_rec
_Workbook__owner
_Workbook__palette_rec
_Workbook__password_rec
_Workbook__precision_rec
_Workbook__prot4rev_pass_rec
_Workbook__prot4rev_rec
_Workbook__protect
_Workbook__protect_rec
_Workbook__refresh_all_rec
_Workbook__selected_tabs
_Workbook__sheet_refs
_Workbook__sst
_Workbook__sst_rec
_Workbook__styles
_Workbook__tab_width_twips
_Workbook__tabid_rec
_Workbook__tabs_visible
_Workbook__use_cell_values
_Workbook__useselfs_rec
_Workbook__vpos_twips
_Workbook__vscroll_visible
_Workbook__width_twips
_Workbook__window1_rec
_Workbook__wnd_hidden
_Workbook__wnd_mini
_Workbook__wnd_protect
_Workbook__wnd_protect_rec
_Workbook__worksheet_idx_from_name
_Workbook__worksheets
_Workbook__write_access_rec
__class__
__delattr__
__dict__
__dir__
__doc__
__eq__
__format__
__ge__
__getattribute__
__gt__
__hash__
__init__
__init_subclass__
__le__
__lt__
__module__
__ne__
__new__
__reduce__
__reduce_ex__
__repr__
__setattr__
__sizeof__
__str__
__subclasshook__
__weakref__
_get_supbook_index
_ownbook_supbook_ref
_ownbook_supbookx
_supbook_xref
_xcall_supbook_ref
_xcall_supbookx
_xcall_xref
active_sheet
add_font
add_rt
add_sheet
add_sheet_reference
add_str
add_style
backup_on_save
convert_sheetindex
country_code
dates_1904
default_style
del_str
encoding
get_active_sheet
get_backup_on_save
get_biff_data
get_country_code
get_dates_1904
get_default_style
get_height
get_hpos
get_hscroll_visible
get_obj_protect
get_owner
get_protect
get_sheet
get_style_stats
get_tab_width
get_tabs_visible
get_use_cell_values
get_vpos
get_vscroll_visible
get_width
get_wnd_mini
get_wnd_protect
get_wnd_visible
height
hpos
hscroll_visible
obj_protect
owner
protect
raise_bad_sheetname
rt_index
save
set_active_sheet
set_backup_on_save
set_colour_RGB
set_country_code
set_dates_1904
set_height
set_hpos
set_hscroll_visible
set_obj_protect
set_owner
set_protect
set_tab_width
set_tabs_visible
set_use_cell_values
set_vpos
set_vscroll_visible
set_width
set_wnd_mini
set_wnd_protect
set_wnd_visible
setup_ownbook
setup_xcall
sheet_index
str_index
tab_width
tabs_visible
use_cell_values
vpos
vscroll_visible
width
wnd_mini
wnd_protect
wnd_visible

以下是如何使用此API的官方示例:

# Get the xlsxwriter objects from the dataframe writer object.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']
# Create a chart object.
chart = workbook.add_chart({'type': 'column'})
# Get the dimensions of the dataframe.
(max_row, max_col) = df.shape
# Configure the series of the chart from the dataframe data.
chart.add_series({'values': ['Sheet1', 1, 1, max_row, 1]})
# Insert the chart into the worksheet.
worksheet.insert_chart(1, 3, chart)

不应该将工作簿或工作表当作函数来调用。您可以访问其中的函数,如.add_chart.insert_chart

首先,你是如何获得一个包含书籍和表格的电子表格的?像这样:

# Create a Pandas dataframe from the data.
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')
# Get the xlsxwriter objects from the dataframe writer object.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

您还可以选择直接访问xlswriter API,而无需通过panda(但我不明白为什么在您的特定情况下会这样做(:

workbook  = xlsxwriter.Workbook('filename.xlsx')
worksheet = workbook.add_worksheet()

看看官方文件吧,里面有很多清晰的例子。

最新更新