如何创建并写入 xlsx 文件
How to create and then write on a xlsx file
我是 python 和 odoo 的新手。我遇到了一个场景,我想先从我的动态记录创建一个 excel 文件,然后想将它保存到 ir.attachment
table。这样我就可以 link 作为电子邮件的附件。
这是我试过的,但它没有写入文件
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', 20)
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Hello')
worksheet.write('A2', 'World', bold)
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
workbook.close()
更新
我能够创建 xlsx 文件,实际上这是我的路径问题。现在我只想知道如何在 ir.attachment
中添加该文件
您可以在这些模块的帮助下构建自己的 excel 报告:report_xls
report_xlsx
有些模块已经使用了 report_xls
模块,但您可以在 Odoo 应用程序或 OCA 存储库中查找它们
获得报告后,您可以将它们用作其他 PDF 报告
您可以动态创建 xlsx 文件并通过电子邮件附加。
from cStringIO import StringIO
import base64
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', 20)
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Hello')
worksheet.write('A2', 'World', bold)
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
fp = StringIO()
workbook.save(fp)
fp.seek(0)
datas = base64.encodestring(fp.read())
file_name = "name_%s" %(time.strftime('%Y%m%d%H%M%S.xlsx'))
attachment=[]
attachment_data = {
'name':file_name,
'datas_fname':file_name,
'datas':datas,
'res_model':"modelname",
}
attachment.append(self.env['ir.attachment'].create(attachment_data).id)
mail_obj=self.env['mail.mail']
mail_template=self.env.ref('mail_template_id')
msg_ids=mail_template.send_mail(id of object)
msgs=mail_obj.browse(msg_ids)
msgs.write({'attachment_ids': [(6, 0, attachment)]})
在上面的代码中,我们创建了一个工作表记录,然后创建了附件记录。
You need to give name,datas_fname,datas,res_model to create
attachment. you can also give res_id to create attachment, after that
system will automatic visible attachment inside that model and record.
创建附件后,您可以在电子邮件中动态使用。
这可能对你有帮助。
我是 python 和 odoo 的新手。我遇到了一个场景,我想先从我的动态记录创建一个 excel 文件,然后想将它保存到 ir.attachment
table。这样我就可以 link 作为电子邮件的附件。
这是我试过的,但它没有写入文件
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', 20)
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Hello')
worksheet.write('A2', 'World', bold)
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
workbook.close()
更新
我能够创建 xlsx 文件,实际上这是我的路径问题。现在我只想知道如何在 ir.attachment
您可以在这些模块的帮助下构建自己的 excel 报告:report_xls
report_xlsx
有些模块已经使用了 report_xls
模块,但您可以在 Odoo 应用程序或 OCA 存储库中查找它们
获得报告后,您可以将它们用作其他 PDF 报告
您可以动态创建 xlsx 文件并通过电子邮件附加。
from cStringIO import StringIO
import base64
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', 20)
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Hello')
worksheet.write('A2', 'World', bold)
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
fp = StringIO()
workbook.save(fp)
fp.seek(0)
datas = base64.encodestring(fp.read())
file_name = "name_%s" %(time.strftime('%Y%m%d%H%M%S.xlsx'))
attachment=[]
attachment_data = {
'name':file_name,
'datas_fname':file_name,
'datas':datas,
'res_model':"modelname",
}
attachment.append(self.env['ir.attachment'].create(attachment_data).id)
mail_obj=self.env['mail.mail']
mail_template=self.env.ref('mail_template_id')
msg_ids=mail_template.send_mail(id of object)
msgs=mail_obj.browse(msg_ids)
msgs.write({'attachment_ids': [(6, 0, attachment)]})
在上面的代码中,我们创建了一个工作表记录,然后创建了附件记录。
You need to give name,datas_fname,datas,res_model to create attachment. you can also give res_id to create attachment, after that system will automatic visible attachment inside that model and record.
创建附件后,您可以在电子邮件中动态使用。
这可能对你有帮助。