Python Excel操作模块XlsxWriter之插入按钮 worksheet.insert_button()

本文介绍如何在Excel工作表中使用worksheet.insert_button()方法插入VBA按钮,并将其与宏关联,实现自动化任务。该方法接受指定行列位置及可选参数如宏名、按钮文字等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

worksheet.insert_button()

insert_button(row, col[, options])

向工作表插入一个VBA按钮控件。

参数:

  • row(int) - 单元格所在的行(索引从0开始计数)。
  • col(int) - 单元格所在的列(索引从0开始计数)。
  • options(dict) - 可选的按钮位置,缩放参数。

insert_button()方法可以用于向工作表插入Excel表单按钮。

这个方法通常仅在与工作簿add_vab_project()方法一起使用时才有用,以便将该按钮与嵌入VBA项目中的宏关联起来:

# 添加二进制VBA项目。
workbook.add_vba_project('./vbaProject.bin')

# 在VBA项目中添加按钮并与宏关联起来。
worksheet.insert_button('B3',{'macro':   'say_hello',
                              'caption': 'Press Me'})


insert_button()方法接收字典形式的可选参数来定位和缩放按钮。可用的参数和它们的默认值有:

{
    'macro':    None,
    'caption':  'Button 1',
    'width':    64,
    'height':   20.
    'x_offset': 0,
    'y_offset': 0,
    'x_scale':  1,
    'y_scale':  1,
}

marco选项是用于设置当用户点击时调用的宏。宏应当通过上面演示的工作簿的add_vba_project()方法来添加。

caption用于设置按钮的说明。默认是值是Button nn代表按钮的数量。

默认的按钮width是64像素,height是20像素,也就是单元格的默认宽度和高度。

offsetscale选项和insert_chart()的一样。

