#
#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
列表选择几条数据就导出几条,应该如何修改代码才可以实现
最新发布