2017-12-19 104 views
7

पर लिखें मैं पाइथन और odoo के लिए नया हूं। मैं एक परिदृश्य में आया कि मैं अपने गतिशील रिकॉर्ड से पहले एक्सेल फ़ाइल बनाना चाहता हूं और फिर इसे ir.attachment तालिका में सहेजना चाहता हूं। ताकि मैं इसे ईमेल में अनुलग्नक के रूप में जोड़ सकूं।कैसे बनायें और फिर xlsx फ़ाइल

यहाँ मैं क्या करने की कोशिश की है, लेकिन इसके फ़ाइल

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 फ़ाइल बनाने के लिए कर रहा हूँ में नहीं लिख, actullay यह मेरा पथ मुद्दा था। अब मैं सिर्फ पता है कि कैसे ir.attachment

+0

"यह फ़ाइल में लिख नहीं रहा है" का क्या मतलब है? क्या फाइल बनाई जा रही है लेकिन जनसंख्या नहीं है? इसके अलावा, आप आयात का उपयोग कर रहे हैं जो यहां उपलब्ध नहीं हैं। कृपया अपने [mcve] – asongtoruin

+0

के लिए पूरा कोड प्रदान करें, क्षमा करें, मेरे प्रश्न को थोड़ा – Ancient

+0

@ अद्यतन में अपडेट करें, मैंने आपके कोड को बिना किसी समस्या के चलाया है, जैसा कि है, और मैं xlsx फ़ाइल को इरादे से देख सकता हूं। क्या आपको अभी भी कोई समस्या है? – Eugene

उत्तर

5

आप xlsx फ़ाइल गतिशील बना सकते हैं और ईमेल के माध्यम से संलग्न कर सकते हैं है Odoo Apps में या में ओसीए भंडार

उनके लिए देख सकते हैं।

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)]}) 

उपरोक्त कोड में हमने एक वर्कशीट रिकॉर्ड बनाया है और इसके बाद अनुलग्नक रिकॉर्ड बनाते हैं।

आप नाम, datas_fname, datas, res_model लगाव पैदा करने के लिए देने के लिए की जरूरत है। आप संलग्नक बनाने के लिए res_id भी दे सकते हैं, उसके बाद सिस्टम उस मॉडल और रिकॉर्ड के अंदर स्वचालित रूप से दृश्य संलग्नक होगा।

अनुलग्नक बनाने के बाद आप ईमेल में गतिशील रूप से उपयोग कर सकते हैं।

यह आपकी मदद कर सकता है।

+0

धन्यवाद, यह वास्तव में मदद करता है और यह काम करता है। – Ancient

0

में उस फ़ाइल को जोड़ने के लिए है कि आप इन मॉड्यूल की मदद से अपनी खुद की एक्सेल रिपोर्ट का निर्माण कर सकते हैं: report_xlsreport_xlsx

वहाँ मॉड्यूल कि पहले से ही report_xls मॉड्यूल का उपयोग कर रहे हैं, लेकिन आप एक बार जब आप रिपोर्ट को आप पीडीएफ के बाकी के रूप में उपयोग कर सकते हैं रिपोर्टों

+0

के साथ क्यों प्रयास नहीं कर सकते हैं, जहां आपकी दृष्टि में कोई उदाहरण है जहां 'report_xls ' – Ancient

+0

का उपयोग किया जाता है ओसीए मॉड्यूल' account_balance_reporting_xls' 'report_xls' का उपयोग करता है। – forvas

+0

यदि आप [8.0 संस्करण] (https://www.odoo.com/apps/modules/8.0/report_xls/) की जांच करते हैं तो आप कुछ स्पष्टीकरण भी पढ़ सकते हैं – ChesuCR

संबंधित मुद्दे