05-26
# #Variant you can use # user_param: 用户在弹窗输入的参数 #env: Odoo Environment on which the action is triggered #time, datetime, dateutil, pytz: useful Python libraries #logger: #UserError: Warning Exception to use with raise #'obj': record, #'wb': return of openpyxl.load_workbook(), #'ws': openpyxl.worksheet.worksheet.Worksheet, #'style': openpyxl.styles, #'add_img': add_img, #'copy': copy, # #Example: #ws['G9'] = obj.confirmation_date #ws["B1"].font=style.Font(name="宋体",size=17,color="00CCFF") #ws.cell(2,1).fill = style.PatternFill("solid",fgColor="00FF02") #ws.cell(row,col).alignment = style.Alignment(horizontal='center', vertical='justify', wrap_text=True) #ws.merge_cells('A1:D4') #ws.unmerge_cells('A1:D4') #row = 17 #idx = 1 #for line in obj.order_line: # ws.cell(row,1).value = idx # add_img(ws, (row,2), line.product_id.image_medium, (100, 100)) # ws.cell(row,3).value = line.product_id.with_context(lang=obj.partner_id.lang).name # ws.insert_rows(row,1) # # row=row+1 # idx=idx+1 from openpyxl.styles import Font, Alignment, PatternFill, Border, Side from bs4 import BeautifulSoup from datetime import datetime import calendar # 获取工作表对象 ws = wb.active # 或者传入具体的 ws # 设置字体和边框样式 header_font = Font(name='微软雅黑', size=11, bold=True) body_font = Font(name='微软雅黑', size=10) alignment_center = Alignment(horizontal='center', vertical='center', wrap_text=True) alignment_left = Alignment(horizontal='left', vertical='center', wrap_text=True) side = Side(style='thin', color='000000') border = Border(left=side, right=side, top=side, bottom=side) if obj and obj[0].partner_id: partner_name = obj[0].partner_id.name else: partner_name = '' if obj: dates = [r.date for r in obj if r.date] if dates: min_date = min(dates) # 获取当月第一天 first_day = min_date.replace(day=1) # 获取当月最后一天 last_day_num = calendar.monthrange(min_date.year, min_date.month)[1] last_day = min_date.replace(day=last_day_num) # 设置日期范围为当月第一天到最后一天 date_range = f'{first_day.month}.{first_day.day}-{last_day.month}.{last_day.day}' date_year = f'{min_date.strftime("%Y年%m月")}' else: date_range = '' else: date_range = '' # 1. 设置主标题 ws.merge_cells('B1:K1') ws['B1'] = f'新鸿贵{date_year}对账单 ({date_range})' ws['B1'].font = Font(name='微软雅黑', size=18, bold=True) ws['B1'].alignment = alignment_center ws.merge_cells('B2:K2') ws['B2'] = f'客户:{partner_name}' ws['B2'].font = Font(name='微软雅黑', size=12) ws['B2'].alignment = alignment_left # ws.merge_cells('B3:D3') # ws['B3'] = date_range # ws['B3'].font = Font(name='微软雅黑', size=11, bold=True) # ws['B3'].alignment = alignment_center # 5. 表头设置 headers = [ '序号', '日期', '单号', '产品规格', '车号', '发货数量(T)', '收货数量(T)', '单价', '金额', '备注' ] # 设置列宽 col_widths = [8, 12, 15, 15, 10, 12, 12, 10, 12, 15] for col_idx, width in enumerate(col_widths, 2): # B 列开始是第2列 ws.column_dimensions[chr(64 + col_idx)].width = width # 写入表头 for idx, header in enumerate(headers, 2): cell = ws.cell(row=3, column=idx, value=header) cell.font = header_font cell.alignment = alignment_center cell.border = border row_index = 4 for idx, record in enumerate(obj, 1): cell = ws.cell(row=row_index, column=2, value=idx) cell.font = body_font cell.alignment = alignment_center date_value = record.date.strftime('%Y-%m-%d') if record.date else '' cell = ws.cell(row=row_index, column=3, value=date_value) cell.font = body_font cell.alignment = alignment_center cell = ws.cell(row=row_index, column=4, value=record.name or '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=5, value='') cell = ws.cell(row=row_index, column=5, value='') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=6, value=record.car_number or '') cell = ws.cell(row=row_index, column=6, value= '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=7, value= '') cell = ws.cell(row=row_index, column=7, value= '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=8, value=record.transaction_count or '') cell = ws.cell(row=row_index, column=8, value=record.transaction_count or '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=9, value=record.price or '') cell = ws.cell(row=row_index, column=9, value= '') cell.font = body_font cell.alignment = alignment_center cell = ws.cell(row=row_index, column=10, value=record.amount_untaxed_in_currency_signed or '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=11, value=record.notes or '') cell = ws.cell(row=row_index, column=11, value= '') cell.font = body_font cell.alignment = alignment_center # 添加边框 for col_idx in range(2, 12): ws.cell(row=row_index, column=col_idx).border = border row_index += 1 列表选择几条数据就导出几条,应该如何修改代码才可以实现
最新发布
08-16
class ExcelApp: def __init__(self, master): self.master = master master.title("Excel App")# 创建工具栏 toolbar = tk.Frame(master, height=30) tk.Button(toolbar, text="打开", command=self.open_file).pack(side=tk.LEFT, padx=2, pady=2) tk.Button(toolbar, text="保存", command=self.save_file).pack(side=tk.LEFT, padx=2, pady=2) toolbar.pack(side=tk.TOP, fill=tk.X)# 创建文本框 text_frame = tk.Frame(self.panel_right) text_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True) self.textbox = tk.Text(text_frame) self.textbox.pack(side=tk.TOP, fill=tk.BOTH, expand=True)def show_sheet(self, sheet_name): self.textbox.tag_configure("left", justify="left") sheet = self.workbook[sheet_name] rows = sheet.max_row # 清空文本框 self.textbox.delete(1.0, tk.END) # 添加表名并设置居中标签 self.textbox.insert(tk.END, sheet_name + ":\n", "center") # 显示工作表内容,并在相应数据后面添加下拉输入框 for row in sheet.iter_rows(values_only=True): for i, cell in enumerate(row): line = str(cell) + "\t" if i == 0: # 在第一列数据后面添加下拉输入框 combobox = tk.ttk.Combobox(self.textbox, values=["下拉选项1", "下拉选项2", "下拉选项3"]) combobox.pack(side=tk.TOP, padx=10, pady=5) self.textbox.window_create(tk.END, window=combobox) self.textbox.insert(tk.END, line, "left") self.textbox.insert(tk.END, "\n") # 设置居中标签的样式 self.textbox.tag_configure("center", justify="center", font=("Arial", 14, "bold"))根據這個函數在寫一個函數,將這個函數生成文本框中的數據内容和下拉輸入框的内容按列寫入一個excel中,在寫入前要判斷文本框中是否存在内容和下拉輸入框是否有值,如果沒有就提醒
05-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值