【发布时间】:2019-06-19 23:31:39
【问题描述】:
我有一个带有两张表的 Google 电子表格模板,Data Entry 和 Data Validation。 Data Validation 工作表有许多列,这些列具有与Data Entry 工作表上的匹配列匹配的有效值。一切都按预期工作。我需要将这两张纸复制到Sheet Under Test (SUT)。我正在使用工作表 API 来复制两张工作表。我先复制Data Validation 表,然后复制Data Entry 表。这是代码,这似乎有效。
const request = {
spreadsheetId :fromSpreadsheetId,
sheetId : fromSheetId,
resource:{
destinationSpreadsheetId: toSpreadsheetId,
},
}
const result = await _sheetService.spreadsheets.sheets.copyTo(request)
在我的 SUT 上,两个工作表都出现了,Data entry 工作表包含所有预期的下拉菜单,并且它们都有正确的值。看起来很完美。问题是当您从它选择的任何列中的任何下拉列表中选择一个项目并输入正确的值,然后添加一个红色三角形和输入无效值的消息时。如果该列具有拒绝设置,则删除该值并显示错误对话框。
图片显示了两个单元格,我已经从下拉列表中选择了Video Course。
如果我进入并重新选择我想要验证的列,请使用Data→DataValidation… 并单击该列开始工作的Save 按钮,因此看起来一切都正确,但工作表不这么认为。是否有任何编程方式来强制执行我手动执行的上述过程?我还需要在 sheets.copyTo 方法中做些什么才能使其正常工作吗?
编辑
这个项目是用 Node.js 编写的,结合了 TypeScript 和 JavaScript。可以在this github file 中找到与 Sheets API 对话和在电子表格之间复制工作表的较低级别代码。方法是copySheetFromTo,它在文件的底部。
具有公共查看权限的sample source sheet
具有公共编辑权限的sample destination sheet
使用上述两个文件复制工作表的integration test位于文件底部,名称开头有“DEBUGGING TEST”(从第209行开始)
【问题讨论】:
-
为了提出一个示例脚本,我可以问一下您使用的语言吗?我认为您可能会将 googleapis 与 Node.js 一起使用。如果我误解了您的情况,我深表歉意。并且如果您可以提供一个示例电子表格,这将有助于考虑实际情况的解决方案。当然,届时请删除您的个人信息。
-
我将 node.js 与 TypeScript 和 JavaScript 结合使用。我将构建一个我可以共享的电子表格,并验证它是否以同样的方式失败。与此同时,我能够通过在每个验证规则中将所有验证列表键入为逗号分隔的字符串列表而不使用
Data Validation选项卡来解决此问题。不适合未来的维护,但它可以工作。 -
@Tanaike 我添加了一个 EDIT 部分并放置了指向工作表、代码和测试的链接。
-
感谢您的回复和补充信息。我以为我能理解你的问题。所以我提出了一个解决方法作为答案。你能确认一下吗?在我的环境中,我可以确认修改后的脚本有效并且您的问题已被删除。但如果这在您的环境中不起作用,我深表歉意。
标签: node.js google-sheets google-sheets-api