Headers 在 Google 中的脚本未正确显示
Headers in Google Script not Showing up Properly
我想要 运行 这个将信息从 AD 导入电子表格的脚本。但我也想在第一行添加 headers,但是当我 运行 这个脚本时它确实冻结了第一行,但不是添加 header 名称,它只是冻结第一人称姓名、电子邮件、phone、电子邮件等。有没有办法指定从第 2 行开始输出的主要功能?还是有更好的方法来格式化它以便 header 正确进入?
function writeToSpreadsheet(){
var values = [];
var users = AdminDirectory.Users.list({domain:'domain.com'}).users;
for (var i=0; i<users.length; i++){
values.push([users[i].name.fullName, getExternalID(users[i].externalIds || []), getPhones(users[i].phones || []),getDeviceName(users[i].organizations || []) ]);
createHeaders();
}
var spreadsheetUrl = 'docs.googlesheet.com';
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}
function getExternalID(arr) {
return arr.map(function(ExternalIDsObj) {
return ExternalIDsObj.value;
}).join(', ') + ('@email.com');
}
function getPhones(phones) {
return phones
.map(phone => {
const value = phone.value
const type = phone.type.replace('_', ' ')
return `${value} (${type})`
})
.join('\n');
}
function getDeviceName(arr) {
return arr.map(function(OrganizationsObj) {
return OrganizationsObj.costCenter;
}).join(', ') ; //Cost Center = Device
}
function createHeaders() {
var ss = SpreadsheetApp.openByUrl('https://docs.googlesheet.com');
var sheet = ss.getSheets()[0];
// Freezes first row
sheet.setFrozenRows(1);
// header values
var values = [
["NAME", "EMAIL", "PHONE NUMBER", "DEVICE"]
];
// Set the range of cells
var range = sheet.getRange("A1:D1");
// Call the setValues method on range and pass in our values
range.setValues(values);
}
Is there a way to specify the main function to output starting from
Row 2
在writeToSpreadsheet()
中:
变化:
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
至:
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(2, 1, values.length, values[0].length).setValues(values);
此外,绝对没有理由在 for
循环中多次执行 createHeaders
,因为您只需要设置并冻结 headers 一次。
writeToSpreadsheet
的完整代码:
function writeToSpreadsheet(){
var values = [];
var users = AdminDirectory.Users.list({domain:'domain.com'}).users;
for (var i=0; i<users.length; i++){
values.push([users[i].name.fullName, getExternalID(users[i].externalIds || []), getPhones(users[i].phones || []),getDeviceName(users[i].organizations || []) ]);
}
createHeaders(); // modified position
var spreadsheetUrl = 'docs.googlesheet.com';
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(2, 1, values.length, values[0].length).setValues(values); // modified code
}
我想要 运行 这个将信息从 AD 导入电子表格的脚本。但我也想在第一行添加 headers,但是当我 运行 这个脚本时它确实冻结了第一行,但不是添加 header 名称,它只是冻结第一人称姓名、电子邮件、phone、电子邮件等。有没有办法指定从第 2 行开始输出的主要功能?还是有更好的方法来格式化它以便 header 正确进入?
function writeToSpreadsheet(){
var values = [];
var users = AdminDirectory.Users.list({domain:'domain.com'}).users;
for (var i=0; i<users.length; i++){
values.push([users[i].name.fullName, getExternalID(users[i].externalIds || []), getPhones(users[i].phones || []),getDeviceName(users[i].organizations || []) ]);
createHeaders();
}
var spreadsheetUrl = 'docs.googlesheet.com';
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}
function getExternalID(arr) {
return arr.map(function(ExternalIDsObj) {
return ExternalIDsObj.value;
}).join(', ') + ('@email.com');
}
function getPhones(phones) {
return phones
.map(phone => {
const value = phone.value
const type = phone.type.replace('_', ' ')
return `${value} (${type})`
})
.join('\n');
}
function getDeviceName(arr) {
return arr.map(function(OrganizationsObj) {
return OrganizationsObj.costCenter;
}).join(', ') ; //Cost Center = Device
}
function createHeaders() {
var ss = SpreadsheetApp.openByUrl('https://docs.googlesheet.com');
var sheet = ss.getSheets()[0];
// Freezes first row
sheet.setFrozenRows(1);
// header values
var values = [
["NAME", "EMAIL", "PHONE NUMBER", "DEVICE"]
];
// Set the range of cells
var range = sheet.getRange("A1:D1");
// Call the setValues method on range and pass in our values
range.setValues(values);
}
Is there a way to specify the main function to output starting from Row 2
在writeToSpreadsheet()
中:
变化:
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
至:
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(2, 1, values.length, values[0].length).setValues(values);
此外,绝对没有理由在 for
循环中多次执行 createHeaders
,因为您只需要设置并冻结 headers 一次。
writeToSpreadsheet
的完整代码:
function writeToSpreadsheet(){
var values = [];
var users = AdminDirectory.Users.list({domain:'domain.com'}).users;
for (var i=0; i<users.length; i++){
values.push([users[i].name.fullName, getExternalID(users[i].externalIds || []), getPhones(users[i].phones || []),getDeviceName(users[i].organizations || []) ]);
}
createHeaders(); // modified position
var spreadsheetUrl = 'docs.googlesheet.com';
SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(2, 1, values.length, values[0].length).setValues(values); // modified code
}