3

我对谷歌的应用脚本很陌生。我已经阅读了文档并且我已经可以做一些事情,但是我在解决问题时遇到了一些困难。我正在使用文档,我需要在文档中选择文本并将其放在表格中。该表只有一行两列。选定的文本必须在该行的第二个单元格中,稍后,我需要删除选定的文本并只留下带有文本的表格。选择文本以将其放置在表格上的部分,我已经可以做到,现在我发现很难使用表格布局,特别是与表格边框部分相关的部分。见下图。

图片自定义表格

我的表格只需要使中央边框可见并且为红色,其他边框必须隐藏。我没有在文档的文档中找到与单独操作边框无关的内容,而仅针对整个表格。下面的代码做了很多工作,但我想要的风格的边缘还没有。

function myFunction() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var selection = doc.getSelection();
  var ui = DocumentApp.getUi();
  var text = body.editAsText();
  var report = "";
  //----------------------------------------------------------------------------------------------------------\\
  
  if (!selection) {
    report += " Nenhuma seleção atual ";
    ui.alert( report );
  }
  else{
    var elements = selection.getSelectedElements();
    var element = elements[0].getElement();
    var selectedText = element.asText().getText();
    
    var styleCell1 = {};
    styleCell1[DocumentApp.Attribute.FONT_SIZE] = 20;
    styleCell1[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.CENTER;
    styleCell1[DocumentApp.Attribute.FOREGROUND_COLOR]='#888888';
    styleCell1[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    
    var styleCell = {};
    styleCell[DocumentApp.Attribute.FONT_SIZE] = 18;
    styleCell1[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
    styleCell[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING1;
    styleCell[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    
    var cells = [
      ['', '']
    ];
    
    //body.insertParagraph(0, doc.getName()).setHeading(DocumentApp.ParagraphHeading.HEADING1);
    table = body.appendTable(cells);

    table.getRow(0).editAsText().setBold(true);
    table.getRow(0).getCell(1).setText(selectedText);
    table.getRow(0).getCell(1).setAttributes(styleCell);
    table.getRow(0).getCell(0).setWidth(59);
    table.getRow(0).getCell(0).setAttributes(styleCell1);
    table.setBorderColor('#ffffff');
    table.setBorderWidth(3);
  }
}

4

1 回答 1

4
  • 您只想为具有 1 行和 2 列的表格的中心提供垂直边框。
    • 例如,边框样式是宽度为 3 点,颜色为红色。
  • 您想使用 Google Apps 脚本实现此目的。

问题和解决方法:

不幸的是,似乎没有任何方法可以使用Document service将边框仅提供给表格的中心。所以在这个答案中,作为一种解决方法,我想建议使用 Google Docs API。当 Docs API 的 batchUpdate 方法时,你的目的就可以实现了。

在这个答案中,使用脚本插入表格后,通过Docs API的get方法检索插入表格的起始索引,然后通过Docs API的batchUpdate方法修改表格单元格样式。

修改后的脚本:

当您的脚本被修改时,请进行如下修改。在运行脚本之前,请在 Advanced Google services 中启用 Google Docs API。

从:

table.setBorderWidth(3);

到:

const index = body.getChildIndex(table);
const documentId = doc.getId();
doc.saveAndClose();
const tableStart = Docs.Documents.get(documentId).body.content[index + 1].startIndex;
const tempStyle = {width: {magnitude :0, unit: "PT"}, dashStyle: "SOLID", color: {color: {rgbColor: {blue: 0}}}};
const resource = {requests: [
  {updateTableCellStyle: {
    tableStartLocation: {index: tableStart},
    tableCellStyle: {borderTop: tempStyle, borderBottom: tempStyle, borderLeft: tempStyle, borderRight: tempStyle},
    fields: "borderTop,borderBottom,borderLeft,borderRight"
  }},
  {updateTableCellStyle: {
    tableRange: {
      tableCellLocation: {tableStartLocation: {index: tableStart}, rowIndex: 0, columnIndex: 0}, rowSpan: 1, columnSpan: 1},
      tableCellStyle: {
        borderRight: {dashStyle: "SOLID", width: {magnitude: 3, unit: "PT"}, color: {color: {rgbColor: {red: 1}}}}
      },
      fields: "borderRight"
  }}
]};
Docs.Documents.batchUpdate(resource, documentId);

参考:

于 2020-04-17T05:52:41.497 回答