2010-09-08 19 views
18

Planım, kullanıcının yüklendikten sonra bir excel dosyası yüklemesine izin vermektir. Kullanıcı, girdinin doğru olduğunu onayladıktan sonra, yüklenen excel'in içeriğini içeren düzenlenebilir formu görüntüleyecektir. kaydet düğmesine basıyor ve bu öğeler bir modelde saklanıyor. Bunun içinDjango ve xlrd, bellekten okuma

, ben bu görüşü ve formu yazdım:

formu:

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 

görünüm:

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

İhtiyacım # I need to open this input_excel with input_excel.open_workbook() de görebileceğiniz gibi bellekten okumak için ama open_workbook bir dosyadan thi kaydetmeden okur bir yere girdi, nasıl okuyabilirim?

cevap

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

file_contents opsiyonel anahtar kelime sağlandığında, filename kelime kullanılmaz.

Mutlu Kodlama.

+2

harika çalışıyor, teşekkürler! – Hellnar

+0

Unicode dosyaları için 'book = open_workbook'u kullanabilirsiniz (file_contents = input_excel.read(), encoding_override = 'utf8')' –