我正在尝试在OfficeJS中发送一个“大”表:
<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
时<{1}}的打印输出:
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([])])
发送2D数组时,我在data.values
中收到错误消息:
ajax.fail
我也尝试了Error == {"readyState":0,"status":0,"statusText":"error"}
并收到了相同的错误消息:
JSON.stringify(data.values)
我甚至尝试将每个列转换为某种列表作为Error == {"readyState":0,"status":0,"statusText":"error"}
内的嵌套键,但我收到了相同的错误消息。任何帮助将不胜感激。
答案 0 :(得分:1)
理想情况下,您应该将get-data-from-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数组,没什么特别的。所以你可以独立于Excel调用尝试你的ajax调用(这是将它们分开的另一个原因)