如何在xlsx文件上创建然后再写入

问题描述 投票:7回答:2

我是python和odoo的新手。我遇到了一个场景,我想首先从我的动态记录创建一个excel文件,然后想将它保存到ir.attachment表。这样我就可以将其作为电子邮件中的附件链接。

这是我尝试过的,但它没有写入文件

    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文件,实际上这是我的路径问题。现在我只想知道如何在qazxsw poi中添加该文件

python excel openerp odoo-10
2个回答
6
投票

您可以动态创建xlsx文件并通过电子邮件附加。

ir.attachment

在上面的代码中,我们创建了一个工作表记录,然后创建附件记录。

您需要提供name,datas_fname,datas,res_model来创建附件。你也可以给res_id创建附件,之后系统将在该模型和记录中自动显示附件。

创建附件后,您可以在电子邮件中动态使用。

这可能对你有所帮助。


0
投票

您可以借助以下模块构建自己的Excel报告: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)]}) report_xls

有些模块已经使用了report_xlsx模块,但您可以在Odoo应用程序或OCA存储库中查找它们

获得报告后,您可以将其用作其余PDF报告

© www.soinside.com 2019 - 2024. All rights reserved.