如何在Appengine上用xlrd读取excel文件

时间:2012-05-05 02:45:13

标签: python google-app-engine flask xlrd

我在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混淆的人可以参考我发布的开源项目repo。关键是传递文件的内容而不是文件名

3 个答案:

答案 0 :(得分:5)

最终找到解决方案

这是我如何做到的。我没有保存文件,而是读取文件的内容并让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格式。如果要输出json,只需使用json.dumps()。

完整的代码示例可以在https://github.com/cjhendrix/HXLator/blob/master/gae/main.py找到,它具有xlrd的完整实现以及如何处理数据。

指针的Thx

答案 1 :(得分:3)

使用:

wb = xlrd.open_workbook(file_contents=inputfile)

您调用open_workbook的方式需要传递的是文件名,而不是包装实际文件的Flask FileStorage对象。

答案 2 :(得分:0)

从你的追溯判断。

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

您可以尝试将此行更改为:

f = filename