Skip to content

Commit

Permalink
Allow tuples of different lengths in getRange, apply minor renaming
Browse files Browse the repository at this point in the history
Change-type: patch
Signed-off-by: AlidaOdendaal <[email protected]>
  • Loading branch information
AlidaOdendaal committed Dec 1, 2021
1 parent 718645b commit 3c13547
Showing 1 changed file with 29 additions and 21 deletions.
50 changes: 29 additions & 21 deletions lib/spreadsheet.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
type RangeTuple =
| [number, number]
| [number, number, number]
| [number, number, number, number];

export function clearSheet(
sheet: GoogleAppsScript.Spreadsheet.Sheet,
startingRow: number = 1,
Expand Down Expand Up @@ -88,40 +93,43 @@ export function readSheet(
sheetName: string,
{
range,
spreadSheet,
ss,
}: {
range?: string | [number, number, number, number];
spreadSheet?: GoogleAppsScript.Spreadsheet.Spreadsheet;
range?: string | RangeTuple;
ss?: GoogleAppsScript.Spreadsheet.Spreadsheet;
} = {},
): any[][] {
) {
// If no spreadsheet provided, read the currently active spreadsheet:
if (!spreadSheet) {
spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
if (!ss) {
ss = SpreadsheetApp.getActiveSpreadsheet();
}
const spreadSheetName = spreadSheet.getName();
const sheet = spreadSheet.getSheetByName(sheetName);
const ssName = ss.getName();
const sheet = ss.getSheetByName(sheetName);

// Check for existence of sheet in spreadsheet:
if (!sheet) {
throw new Error(
`Sheet "${sheetName}" does not exist in spreadsheet "${spreadSheetName}"!`,
`Sheet "${sheetName}" does not exist in spreadsheet "${ssName}"!`,
);
}

// If no range provided, default to the full data-containing range in the sheet:
// Read data from sheet (if no range provided, default to the full data-containing range in the sheet):
let rangeValues: any[][] = []
if (!range) {
range = [1, 1, sheet.getLastRow(), sheet.getLastColumn()];
}

// Read data from sheet:
let rangeData: any[][];
if (typeof range === 'string') {
rangeData = sheet.getRange(range).getValues();
rangeValues = sheet.getDataRange().getValues();
} else {
rangeData = sheet.getRange(...range).getValues();
// The extended if-else blocks below constitute a workaround for this issue: https://github.com/microsoft/TypeScript/issues/14107
if (typeof range === 'string') {
rangeValues = sheet.getRange(range).getValues();
} else if (range.length === 2) {
rangeValues = sheet.getRange(...range).getValues();
} else if (range.length === 3) {
rangeValues = sheet.getRange(...range).getValues();
} else if (range.length === 4) {
rangeValues = sheet.getRange(...range).getValues();
}
}
console.log(
`Successfully read contents of sheet "${sheetName}" in spreadsheet "${spreadSheetName}".`,
`Successfully read contents of sheet "${sheetName}" in spreadsheet "${ssName}".`,
);
return rangeData;
return rangeValues;
}

0 comments on commit 3c13547

Please sign in to comment.