Запись в ячейку файла XLSX с помощью скрипта Sheets

Я использую скрипт Google Sheets и хотел бы записать данные в XLSX, но сохранить формат файла XLSX, чтобы другие приложения могли его прочитать. Я пробовал следующее, но безуспешно. Когда я открываю файл с помощью Таблиц, все выглядит хорошо, но файл больше не работает в Excel или других приложениях, читающих файлы Excel.

function LabelOutput(){
  var select1;
  var selectCount;
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var activeRange = activeSheet.getActiveRange();
  var select1 = activeRange.getRow();
  var selectCount = activeRange.getNumRows();
  var TL = "TL";
  var Loc = "Location";
  var Shape = "Shape";
  var shpColor = "Color";
  var prgName = "Program";
  var Notes = "Notes";
  var outputData = TL + ", " + Loc+ ", " + Shape+ ", " + shpColor + ", " + prgName + ", " + Notes;

  var i;
  var j = selectCount + select1 - 1;

  for (i = select1; i <= j; i = i + 1) {                                       //add selected data
    if (activeSheet.isRowHiddenByFilter(i) == false){
      TL = activeSheet.getRange('T' + i).getValue();
      Loc = activeSheet.getRange('U' + i).getValue();
      Shape = activeSheet.getRange('AN' + i).getValue();
      Shape = Shape.substring(0,1);
      if (Shape == ","){
        Shape = '","';
      }
      shpColor = activeSheet.getRange('AP' + i).getValue();
      prgName = activeSheet.getRange('AM' + i).getValue();
      Notes = activeSheet.getRange('E' + i).getValue();
      outputData += "\n" + TL + ", " + Loc+ ", " + Shape + ", " + shpColor + ", " + prgName + ", " + Notes;
    }
  }
  var excelFile = DriveApp.getFileById('1--S0-GLPwVqAj94vbPFxfzGrIT-WOGwz');
  excelFile.setContent(outputData);
}

Я также пытался обращаться с файлом XLSX как с SpreadSheetApp, но он выдает ошибку типа.

var testingOutput = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Label Print.XLSX');
testingOutput.getRange("A2").setValue("testing");

Я также пытался сделать что-то подобное, и это сработало, но он продолжает создавать новые копии, а не записывать поверх существующих. Экспортируйте Google Sheet на Google Диск в формате Excel с помощью Apps Script

function convertSheetToXLSX() {
  var sheetId = "2SqIXLiic6-gjI2KwQ6OIgb-erbl3xqzohRgE06bfj2c";
  var spreadsheetName = "My Spreadsheet";
  var destination = DriveApp.getFolderById("1vFL98cgKdMHLNLSc542pUt4FMRTthUvL");
  var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key = " + sheetId + "&exportFormat=xlsx";  
  var params = {
    method      : "get",
    headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true
  };
  var blob = UrlFetchApp.fetch(url, params).getBlob();
  blob.setName(spreadsheetName + ".xlsx");
  destination.createFile(blob);
}

Я должен извиниться за мое плохое знание английского языка. К сожалению, я не могу понять write data to a XLSX but preserve the XLSX file format so other applications can read it, а также не могу понять связь между вашим сценарием показа и write data to a XLSX but preserve the XLSX file format so other applications can read it. Могу ли я спросить вас о деталях? Во-первых, мне хотелось бы правильно понять Ваш вопрос.

Tanaike 12.07.2024 01:34
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ПРЕДПОЛОЖЕНИЕ

Вы можете изменить второй скрипт, чтобы удалить старый файл, который был создан, чтобы остановить его making new copies в папке Google Диска и чтобы он выглядел так, как будто вы writing over existing copies.

Вы можете добиться этого, добавив к нему следующее:

  var getFile = destination.getFilesByName(`${spreadsheetName}.xlsx`);
  var file = getFile.hasNext() ? getFile.next() : null;
  file ? file.setTrashed(true) : null;

Полный код будет выглядеть так:

function convertSheetToXLSX() {
  var sheetId = "2SqIXLiic6-gjI2KwQ6OIgb-erbl3xqzohRgE06bfj2c";
  var spreadsheetName = "My Spreadsheet";
  var destination = DriveApp.getFolderById("1vFL98cgKdMHLNLSc542pUt4FMRTthUvL");
  var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key = " + sheetId + "&exportFormat=xlsx";
  var params = {
    method: "get",
    headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
    muteHttpExceptions: true
  };
  var blob = UrlFetchApp.fetch(url, params).getBlob();
  var getFile = destination.getFilesByName(`${spreadsheetName}.xlsx`);
  var file = getFile.hasNext() ? getFile.next() : null;
  file ? file.setTrashed(true) : null;
  blob.setName(spreadsheetName + ".xlsx");
  destination.createFile(blob);
}

При этом используется getFilesByName(name), чтобы проверить, находится ли файл с таким же именем уже в папке. Если есть, он удалит файл и создаст новый, а если его нет, он создаст файл.

Если у вас возникнут вопросы, дайте мне знать, и я буду рад помочь, чем смогу!

Saddles 12.07.2024 05:08

Это работает для меня, спасибо!

MGrambihler 12.07.2024 20:22

Другие вопросы по теме

Похожие вопросы

Напишите цикл, который будет проверять все вкладки, количество листов, изменение цвета вкладок на основе значений трех ячеек
Как найти результат в соседней ячейке, если в ней используются буквы, форматирование и цифры?
Копирование ячеек без определенного текста в макросе Excel
Суммируйте все ячейки, для которых соответствующая ячейка не является формулой и не возвращает #ЗНАЧЕНИЕ И дата произошла в прошлом
Сопоставление нескольких числовых строк и проверка соответствующих дат в течение 90 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки и сопоставляйте с ними соответствующие данные с помощью фиксированных и гибких return_arrays
Цикл VBA для извлечения сводки электронных писем за последние 30 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки, а затем сопоставляйте с ними соответствующие данные с помощью нескольких гибких return_arrays
Какой лучший способ репликации суммифов, кроме создания формулы массива?
Как использовать логические операторы с динамическими массивами?