Apps Script上传本地XLSX至Drive为空问题及导入Google Sheets方法
问题分析与解决方案
原脚本问题点
- 云端运行的Apps Script无法直接读取本地文件路径,你把本地路径字符串传给
DriveApp.createFile(),只会创建一个内容为路径文本的无效文件(并非真正的Excel数据)。 - 函数参数
filePath被内部重新赋值,完全没有用到传入的参数。
解决步骤
要实现本地Excel上传到Drive并导入到指定Google表格,需要通过用户交互上传文件,再处理数据导入:
1. 实现带上传界面的脚本
创建两个文件:一个GS脚本处理逻辑,一个HTML文件提供上传界面。
主脚本代码(.gs文件)
function uploadFileToDrive() { // 显示上传侧边栏 var html = HtmlService.createHtmlOutputFromFile('UploadSidebar') .setTitle('上传Excel文件'); SpreadsheetApp.getUi().showSidebar(html); } function saveFileToDrive(fileData, fileName) { var folderId = "10ULO2lE0yXaB9aR4nWmw2W3wJK9XjUcX"; // 替换为你的目标文件夹ID var folder = DriveApp.getFolderById(folderId); // 将上传的Base64数据转为Blob,保存到Drive var blob = Utilities.newBlob(Utilities.base64Decode(fileData), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', fileName); var driveFile = folder.createFile(blob); // 自动导入数据到指定表格 importExcelToSheet(driveFile.getId()); return fileName + " 上传成功,数据已导入目标表格"; }
上传界面代码(命名为UploadSidebar.html)
<!DOCTYPE html> <html> <head> <base target="_top"> <style> body {padding: 20px;} #fileInput {margin-bottom: 15px;} #uploadBtn {padding: 8px 16px; background: #4285F4; color: white; border: none; border-radius: 4px; cursor: pointer;} #status {margin-top: 15px; color: #2ECC71;} </style> </head> <body> <input type="file" id="fileInput" accept=".xlsx"> <button id="uploadBtn">上传并导入数据</button> <div id="status"></div> <script> document.getElementById('uploadBtn').addEventListener('click', function() { var fileInput = document.getElementById('fileInput'); var file = fileInput.files[0]; if (!file) { document.getElementById('status').textContent = "请先选择一个.xlsx文件"; return; } var reader = new FileReader(); reader.onload = function(e) { // 提取Base64格式的文件数据 var base64Data = e.target.result.split(',')[1]; google.script.run.withSuccessHandler(function(msg) { document.getElementById('status').textContent = msg; fileInput.value = ''; // 重置文件选择框 }).saveFileToDrive(base64Data, file.name); }; reader.readAsDataURL(file); }); </script> </body> </html>
2. 实现Excel数据导入到Google表格
在主脚本中添加以下函数,把上传的Excel数据导入到指定表格:
function importExcelToSheet(excelFileId) { var targetSheetId = "替换为你的目标Google表格ID"; // 改成要导入的表格ID var targetSheet = SpreadsheetApp.openById(targetSheetId).getSheetByName("Sheet1"); // 可指定具体工作表名称 // 获取Excel文件的Blob并转为临时表格 var excelBlob = DriveApp.getFileById(excelFileId).getBlob(); var tempSpreadsheet = SpreadsheetApp.open(excelBlob); var tempSheet = tempSpreadsheet.getActiveSheet(); // 读取Excel中的所有数据 var data = tempSheet.getDataRange().getValues(); // 清空目标表格现有内容(可选,根据需求决定是否保留旧数据) targetSheet.clearContents(); // 将数据写入目标表格 targetSheet.getRange(1, 1, data.length, data[0].length).setValues(data); // 删除临时表格(可选,清理冗余文件) DriveApp.getFileById(tempSpreadsheet.getId()).setTrashed(true); }
使用说明
- 打开你的Google表格,点击「扩展程序」→「Apps脚本」,粘贴上述GS代码。
- 在脚本编辑器中点击「文件」→「新建」→「HTML文件」,命名为
UploadSidebar,粘贴HTML代码。 - 保存脚本后,回到Google表格,刷新页面,运行
uploadFileToDrive函数打开侧边栏,即可选择本地Excel文件上传,上传完成后数据会自动导入到指定表格。
内容的提问来源于stack exchange,提问作者Guilherme FERREIRA
相关产品推荐
相关产品推荐

