В настоящее время у меня есть код (кричите @Jescanellas для создания кода), который идентифицирует уникальные значения в определенном столбце (столбец D), создает новую электронную таблицу в листах Google и помещает заголовок таблицы и данные, относящиеся кзначение на отдельном листе в новой электронной таблице. Заголовки таблицы указаны ниже:
Ticket Number | Issue | Description | StatusInternal | StatusVendor | Priority | Created Date | Internal Owner | Vendor Owner | Resolution | Target Resolution Date | Comments | ClosedDate
Однако, во-первых, код не сохраняет формат таблицы, такой как границы, шрифт, выравнивание, цвет строки заголовка и т. Д., ВДругими словами, это в виде простого текста. Поэтому я хотел бы узнать о возможностях сохранения формата и о том, как изменить код для его достижения.
Во-вторых, я хотел бы сохранить новый документ, созданный кодом, в определенном месте на диске Google вместе ссоглашение об именах "DocumentName_Date"
, и я не уверен, как этого добиться.
Обновленный код ниже
function createSpreadsheets() {
var StatusInternal = ["Open","Hold","Future","Closed"];
//Create the new file
var newSprsheet = SpreadsheetApp.create("Status Internal");
for (var i = 0; i < StatusInternal.length; i++){
//Create the new Sheets with the Status Internal names
newSprsheet.insertSheet(StatusInternal[i]);
}
//Activates the first sheet (Sheet1), to delete it, as it is not necessary
newSprsheet.getSheets()[0].activate();
newSprsheet.deleteActiveSheet();
splitData(newSprsheet, StatusInternal);
}
function splitData(newSprsheet, StatusInternal){
var mainSprsheet = SpreadsheetApp.openById("DocID");
var mainSheet = mainSprsheet.getSheetByName("MasterTracker");
//Gets the values of the first row
var headcolumns = mainSheet.getRange("A1:M1").getValues();
//Gets the values of the Status Internal Column
var StatusValues = mainSheet.getRange("D2:D").getValues();
var lastRow = mainSheet.getLastRow();
for (var i = 0; i < 4; i++){
//Copies the first row values to each new Sheet
newSprsheet.getSheets()[i].appendRow(headcolumns[0]);
}
for (var i = 2; i <= lastRow; i++){
//Gets all the values of the row
var rowContents = mainSheet.getRange("A"+i+":M"+i).getValues();
//Appends a new row to the Sheet depending of the value in Column C.
switch(StatusValues[i-2].toString()){
case StatusInternal[0]:
newSprsheet.getSheetByName(StatusInternal[0]).appendRow(rowContents[0]);
break;
case StatusInternal[1]:
newSprsheet.getSheetByName(StatusInternal[1]).appendRow(rowContents[0]);
break;
case StatusInternal[2]:
newSprsheet.getSheetByName(StatusInternal[2]).appendRow(rowContents[0]);
break;
case StatusInternal[3]:
newSprsheet.getSheetByName(StatusInternal[3]).appendRow(rowContents[0]);
break;
}
var newAllsheets = newSprsheet.getSheets();
for (var s in newAllsheets)
{
var sheet = newAllsheets[s];
sheet.setColumnWidth(2, 275);
sheet.setColumnWidth(3, 275);
sheet.setColumnWidth(10, 275);
sheet.setColumnWidth(12, 275);
sheet.getRange('A1:M1').activate();
sheet.getActiveRangeList().setBackground('ACCENT6')
.setFontColor('white');
sheet.getRange('A:M').activate();
sheet.getActiveRangeList().setWrapStrategy(SpreadsheetApp.WrapStrategy.WRAP)
.setVerticalAlignment('middle')
.setHorizontalAlignment('left')
.setFontFamily('Roboto')
.setFontSize(10)
.setBorder(true, true, true, true, true, true, '#b7b7b7', SpreadsheetApp.BorderStyle.SOLID);
}
}
}
Я нашел свойства, которые необходимо применитьна новые листы и модифицированный код. Хорошей новостью является то, что формат правильно применяется ко всем вкладкам. Однако выполнение выполнялось более 8 минут, и я вижу это сообщение
Выполнения, которые имеют неизвестный статус, означают, что Apps Script не смог определить результат выполнения. Возможно, что выполнение было либо успешным, либо неудачным.
Любая помощь в выявлении причины ошибки и повышении эффективности кода будет принята с благодарностью.
Заранее спасибо
-Al