首页 > 解决方案 > Office.js 在表格的单个列中迭代单个单元格

问题描述

作为插件的一部分,我在 Excel 工作表中有一个控制面板,这是在插件启动时构建的。我想确保我的所有代码引用工作表都是相对引用,因此如果用户将列添加到控制面板或移动它。该插件仍然有效。

例如,如果我想阅读信息:

    // This reads a list of tickers to than query my back end for data.
    let BBTickerRange=sheet.tables.getItem("ControlPanel").columns.getItem("Symbol Ticker");
    BBTickerRange.load(["values", "columns", "items"])

     // IF the lookup misses I have code like
                BloombergTableOne.columns.items[i + 1].name = ("#TK" + i + " " + BBTickerRange.values[i][0]);
                BloombergTableOne.columns.getItemAt(i + 1).getHeaderRowRange().format.fill.color = "#DD5D74";
                BloombergTableOne.columns.getItemAt(i + 1).getDataBodyRange().clear();

     // But for Changing a specific value within the control panel I am still using code like
          var SymStartDate = sheet.getRange("D12:D12").getOffsetRange(i, 0);
          var SymEndDate = sheet.getRange("E12:E12").getOffsetRange(i, 0);

我想让它查看工作表中的特定列,而不是遍历行,而不是进行通用引用和偏移。

有没有一种方法可以在不写入整个 .getDataBodyRange 的情况下迭代更改列中的单个值

标签: javascriptexceloffice-js

解决方案


// Potential Solution for anyone looking for a workaround.       
let SymStartDateCol=  sheet.tables.getItem("ControlPanel").columns.getItem("Start Date").getHeaderRowRange().load(["address"]); 
   //SymStartDateCol.load(["values", "columns", "items", "address"])
let SymEndDateCol=  sheet.tables.getItem("ControlPanel").columns.getItem("End Date").getHeaderRowRange().load(["address"]);

return context.sync() .then(async (Symbol) => {

var SymStartDate = sheet.getRange(SymStartDateCol.address).getOffsetRange(i+1, 0);
var SymEndDate = sheet.getRange(SymEndDateCol.address).getOffsetRange(i+1, 0);

推荐阅读