My plan is to let a user to upload an excel file, once uploaded I will be displaying editable form which contains the content of the uploaded excel, once user confirms the input is correct, he/she hits the save button and these items are saved at some model.
For this, I have written this view and form:
form:
IMPORT_FILE_TYPES = ['.xls', ] class XlsInputForm(forms.Form): input_excel = forms.FileField(required= True, label= u"Upload the Excel file to import to the system.") def clean_input_excel(self): input_excel = self.cleaned_data['input_excel'] extension = os.path.splitext( input_excel.name )[1] if not (extension in IMPORT_FILE_TYPES): raise forms.ValidationError( u'%s is not a valid excel file. Please make sure your input file is an excel file (Excel 2007 is NOT supported.' % extension ) else: return input_excel
view:
def import_excel_view(request): if request.method == 'POST': form = XlsInputForm(request.POST, request.FILES) if form.is_valid(): input_excel = request.FILES['input_excel'] # I need to open this input_excel with input_excel.open_workbook() return render_to_response('import_excel.html', {'rows': rows}) else: form = XlsInputForm() return render_to_response('import_excel.html', {'form': form})
As you can see at the # I need to open this input_excel with input_excel.open_workbook()
I need to read from memory but open_workbook
reads from a file, without saving this input to somewhere, how can I read it ?
if form.is_valid(): input_excel = request.FILES['input_excel'] book = xlrd.open_workbook(file_contents=input_excel.read()) # your work with workbook 'book' return render_to_response('import_excel.html', {'rows': rows})
When file_contents
optional keyword is provided, filename
keyword will not be used.
Happy Coding.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With