首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Ajax请求发送OfficeJS 2D数组

通过Ajax请求发送OfficeJS 2D数组
EN

Stack Overflow用户
提问于 2018-05-31 05:57:15
回答 1查看 36关注 0票数 0

我正在尝试用OfficeJS发送一个“大”表:

从清单路由加载的functionfile.html

代码语言:javascript
复制
<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>

然而,我不确定如何发送它,在后台我有一个捕获请求的flask服务器,并希望我可以只使用pandas.read_json,但无论我如何发送它,我都会收到不同的错误。这是data.values[0][0]flask.request的打印输出

代码语言:javascript
复制
CombinedMultiDict([ImmutableMultiDict([('update_date', '43191'), ('accessData', 'Channel')]), ImmutableMultiDict([])])

当我尝试data.values[0]时,我得到了一个值列表,这正是我所期望的

代码语言:javascript
复制
CombinedMultiDict([ImmutableMultiDict([('update_date', '43191'), ('accessData[]', 'Channel'), ... <All my column headers>, ImmutableMultiDict([])])

但是当我尝试发送只有data.values的2D数组时,我在ajax.fail中得到了一个错误消息:

代码语言:javascript
复制
Error == {"readyState":0,"status":0,"statusText":"error"}

我也尝试了JSON.stringify(data.values),得到了相同的错误消息:

代码语言:javascript
复制
Error == {"readyState":0,"status":0,"statusText":"error"}

我甚至尝试将每一列转换为某种类型的列表,作为accessData中的嵌套键,但我得到了相同的错误消息。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 07:51:21

理想情况下,您应该将从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; }); }) }

这将使您解放出来,然后执行以下操作:

代码语言:javascript
复制
 `getExcelData().then(function(values) {        $.ajax(...)     });` 

注意,range.values只返回一个常规的二维数组,没有什么特别的。因此,您可以独立于Excel调用来尝试ajax调用(这是将它们分开的另一个原因)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50613903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档