This should do def excel_read(): result={} if request.vars.filename != None: try: import xlrd path=os.path.join (request.folder,'private','a_dummy_file_name.xls') open(path,'w').write(request.vars.filename.file.read()) book = xlrd.open_workbook(path) result['The number of worksheets is']=book.nsheets result["Worksheet name(s)"]= book.sheet_names() sh = book.sheet_by_index(0) result['sh.name']=sh.name result['sh.nrows']=sh.nrows result['sh.ncols']=sh.ncols result['Cell D30 is']=sh.cell_value(rowx=29, colx=3) for rx in range(sh.nrows): result['row ' + str(rx)]=sh.row(rx) except: response.flash = T('excel_read exception') return dict(result=result)
for you request.vars.filename is a cgi.FieldStorage object. It is not a named file. It containes - request.vars.filename.file (a buffered input stream) - request.vars.filename.filename (the original filename) For you to access it you should read the stream and save it with a name. Do not use the original filename to avoid directory traversal attacks. Massimo On May 7, 2:58 pm, Hans <johann.scheibelho...@easytouch-edv.com> wrote: > I'm trying to import some content directly from an excel file which > the user selects from its local files. I've taken and modified code > from the admin controller for retrieving the path/filename thru a nice > file selection window. > > The problem: I get only the filename of a locked temporary file, not > the original filename. If I close the temporary file, to remove the > lock, the file is automatically deleted... > > I would not mind to work with a temporary copy of the original file, > but retrieving the original path/filename thru a similar file > selection window would be prefered. How can this be achieved? > > Hans > P.S. I'm using the xlrd module fromhttp://pypi.python.org/pypi/xlrd > > ### viewer ### > {{extend 'layout.html'}} > <h1>excel_read.html template</h1> > > <div class='frame'> > <h2>{{=t2.T('Select File')}}</h2> > {{=FORM('File: ',INPUT(_type='file',_name='filename'),INPUT > (_type='submit', _value='submit'))}} > </div> > > <div class='frame'> > {{=BEAUTIFY(response._vars)}} > </div> > > ### controller ### > def excel_read(): > result={} > if request.vars.filename != None: > try: > import xlrd > > # >>> can't locate the originally selected path/filename in > request.vars.filename <<< > book = xlrd.open_workbook(request.vars.filename.file.name) > # >>> with a valid path/filename it works <<< > book = xlrd.open_workbook('F:/Documents and Settings/Hans/ > Desktop/test.xls') > > result['The number of worksheets is']=book.nsheets > result["Worksheet name(s)"]= book.sheet_names() > sh = book.sheet_by_index(0) > result['sh.name']=sh.name > result['sh.nrows']=sh.nrows > result['sh.ncols']=sh.ncols > result['Cell D30 is']=sh.cell_value(rowx=29, colx=3) > for rx in range(sh.nrows): > result['row ' + str(rx)]=sh.row(rx) > except: > response.flash = T('excel_read exception') > return dict(result=result) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---