Перезаписать файл Google Sheets Script - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть скрипт Google Sheet API. Я хочу 1. Экспорт в CSV 2. Перезаписать существующий файл.

Я хочу перезаписать существующий файл в папке на диске. Прямо сейчас, это делает копии файла. Как я могу перезаписать?

function makeCopy() {

// generates the timestamp and stores in variable formattedDate as year-month-date hour-minute-second
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd' 'HH:mm:ss");

// gets the name of the original file and appends the word "copy" followed by the timestamp stored in formattedDate
var name = SpreadsheetApp.getActiveSpreadsheet().getName();


var destination = DriveApp.getFolderById("1JGHoshv6");

// gets the current Google Sheet file
var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())

// makes copy of "file" with "name" at the "destination"
file.makeCopy(name, destination);
}

1 Ответ

2 голосов
/ 14 апреля 2020

OK. Кажется, вам нужны данные pu sh CSV для текущего листа. Вы можете использовать Advanced Sheets Service

var CSV_FILE_ID = '1G9eI5bj_jYQz_a_mk4t5mmLJsgwOpP8q'; // Your CSV file or data
var SHEETID = '0';

/**
 * User action. Import the CSV file
 */
function userActionImportFromCSV() {
  var res = importFromCSV_(
    CSV_FILE_ID,
    SpreadsheetApp.getActive().getId(),
    SHEETID
  );
  Logger.log(res);
}

/**
 * Imports the CSV file to the Sheet
 * @param {string} csvId CSV file Id
 * @param {string} spreadsheetId  Spreadsheet Id
 * @param {string} sheetId Sheet Uid
 * @return {any}
 */
function importFromCSV_(csvId, spreadsheetId, sheetId) {
  // Get CSV data

  var data = DriveApp.getFileById(csvId)
    .getBlob()
    .getDataAsString();

  // Clear the Sheet
  var updateCellsRequest = Sheets.newUpdateCellsRequest();
  updateCellsRequest.fields = 'userEnteredValue';
  updateCellsRequest.range = { sheetId: sheetId };
  batchUpdateSpreadsheet_(
    {
      updateCells: updateCellsRequest,
    },
    spreadsheetId
  );

  // Paste the data
  var pasteDataRequest = Sheets.newPasteDataRequest();
  pasteDataRequest.coordinate = {
    sheetId: SHEETID,
    rowIndex: 0,
    columnIndex: 0,
  };
  pasteDataRequest.data = data;
  pasteDataRequest.type = SpreadsheetApp.CopyPasteType.PASTE_VALUES;
  pasteDataRequest.delimiter = ',';

  var batchUpdateSpreadsheetResponse = batchUpdateSpreadsheet_(
    {
      pasteData: pasteDataRequest,
    },
    spreadsheetId
  );
  return batchUpdateSpreadsheetResponse;
}

/**
 *
 * @param {object} request Request object
 * @param {string} spreadsheetId Spreadsheet Id
 * @return {object} BatchUpdateSpreadsheetResponse
 */
function batchUpdateSpreadsheet_(request, spreadsheetId) {
  var resource = {
    requests: [],
  };
  resource.requests.push(request);
  var batchUpdateSpreadsheetResponse = Sheets.Spreadsheets.batchUpdate(
    resource,
    spreadsheetId
  );
  return batchUpdateSpreadsheetResponse;
}

Если кому-то тоже нужен экспорт в CSV

Так что, если это действительно настоящий файл, вы можете

function overWriteFileSample() {
  const file = DriveApp.getFileById('ABCD1234'); // Your CSV file
  const content = new Date().toISOString();
  file.setContent(content);
}

Если это лист. Затем, прежде чем все, вы должны экспортировать файл в CSV. После этого вы можете setContent.

Для примера это прекрасно работает

function run(){
  exportToCSV_('ABCD1234', spreadsheetId, sheetId)
}


/**
 *
 * @param {string} csvId
 * @param {string} spreadsheetId
 * @param {string | number} sheetId
 */
function exportToCSV_(csvId, spreadsheetId, sheetId) {
  var url = Utilities.formatString(
    'https://docs.google.com/spreadsheets/export?id=%s&exportFormat=csv&gid=%s',
    spreadsheetId,
    sheetId
  );

  var data = UrlFetchApp.fetch(url, {
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
  }).getBlob();

  DriveApp.getFileById(csvId).setContent(data.getDataAsString());
}

На основе фрагмента sheet / export-import-to-csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...