2010-09-08 22 views
18

Mi plan es permitir que un usuario cargue un archivo excel, una vez cargado, mostraré un formulario editable que contiene el contenido del archivo excel cargado, una vez que el usuario confirme que la entrada es correcta, él/ella presiona el botón Guardar y estos elementos se guardan en algún modelo.Django y xlrd, leyendo de memoria

Para ello, he escrito este punto de vista y forma:

formulario:

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 

vista:

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

Como se puede ver en la # I need to open this input_excel with input_excel.open_workbook() Necesito para leer desde la memoria pero open_workbook lee de un archivo, sin guardar thi s entrada a algún lugar, ¿cómo puedo leerlo?

Respuesta

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

Cuando se proporciona file_contents palabra clave opcional, no se utilizará filename palabra clave.

Happy Coding.

+2

funcionando genial, gracias! – Hellnar

+0

Para archivos Unicode, puede usar 'book = open_workbook (file_contents = input_excel.read(), encoding_override = 'utf8')' –