Passa al contenuto
Menu
È necessario essere registrati per interagire con la community.
La domanda è stata contrassegnata
2 Risposte
11305 Visualizzazioni

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
Abbandona
Risposta migliore

Hi AandB,

You can try this way,

Thank you.

Avatar
Abbandona
Risposta migliore

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
Abbandona
Post correlati Risposte Visualizzazioni Attività
0
ott 17
4639
1
ott 17
19840
3
ott 24
17956
11
apr 23
28680
5
ott 24
28995