我正在尝试用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>
然而,我不确定如何发送它,在后台我有一个捕获请求的flask服务器,并希望我可以只使用pandas.read_json
,但无论我如何发送它,我都会收到不同的错误。这是data.values[0][0]
时flask.request
的打印输出
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
的2D数组时,我在ajax.fail
中得到了一个错误消息:
Error == {"readyState":0,"status":0,"statusText":"error"}
我也尝试了JSON.stringify(data.values)
,得到了相同的错误消息:
Error == {"readyState":0,"status":0,"statusText":"error"}
我甚至尝试将每一列转换为某种类型的列表,作为accessData
中的嵌套键,但我得到了相同的错误消息。任何帮助都将不胜感激。
发布于 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; }); }) }
这将使您解放出来,然后执行以下操作:
`getExcelData().then(function(values) { $.ajax(...) });`
注意,range.values
只返回一个常规的二维数组,没有什么特别的。因此,您可以独立于Excel调用来尝试ajax调用(这是将它们分开的另一个原因)
https://stackoverflow.com/questions/50613903
复制相似问题