You could upload a local XLS file using a pop-up prompt within your Google Sheet.
Make sure you assign the script importExcel to a button or a menu option.
Here is a working script:
function importExcel(e) {
if (!e) {
SpreadsheetApp.getUi().showModalDialog(HtmlService.createHtmlOutputFromFile("uploadExcelpopup"), "Upload PIMMS Excel file");
return;
}
var file = Utilities.newBlob(...e);
let config = {
title: "[Temporary Google Sheet] " + file.getName(),
mimeType: MimeType.GOOGLE_SHEETS
};
let tempSs = Drive.Files.insert(config, file);
var
fileId = tempSs.id,
source = SpreadsheetApp.openById(fileId),
sourceSheet = source.getSheets()[0];
SpreadsheetApp.getActive().toast('Extracting data','🔄 File uploaded',10);
var
sourceValues = sourceSheet.getRange(1,1,sourceSheet.getLastRow(),sourceSheet.getLastColumn()).getValues(),
sheetDataset = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dataset");
sheetDataset.getRange(1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
DriveApp.getFileById(fileId).setTrashed(true);
SpreadsheetApp.getActive().toast('', '✔️ Upload complete',10);
}
You will also need to create an HTML file:
<form>
<input type="file" name="file" onchange="importExcel(this.parentNode)" accept=".xls,.xlsx,.xlsm" id="inputFile" >
<font face = "Calibri" size = "3"> <br><div id="progress">⏳ Waiting</div></font>
</form>
<script>
function importExcel(e) {
const div = document.getElementById("progress");
div.innerHTML = "🔄 Uploading";
const file = e.file.files[0];
const f = new FileReader();
f.onload = d => google.script.run.withSuccessHandler(_ => {
div.innerHTML = "✔️ Done";
setTimeout(google.script.host.close, 1000);
}).importExcel([[...new Int8Array(d.target.result)], file.type, file.name]);
f.readAsArrayBuffer(file);
}
</script>
This is based on Tanaike's CSV local input pop-up suggestion:
Google Sheets Import CSV popup
When you say Languages, are you referring to Python, Node.JS, VBA etc?, it's yes.