Как в Flask отобразить Excel в браузере

120
26 октября 2021, 11:20

Приложение формирует эксель-файл и сохраняет файл в папке на сервере.
Необходимо отобразить его в браузере (т.е. надо его открыть, чтобы пользователь мог посмотреть информацию в этом файле).
Использовал функцию send_from_directory() и send_file() - они позволяют локально (на компьютере пользователя) сохранить этот файл, но нужно не это.
Необходимо открыть файл и показать содержимое файла пользователю в браузере.

@app.route('/excel_reports/cy_status_tn_print', methods=['GET'])
def cy_status_tn_print_xl():
    if request.method == 'GET':
        idx = request.args.get('idx', type=str)
        cont_no = request.args.get('in_cont_no', type=str)
        print_date = request.args.get('print_date', type=str)
        consignee = request.args.get('consignee', type=str)
        cargo_receipt = request.args.get('cargo_receipt', type=str)
        cargo_delivery = request.args.get('cargo_delivery', type=str)
        printer_no = request.args.get('printer_no', type=int)
    # answer
        p1, p2 = cy_status_tn_print.write_tn_print(
        print_date=print_date,
        consignee_id=consignee,
        cargo_delivery_id=cargo_delivery,
        cargo_receipt_id=cargo_receipt,
        idx=idx,
        in_cont_no=cont_no,
        printer_no=printer_no
    )
    # print('Answer: {}'.format(answer))
    return send_from_directory(directory=p1, filename=p2)

Можно ли так сделать и как?

Answer 1

Открыть в браузере файл MS Excel без гарантированной установки MS Office на стороне клиента нельзя. Есть ряд сторонних js-библиотек, которые могут сделать подобное, но вам придется в проект включить серверную часть на node.js, обрабатывающую xls файлы и передающую из содержимое на браузер. Подробнее здесь

На чистом python с серверной реализацией данной задачи, решение вряд ли будет достаточно тривиальным.

Answer 2

Можно считать файл в DataFrame и отобразить как таблицу:

df = pd.read_excel(puti_fayl, usecols = "F, H, L, R, T, Z, AG, AK, AQ")
tables_s = [df.to_html(classes='data')]
titles_s = df.columns.values
return render_template("rezult_sverka.html", tables = tables_s, titles = titles_s,)

Отображение:

{% for table in tables %}
            {{titles[loop.index]}}
            {{ table|safe }}
{% endfor %}
READ ALSO
Какие HTML теги моветон?

Какие HTML теги моветон?

Какие HTML теги при оформлении css считается моветон ?

89
Как воспроизвести <audio> с задержкой?

Как воспроизвести <audio> с задержкой?

Есть некий звук, который нужно воспроизвести через 3 секунды после загрузки станицы

71
CSS | Свойство float:left, блоки налазят друг на друга

CSS | Свойство float:left, блоки налазят друг на друга

я задаю для block-left-helper-img float:left;, чтобы текст отображался по правой сторонеНо получаю такой результат

113