2

我在 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

我意识到这可能是由于未上传并将其保存为文件造成的。有什么解决方法吗?这也将帮助许多其他人。任何帮助表示赞赏,谢谢

更新:找到了我在下面发布的解决方案。对于那些对使用 xlrd 感到困惑的人,可以参考我发布的开源项目 repo。关键是传递文件的内容而不是文件名

4

3 回答 3

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 的完整实现以及如何处理数据。

谢谢指点

于 2012-06-11T06:36:09.027 回答
3

采用:

wb = xlrd.open_workbook(file_contents=inputfile)

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

于 2012-05-06T18:32:48.187 回答
0

从您的回溯中判断。

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

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

f = filename
于 2012-05-05T07:51:17.920 回答