Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django and xlrd, reading from memory

Tags:

excel

django

xlrd

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 ?

like image 376
Hellnar Avatar asked Sep 08 '10 07:09

Hellnar


1 Answers

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.

like image 59
simplyharsh Avatar answered Sep 22 '22 14:09

simplyharsh