⭐app.makeTable()
GAS ⟩ app ⟩ members ⟩ .makeTable()
⬆️ 需要:app.range.prototype, app.color
// 🔸 app.makeTable
app.makeTable = function(sheetName, data, {
// internal parameters for `app.makeTable` function
sheet = app.sheetByName(sheetName),
rows = data.length,
cols = data[0].length,
dataRange = sheet.range(1,1,rows, cols),
// ⭐ 欄位寬度:(dataRange) => [[startCol, numCols, width]]
columnWidths,
// ⭐ subranges in dataRange
ranges = {
border, // 粗框線:(dataRange) => [Range]
gridlines, // 細格線:(dataRange) => [Range]
// ⭐ 儲存格格式:(dataRange) => [{format: '0.0', ranges: [Range]}]
numberFormat,
alignCenter, // 置中 :(dataRange) => [Range]
gray, // 灰色:(dataRange) => [Range]
lightBlue, // 淡藍:(dataRange) => [Range]
lightGreen, // 淡綠:(dataRange) => [Range]
bold, // 粗體:(dataRange) => [Range]
mergeAcross, // 水平合併:(dataRange) => [Range]
// conditional formats
scores, // 分數區:不及格者淡紅 (dataRange) => [Range]
top3, // 班排前三:淡藍 (dataRange) => [Range]
top30, // 校排前三十:淡綠(dataRange) => [Range]
},
}={ranges: {}}){
// ----------------------- set values into sheet -----------------------
sheet.clear();
sheet.setValues(data);
// ----------------------- format tables -----------------------
// ┌───┐
// │ 畫線 │
// └───┘
// grid lines first
if (ranges.gridlines) {
ranges.gridlines(dataRange).forEach(range =>
range.setBorder(true, true, true, true, true, true)
)
}
// border last
if (ranges.border) {
ranges.border(dataRange).forEach(range =>
range
.setBorder(true, true, true, true, null, null, 'black', SpreadsheetApp.BorderStyle.SOLID_MEDIUM)
)
}
// ┌─────┐
// │ 數字格式 │
// └─────┘
if (ranges.numberFormat) {
ranges.numberFormat(dataRange).forEach(({format, ranges}) =>
ranges.forEach(range => range.setNumberFormat(format))
)
}
// ┌───┐
// │ 對齊 │
// └───┘
if (ranges.alignCenter) {
ranges.alignCenter(dataRange).forEach(range =>
range.alignCenter()
)
}
// ┌─────┐
// │ 水平合併 │
// └─────┘
if (ranges.mergeAcross) {
ranges.mergeAcross(dataRange).forEach(rng => rng.mergeAcross())
}
// ┌───┐
// │ 粗體 │
// └───┘
if (ranges.bold) {
ranges.bold(dataRange).forEach(rng => rng.setFontWeight('bold'))
}
// dataRange.nthRow(1) // 標題
// .setFontSize(14)
// ┌────┐
// │ 背景色 │
// └────┘
if (ranges.gray) {
ranges.gray(dataRange).forEach(range =>
range.setBackground(app.color.gray)
)
}
if (ranges.lightBlue) {
ranges.lightBlue(dataRange).forEach(range =>
range.setBackground(app.color.lightBlue)
)
}
if (ranges.lightGreen) {
ranges.lightGreen(dataRange).forEach(range =>
range.setBackground(app.color.lightGreen)
)
}
// ┌─────┐
// │ 欄位寬度 │
// └─────┘
if (columnWidths) {
columnWidths(dataRange).forEach(([start, cols, width]) =>
sheet.setColumnWidths(start, cols, width)
)
}
// ┌─────┐
// │ 條件格式 │
// └─────┘
if (ranges.scores) {
sheet.appendConditionalFormatRule(app.rules.redIfLessThan60(ranges.scores(dataRange)))
}
if (ranges.top3) {
sheet.appendConditionalFormatRule(app.rules.blueIfTop3(ranges.top3(dataRange)))
}
if (ranges.top30) {
sheet.appendConditionalFormatRule(app.rules.greenIfTop30(ranges.top30(dataRange)))
}
};Last updated
Was this helpful?