在SQL Server 2017 Integration Services项目中,使用CozyRoc REST连接管理器,我尝试使用他们的JavaScript任务删除一个Google电子表格中的工作表,然后使用"CopyTo"将同名工作表从另一个电子表格复制到第一个电子表格中,然后重命名复制的工作表以删除"副本......"。 部分标题。
表 1 称为"公司信息"。 它有7张纸,其中一张称为"每日报告"。
表2称为"每日报告",其中只有一张称为"每日报告"的表。
总体任务只是从 SSIS 中自动执行使用"每日报告"电子表格中的"每日报告"表覆盖"公司信息"电子表格的"每日报告"表的过程。 这很简单,可以从Google表格手动完成,但需要通过SSIS实现自动化。
查看 API,这可能涉及从"公司信息"中删除原始的"每日报告"表,将"每日报告"电子表格中的每日报告表复制到"公司信息"电子表格中的新选项卡中,然后重命名该表以删除"副本"部分。 三个简单的 BatchUpdate 命令是我的猜测。 但是我到处看到的都是对单个工作表的复杂更新,而不是批量更新。
我已经联系了Cdata Software,但他们的SSIS GoogleSheet任务没有执行"Copyto"。这将使事情变得简单。
我拼命地试图从 CozyRoc 那里获得一些指导,但通常我被告知的是去查看工作表操作的 API 参考,并且我需要编写一个 Web 请求,我不知道该怎么做。
首先,我在谷歌上搜索了一段简单完整的示例JavaScript代码,该代码指定了Google电子表格ID,Google表格ID,然后从Web请求中删除了指定的工作表。我在任何地方找到的都是 API 参考中的小片段,这并不能帮助我编写完整的脚本。
需要明确的是,由于多种原因,我无法使用应用程序脚本直接从Google表格中执行此操作。
我完全明白这是错误的:
task.run = function () {
var connection
variables = this.variables;
var SheetID = 1145890987;
var SpreadsheetID = "1r0tsxZ_nKT7EGG5qU6_6JPJ3dLOsZfF8pmdfsdgfagdahjI"
if (this.parameters.RestConnection.value) {
connection = this.connections[this.parameters.RestConnection.value].acquire();
connection.connect();
}
else {
connection = new RestConnection();
}
{
"requests"; [
{
"deleteSheet": {
"sheetId": SheetID
}
}
]
}
每当我运行名为"更新每日报告"的 SSIS 项目时,我希望"公司信息"电子表格的"每日报告"表被"每日报告"电子表格的"每日报告"表覆盖。
如何解决此问题?
事实证明,这是一个相当漫长的过程。
我最终在SSIS中创建了三个基本的CozyRoc Javascript任务,引用API,每个任务只包含一个非常简单的短代码段。
使用"copyTo"将单个Google表格复制到较大的Google表格中的一个步骤。结果是较大的Google电子表格中的一张表格,名为"副本"。
第二步是从较大的Google电子表格中删除原始表格。
第三步,将较大电子表格中的新"副本"重命名为原始名称。
基本上,我遇到的问题只是 API 文档没有像样的真正简单、清晰的例子来说明这三个函数中的任何一个。
我知道如何为这三个函数构造 Body 和 URL 字符串,但在语法上遇到了很大的困难。 文档中不清楚在所有三个步骤中都需要括号、大括号和引号,尤其是在对 SpreadsheetId 和 SheetID 使用 SSIS 变量时。 我花了几天多的时间才让这一切工作起来,当时一些更好的 Batchupdatate 和 copyTo 函数示例会有所帮助。