Отправка OfficeJS 2D-массива через Ajax-запрос - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь отправить "большую" таблицу в OfficeJS:

functionfile.html загружен из маршрута манифеста

<script>
(function (){
"use strict";

Office.initialize = function (reason) {
    $(document).ready(function() {
        $("#send-data-button").click(send_data);
    });
};

function send_data() {
    return Excel.run( function(context) {
    var data = context.workbook.worksheets.getItem("SheetName")
                      .getRange("A1:K3673").load("values");

    return context.sync().then( function() {
        // 2d table is correctly seen
        // $("body").append(data.values);

        // Just gets lost in ajax call
        $.ajax({
           type: "GET",
           url: mysite,
           data: {"accessData": data.values},

         }).done( function(success) {
            $("body").append("All Done");

         }).fail( function(error) {
            $("body").append("Error == " + JSON.stringify(error));
         });

         return context.sync();
    });
    });
}
})();
</script>
<div> <button id="send-data-button"> Send </button></div>

Однако я не уверен, как это отправить,на обратной стороне у меня есть флеш-сервер, перехватывающий запрос, и я надеялся, что смогу просто использовать pandas.read_json, но как бы я ни пытался отправить это, я получаю разные ошибки.Вот распечатка flask.request, когда data.values[0][0]:

CombinedMultiDict([ImmutableMultiDict([('update_date', '43191'), ('accessData', 'Channel')]), ImmutableMultiDict([])])

И когда я пытаюсь data.values[0], я получаю список значений, что я и ожидал

CombinedMultiDict([ImmutableMultiDict([('update_date', '43191'), ('accessData[]', 'Channel'), ... <All my column headers>, ImmutableMultiDict([])])

Но когда я пытаюсь отправить двумерный массив с data.values, я получаю сообщение об ошибке в ajax.fail:

Error == {"readyState":0,"status":0,"statusText":"error"}

Я также пытался JSON.stringify(data.values) и получал то же сообщение об ошибке:

Error == {"readyState":0,"status":0,"statusText":"error"}

Я даже пытался взять каждый столбец и преобразовать их в какой-то список в виде вложенных ключей внутри accessData, но я получал то же сообщение об ошибке.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов

В идеале, вы должны изолировать часть получения данных из Excel от вашей части вызова ajax.Прямо сейчас они переплетены, что затрудняет помощь при отладке, и просто менее концептуально.

Для части Excel вы должны быть в состоянии:

function getExcelData(){ return Excel.run( function(context) { var data = context.workbook.worksheets.getItem("SheetName") .getRange("A1:K3673").load("values"); return context.sync() .then(function() { return data.values; }); }) }

Это освободит вас до следующего:

getExcelData().then(function(values) { $.ajax(...) });

Обратите внимание, что range.values возвращает только обычный 2D-массив, ничего особенного.Таким образом, вы можете попробовать свой AJAX-вызов независимо от вызова Excel (что является еще одной причиной, чтобы отделить их)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...