你如何读取Excel与AppEngine上xlrd文件(How do you read excel

2019-07-29 06:18发布

我在使用的AppEngine xlrd。 我用的烧瓶

我不能读取输入文件并将其保存在显示相同的错误信息

代码

def read_rows(inputfile):
    rows = []
    wb = xlrd.open_workbook(inputfile)
    sh = wb.sheet_by_index(0)
    for rownum in range(sh.nrows):
        rows.append(sh.row_values(rownum))
    return rows

@app.route('/process_input/',methods=['POST','GET'])
def process_input():
  inputfile = request.files['file']
  rows=read_rows(request.files['file'])
  payload = json.dumps(dict(rows=rows))
  return payload

我意识到,这可能是由未上传并保存为一个文件引起的。 任何对此的解决方法吗? 这将有助于其他许多人。 任何帮助表示赞赏,THX

更新:发现我贴在下面的解决方案。 对于那些混淆使用xlrd可以参考开源项目回购我张贴。 关键是传递文件的内容,而不是文件名

Answer 1:

找到一个解决方案终于

这里就是我如何做到这一点。 相反,保存文件的,我读了文件的内容,并让xlrd读它

def read_rows(inputfile):
  rows = []
  wb = xlrd.open_workbook(file_contents=inputfile.read())
  sh = wb.sheet_by_index(0)
  for rownum in range(sh.nrows):
    rows.append(sh.row_values(rownum))
  return rows

很好的工作,打开了Excel文件成JSON-能格式。 如果你想输出的J​​SON只需使用json.dumps()。

完整的代码示例,可以发现https://github.com/cjhendrix/HXLator/blob/master/gae/main.py和它的功能全面推行xlrd和如何与数据进行工作。

THX为指针



Answer 2:

使用:

wb = xlrd.open_workbook(file_contents=inputfile)

要调用的方式open_workbook希望你传递什么是文件名,而不是一个瓶FileStorage对象包装的实际文件。



Answer 3:

从您的回溯判断。

File "/Users/fauzanerichemmerling/Desktop/GAEHxl/gae/lib/xlrd/init.py", line 941, in biff2_8_load
    f = open(filename, open_mode)

您可以尝试改变这一行:

f = filename


文章来源: How do you read excel files with xlrd on Appengine