使用Node.js的googleapis向Google Sheets插入日期时自动添加撇号的问题
解决Google Sheets追加行时日期被识别为字符串的问题
你遇到的这个日期被加撇号转为字符串的问题,核心原因在于你使用了valueInputOption: 'RAW'的配置,再加上传入的是格式化后的日期字符串,导致Google Sheets把它当成普通文本处理了。下面是具体的分析和解决方案:
问题根源
当valueInputOption设为'RAW'时,Google Sheets会原封不动地插入所有传入值,不会做任何格式解析。你通过toISOString()处理后得到的'2019-09-19 14:16:10'虽然看起来是日期,但本质是字符串,Sheets为了避免误解析,会自动给它加上撇号标记为纯文本,自然就没法按日期排序了。
最优解决方案:修改输入选项为USER_ENTERED
把buildAppendOptions和buildUpdateOptions里的valueInputOption改成'USER_ENTERED',这样Sheets会像用户手动输入内容一样,自动识别并解析日期格式:
buildAppendOptions(sheet, data) { return { spreadsheetId: process.env.GOOGLE_SPREADSHEET_ID, range: sheet, valueInputOption: 'USER_ENTERED', // 替换原有的'RAW' insertDataOption: 'INSERT_ROWS', resource: { values: data } } } buildUpdateOptions(sheet, data) { return { spreadsheetId: process.env.GOOGLE_SPREADSHEET_ID, range: sheet, valueInputOption: 'USER_ENTERED', // 替换原有的'RAW' resource: { values: data } } }
额外优化:直接传入Date对象(可选)
如果想更稳妥,也可以跳过字符串格式化步骤,直接传入原生的Date对象,Sheets在USER_ENTERED模式下同样能正确识别并转换为日期类型:
// 替换原有的日期生成代码 const date = new Date(); const statistics = [[ 9999, 1, 0, 0, 1, 0, date ]];
小细节修正
另外注意你的调用代码里有个拼写错误:new GoogleSpreadSheet()应该是new GoogleSpreadsheet()(类名的S是小写),这个小问题也要修正避免运行报错。
修改完成后重新执行脚本,你会发现日期单元格不再带撇号,Sheets会自动将其标记为日期时间类型,后续的排序、筛选等操作就能正常工作了。
内容的提问来源于stack exchange,提问作者robtot
相关产品推荐
相关产品推荐

