2010-09-08 12 views
18

Mój plan to pozwolić użytkownikowi na przesłanie pliku Excela, po przesłaniu Będę wyświetlał formularz edytowalny, który zawiera treść przesłanego programu Excel, gdy użytkownik potwierdzi, że dane wejściowe jest poprawne, on/ona uderza przycisk zapisu, a te elementy są zapisywane w niektórych modelach.Django i Xlrd, czytanie z pamięci

W tym pisałem ten pogląd i formę:

forma:

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 

widok:

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

Jak widać na # I need to open this input_excel with input_excel.open_workbook() muszę do odczytu z pamięci, ale open_workbook czyta z pliku, bez zapisywania thi s do czegoś, jak mogę to przeczytać?

Odpowiedz

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

Kiedy file_contents opcjonalnie kluczowe jest, filename kluczowe nie zostaną wykorzystane.

Happy Coding.

+2

działa świetnie, dzięki! – Hellnar

+0

Dla plików unicode można użyć 'book = open_workbook (file_contents = input_excel.read(), encoding_override = 'utf8') –