RangecopyFormat (только) из одной таблицы в другую с помощью скрипта Google - PullRequest
0 голосов
/ 22 октября 2018

Я искал дни, чтобы выполнить это без успеха.У меня есть несколько пользователей с разными электронными таблицами, которые выглядят одинаково, но имеют разные идентификаторы и безопасность.Если я изменю формат в своем базовом листе, мне нужно будет извлечь новые форматы оттуда и распространить среди всех листов пользователей, чтобы я был непротиворечивым по всем направлениям.

* Не хочу копировать значения * Не делайтехотите скопировать лист на «Скопированный лист», а затем удалить и переименовать лист

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Возможное решение:

Вы можете использовать API Sheets для получения формата из одной электронной таблицы и обновления другой электронной таблицы.

Поток:

  • Используйте Spreadsheets.get для получения исходного формата
  • Используйте updateCells запрос batchUpdate для обновления другой электронной таблицы с исходным форматом

Пример сценария:

function copyFormatFromSpreadsheetToSpreadsheet() {
  var sourceSsId = SpreadsheetApp.getActiveSpreadsheet().getId(),
    destSsId = '##destSpreadsheetIdHere##',
    sourceRng = 'Sheet1!A1:B4',
    destRng = {
      //Must be of same dimensions as sourceRng
      //Represents Sheet1!B1:C4
      sheetId: 123456789, //use 9 digit GridId
      startRowIndex: 0,
      endRowIndex: 4, //end exclusive
      startColumnIndex: 1,
      endColumnIndex: 3,
    };

  /*Get Format of Source Spreadsheet*/
  var rowData = Sheets.Spreadsheets.get(sourceSsId, {
    ranges: sourceRng,
    fields: 'sheets.data.rowData.values.userEnteredFormat',
  }).sheets[0].data[0].rowData;

  /*Copy Format to Destination Spreadsheet*/
  var request = {
    requests: [
      {
        updateCells: {
          rows: rowData,
          fields: 'userEnteredFormat',
          range: destRng,
        },
      },
    ],
  };
  Sheets.Spreadsheets.batchUpdate(request, destSsId);
}

Ссылки:

0 голосов
/ 25 февраля 2019

используйте getBackgrounds() и setBackgrounds() объекта Range, чтобы сначала скопировать фон ячейки, а затем установить необходимый диапазон в любой электронной таблице.Аналогичным образом используйте getFontColors() и setFontColors() для изменения цвета шрифта.Вы найдете эти и другие подобные функции на этой странице.https://developers.google.com/apps-script/reference/spreadsheet/range#setfontsizesize

0 голосов
/ 22 октября 2018

Пример с " copyFormatToRange ":

var config = {
  // range to modify
  range: "A1:C3",
  // list of spreadsheets/sheets to modify
  spreadSheets: [
    {
      // from spreadsheets url https://docs.google.com/spreadsheets/d/XXX/edit#gid=YYY
      spreadSheetId: 'XXX',
      sheetId: YYY // always "0" at the creation of the first (spread)sheet
    }
  ]
};

// update spreadsheets
function updateSpreadSheets() {
  for (var i = 0, j = config.spreadSheets.length; i < j; i++) {

    // get the spreadsheet to modify
    var spreadsheet = SpreadsheetApp.openById(config.spreadSheets[i].spreadSheetId);
    // get the sheet to modify
    var sheet = spreadsheet.getSheets().filter(function(s) { return s.getSheetId() === config.spreadSheets[i].sheetId; })[0];

    // copy from the original sheet into the spreadsheet to modify
    SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().copyTo(spreadsheet);

    // get the new tmp sheet
    var sheetTmp = spreadsheet.getSheets()[spreadsheet.getNumSheets()-1];
    // get the range from the tmp sheet
    var sheetTmpRange = sheetTmp.getRange(config.range);

    // copy the format from the tmp sheet to the sheet to modify
    sheetTmpRange.copyFormatToRange(sheet, 1, 1, 1, 1);

    // remove the tmp sheet
    spreadsheet.deleteSheet(sheetTmp);
  }
}

Плюс, если вам нужны эти функции для получения идентификаторов:

// get spreadsheet id
function getSpreadSheetId() {
 Logger.log(SpreadsheetApp.getActiveSpreadsheet().getId());
}

// get spreadsheet sheet id
function getSheetId() {
  Logger.log(SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetId());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...