Ir al contenido
Menú
Se marcó esta pregunta
2 Respuestas
11294 Vistas

I am working on Odoo 10 and I am working on creating xlsx file and i am almost done because i created file successfully but the next i want to do is to add the currently created file into database table `ir.attachment` and my column requires bytea data so i need to convert the file in binary data. Which i tried in last line but its giving me error AttributeError: 'Workbook' object has no attribute 'read'. Below is the code from my function which i am using/

   file_name = 'test'
    workbook = xlsxwriter.Workbook(file_name)
    bold = workbook.add_format({'bold': True})  # Add a bold format to use to highlight cells.
    row_count = 2
    for customer in customers:
        customer_orders = self.env['amgl.order_line'].search([('customer_id', '=', customer.id)])
        column_count = 0
        for customer_order in customer_orders:
            worksheet.write(row_count, column_count, 'GST_Customer_account_number')
            column_count += 1
            worksheet.write(row_count, column_count, customer.full_name)
            column_count += 1
            worksheet.write(row_count, column_count, customer.account_number)
            column_count += 1
            worksheet.write(row_count, column_count, customer_order.create_date)
            column_count += 1
            worksheet.write(row_count, column_count, 'PR')
            column_count += 1
            worksheet.write(row_count, column_count, customer_order.products.product_code)
            column_count += 1
            worksheet.write(row_count, column_count, customer_order.quantity)
            column_count += 1
            worksheet.write(row_count, column_count, 'amark')
            column_count += 1
            worksheet.write(row_count, column_count, 'amark_customer_code')
            column_count += 1
            worksheet.write(row_count, column_count, 'Descripion')
            column_count += 1
            worksheet.write(row_count, column_count, 'transaction_number')
            row_count += 1

    workbook.close()
    data = 0
    base64.encode(workbook, data)

Update

 I tried to do followings and its making my encoded.But now i face issue that whenever i sent that record as an attachment. The file shows me the binary not actual text.

Here is what i tried.


with open(file_name, "rb") as xlfile:
byte_data = xlfile.read()

test_id = self.env['ir.attachment'].create({'name': file_name,
'datas': byte_data,
'datas_fname': file_name,
'res_model': 'res.users',
'res_id': 1, })
template = self.env.ref('amgl.mmr_approval_complete', raise_if_not_found=True)
mail_id = template.with_context(mmr_name='Export Report').send_mail(
1,
force_send=True,
raise_exception=True,
email_values={'attachment_ids': [test_id.id]}
)

I added these lines after workbook.close()


Avatar
Descartar
Mejor respuesta

Hi AandB,

You can try this way,

Thank you.

Avatar
Descartar
Mejor respuesta

there is an another option like you can create a mail with report using the template. try to add report file in template and it will automatically add attachments with mail.


Avatar
Descartar
Publicaciones relacionadas Respuestas Vistas Actividad
0
oct 17
4621
1
oct 17
19828
3
oct 24
17947
11
abr 23
28662
5
oct 24
28950