有没有一种方法可以测试单元格是否包含任何可见格式?

时间:2020-10-30 02:23:02

标签: google-apps-script google-sheets

因此我建立了一个函数,该函数将根据提供的列字母返回下一个没有数据的可用行。在这种情况下,该列中的数据必须是连续的,因此,如果行中有间隙,那么我知道这将行不通。有一个名为Format的可选参数,如果将其设置为1,则将假定已格式化的单元格被视为已使用,并且不会将其接受为空。这就是我所拥有的

// @param {txt} SheetName   : The name of the sheet are testing on.
// @param {txt} Column      : The column letter that we are checking for a next row in
// @param {int} Format      : Optional Boolean Value, when testing for the next available row does a formatted cell count as a used cell IE the cell has a fill, has a border, 1 = yes, 0 = no (default)
// @returns {number}        : return the next available row number.
function getNextAvailableRowInColumn(SheetName, Column, Format = 0){

  var ColValues = ss.getRange(SheetName+'!'+Column+'1:'+Column).getValues(); // This should evaluate to .getRange("Invoices!A1:A");
  var NextAvailableRow = ColValues.filter(String).length +1; 
  // We add 1 so we get the next available row and not the last row with data
  
if (Format) {  
 while (THIS CELL HAS FORMATING) {
    NextAvailableRow +1;
 }
}
return NextAvailableRow;
  
}

因此,基于此功能,一切都很好,并且逻辑很合理。一旦找到下一个没有任何数据的可用行,但我们不知道它是否没有格式化(如果我们设置了位),那么我们就测试单元格,如果它具有可见的格式,则向下一行再次进行测试,然后继续逐行浏览,直到发现没有格式化的单元格为止。

问题是,如何测试“此单元格已格式化”?如何测试单元格是否对其进行了任何形式的可见格式设置,例如添加了边框,突出显示了边框?我不在乎诸如粗体,下划线或字体颜色设置之类的不可见格式。

1 个答案:

答案 0 :(得分:1)

您可以使用getRichTextValue方法中的运行来确定单元格是否具有格式。

function cellHasFormatting(address = "A1") {
  var cell = SpreadsheetApp.getActiveSheet().getRange(address);
  var runs = cell.getRichTextValue().getRuns();
  for (let r=0; r<runs.length; r++) {
    const style = runs[r].getTextStyle();
    if (style.isBold() || style.isItalic() || style.isUnderline()) {
      return true;
    }
  }
  return false;  
}