Я использую скрипт 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);
}
Вы можете изменить второй скрипт, чтобы удалить старый файл, который был создан, чтобы остановить его 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), чтобы проверить, находится ли файл с таким же именем уже в папке. Если есть, он удалит файл и создаст новый, а если его нет, он создаст файл.
Если у вас возникнут вопросы, дайте мне знать, и я буду рад помочь, чем смогу!
Это работает для меня, спасибо!
Я должен извиниться за мое плохое знание английского языка. К сожалению, я не могу понять
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
. Могу ли я спросить вас о деталях? Во-первых, мне хотелось бы правильно понять Ваш вопрос.