Google Sheets编写脚本导入txt内容至A1单元格问题咨询
Google Sheets 导入WhatsApp TXT对话脚本实现方案
宏无法捕获文件上传操作的核心原因是,Google Sheets宏仅能录制可映射到Apps Script内置API的表格编辑操作,本地文件选择属于浏览器端独立交互,不在宏的可录制范围内,无法直接通过录制宏复用完整导入流程,可通过以下两种方案实现需求:
方案一:读取Google Drive存储的TXT文件导入(推荐,稳定性最高)
不需要依赖浏览器端文件选择交互,提前把待导入的WhatsApp TXT文件上传到当前表格绑定的Google Drive空间即可,步骤如下:
- 打开目标表格,点击顶部菜单栏「扩展程序」>「Apps Script」进入脚本编辑页面
- 清空默认的代码编辑区内容,粘贴以下代码,根据实际情况修改参数:
function importWhatsAppChatToA1() { // 替换为你上传到Google Drive的目标TXT文件ID,文件ID可从Drive里文件的分享链接中获取 const TXT_FILE_ID = "替换为你的TXT文件ID"; // 替换为要导入的目标工作表名称,默认是"工作表1" const TARGET_SHEET_NAME = "工作表1"; // 读取TXT文件内容,WhatsApp导出文件默认编码为UTF-8,若出现乱码可将参数改为"UTF-16" const chatContent = DriveApp.getFileById(TXT_FILE_ID).getBlob().getDataAsString("UTF-8"); // 获取目标工作表,清空原有内容 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(TARGET_SHEET_NAME); sheet.clearContents(); // 整段对话内容直接写入A1单元格,和手动粘贴到A1的效果完全一致 sheet.getRange("A1").setValue(chatContent); // 如果你需要按对话行拆分逐行写入A列,注释掉上面的setValue行,启用以下代码即可: // const chatLines = chatContent.split(/\r?\n/).filter(line => line.trim().length > 0); // sheet.getRange(1, 1, chatLines.length, 1).setValues(chatLines.map(line => [line])); }
- 点击脚本编辑器的保存按钮,按提示给脚本命名,首次运行时按照弹窗提示完成Google账号授权,需要允许脚本访问Google Drive和当前电子表格,否则脚本无法读取文件、写入表格内容。授权完成后运行
importWhatsAppChatToA1函数即可完成导入 - 后续需要更新导入内容时,只需要替换Drive中对应位置的TXT文件,重新运行脚本即可,也可以在表格界面插入绘图按钮绑定该脚本,实现点击按钮一键导入。
方案二:自定义本地文件上传入口
如果不想提前把文件上传到Google Drive,可以通过自定义侧边栏实现本地文件选择后直接导入:
- 在Apps Script编辑器中新建HTML文件,命名为
uploadSidebar,编写文件选择控件,监听文件选择事件后读取本地TXT内容,通过google.script.run把内容传给后端脚本 - 后端脚本接收到文本内容后,直接调用
sheet.getRange("A1").setValue(收到的内容)即可完成写入 - 编写菜单触发函数,打开表格时自动在菜单栏生成「导入WhatsApp对话」入口,点击后拉起侧边栏选择本地文件即可,交互逻辑和原生导入基本一致。
导入参数适配提示:手动导入时的编码、分隔符等设置都可以在脚本中对应调整,比如需要按时间、发言人拆分多列导入,只需要拿到文本内容后用
split()方法按对应规则拆分内容为二维数组,再调用setValues()批量写入即可,灵活度比原生导入更高。
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

