office-js - 获取表onChange事件的列名
问题描述
任务:
使用表对象的 OnChange 事件,检测该特定表的哪一列和哪一行发生了变化。
目前我有以下代码,它可以工作并且可能相当有效,但是我想知道是否有更简单的替代方案?因为这看起来确实应该内置到事件对象本身中......
async function registerOnChangeEvent(tableName,callback) {
return await Excel.run(async (context) => {
const pointsTab = context.workbook.tables.getItem(tableName);
const headers = pointsTab.getHeaderRowRange().load("values");
const headersAdd = pointsTab.getHeaderRowRange().load("address");
await context.sync();
//Register event
pointsTab.onChanged.add((event)=>{
return Excel.run(function(context){
return context.sync()
.then(function () {
//event, context, this
//console.log(event, context, this)
var rootData = headersAdd.address.match(/\!([A-Z]+)(\d+)/)
var rootCol = getColumnIndex(rootData[1])
var rootRow = parseInt(rootData[2])
var eventData = event.address.match(/([A-Z]+)(\d+)/)
var eventCol = getColumnIndex(eventData[1])
var eventRow = parseInt(eventData[2])
//column name and number from event and root data.
event["colNum"] = eventCol - rootCol;
event["colName"] = headers.values[0][event["colNum"]];
event["rowNum"] = eventRow - rootRow;
console.log(event)
callback(event); //If required.
})
}).catch(function () {
//...
})
})
return
});
}
function getColumnIndex(address) {
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var arr = address.split("")
var sum = 0
arr.forEach((char, index) => {
var i = arr.length - index - 1
sum = sum + (alphabet.indexOf(char) + 1) * Math.pow(alphabet.length, i)
})
return sum
}
解决方案
感谢您询问和使用我们的 API。让我再次确认您的要求。您需要的是事件参数中表的列/行索引,对吗?这也是我们正在考虑的。
但是一个问题是,当您更改某些中断范围(如 A4 和 B5 Discontinue Range)时,它将在一个事件中返回地址“A4,B5”。中断范围由逗号分隔。所以我们不能只为“A4”或“B5”返回索引和宽度/长度。所以也许我们可以返回列/行索引列表和宽度/长度列表,如
EventArgument {
...
address: "A4, B5",
columnIndexes: [1, 2],
rowIndexes: [1, 2],
weigths: [1, 1],
lengths: [1, 1],
...
}
或者
EventArgument {
address: "A4, B5",
Indexes: [[1, 1, 1, 1], [2, 2, 1, 1]]
}
或者 ...
似乎它们中的任何一个都很复杂。如果您可以分享您的想法,那可能会很棒。提前致谢。
推荐阅读
- amazon-web-services - 如何在私有 EC2 实例中发送 http / https 请求
- c - 如何获取多维数组的输入并使用指针在 C 中打印数组?
- redux-saga - 为所有返回提供调用 @@redux-saga/IO
- excel - 根据详细信息“表”填充汇总“表”列
- android - 由于范围不同,模拟挂起函数返回 null
- ruby-on-rails - Apartment gem 中的模式选择未按预期工作
- ionic-framework - 在 ionic 4 中频繁更改无线电组列表值时,无线电组无法正常工作
- android - 我想用前一个数字清除符号“-”
- sql - 两个表的库存余额
- javascript - 在浏览器控制台中出现错误:未声明纯文本文档的字符编码