Настраиваемая рамка для таблицы документов Google с помощью скрипта Google Apps - PullRequest
2 голосов
/ 17 апреля 2020

Я очень новичок в скрипте приложения Google. Я прочитал документацию и уже могу кое-что сделать, но столкнулся с некоторыми трудностями при решении проблемы. Я использую документы, и мне нужно выделить текст в своем документе и поместить его в таблицу. Эта таблица имеет только одну строку и два столбца. Выделенный текст должен находиться во второй ячейке строки, а позже мне нужно удалить выделенный текст и оставить только таблицу с текстом. Часть выбора текста для размещения его на столе, я уже могу это сделать, теперь мне трудно работать с макетом таблицы, особенно в том, что связано с частью границ таблицы. См. Изображение ниже.

Image custom table

Моя таблица должна иметь только видимую центральную границу и выделенную красным цветом, остальные границы должны быть скрыты. Я не нашел в документах документов ничего, связанного с манипулированием границами в отдельности, а только в целом для всей таблицы. Приведенный ниже код выполняет большую часть работы, но преимущество в стиле, которого я хочу, пока нет.

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);
  }
}

1 Ответ

3 голосов
/ 17 апреля 2020
  • Вы хотите назначить вертикальную границу только центру таблицы, которая имеет 1 строку и 2 столбца.
    • Например, стиль границы составляет 3 точки по ширине и красный цвет.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Проблема и обходное решение:

К сожалению, похоже, что нет способов присвоить границу только центру таблицы, используя Служба документов . Поэтому в этом ответе в качестве обходного пути я хотел бы предложить использовать Google Docs API. При использовании метода batchUpdate API Docs ваша цель может быть достигнута.

В этом ответе после вставки таблицы с использованием вашего сценария начальный индекс вставленной таблицы извлекается методом get API Docs, затем стиль ячейки таблицы изменяется с помощью метода batchUpdate API Docs.

Модифицированный скрипт:

Когда ваш скрипт изменяется, пожалуйста, измените его следующим образом. Перед запуском сценария включите API Документов Google в расширенных службах Google.

От:

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);

Ссылки:

...