通过 Apps 脚本在 Google 工作表中跨两个单独文件的特定范围的双向同步
Two Way Sync of Specific Ranges Across Two Separate Files In Google Sheets via Apps Script
抱歉,如果这有点长 post - 如果需要,我可以在这里进一步澄清任何事情。我基本上有一个 Apps 脚本问题,涉及两个单独帐户上两个单独 Google Sheet 文件的双向同步。
两个文件相同,但命名不同。我想知道是否有一种方法可以在两个文件之间建立双向同步,但仅限于特定范围,这在两个文件中是相同的。
假设我们有一个帐户 A 和帐户 B,每个帐户都有文件 1 和 2。这两个文件是相同的。我希望拥有它,以便如果我在任一文件中的范围 E14:AE20 之间的任何位置进行更改,这些更改将反映在相反的文件中。
如果这完全令人困惑或需要进一步详细说明,请告诉我,如果有帮助的话,我也可以提供我的意思的照片。我试图让这个 post 尽可能简单明了,但如果需要我可以进一步详细说明。
谢谢,
G
我认为您可以使用 onEdit(e) 触发的脚本来完成此操作。这将在每次编辑时 运行,如果脚本中的 if 语句为真,它将在目标文件中设置值->sheet->range.
Note: This will copy only values, not formula's, formatting etc...
- 扩展 -> Apps 脚本
- 清除样板代码
- 粘贴下面的代码
- 更改 sheet 名称
TheSheetNameToCheck
- 更改目标文件中的传播sheet ID。
- 转到触发器(时钟图标),添加触发器并将
Select event type
设置为 On edit
- 其他文件也一样。
脚本:
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
const value = e.value;
if (
sheet.getName() == 'TheSheetNameToCheck'
&& range.getColumn() >= 5
&& range.getColumn() <= 31
&& range.getRow() >= 14
&& range.getRow() <= 20
) {
const targetFile = SpreadsheetApp.openById('1hVcBM7Tzkg40YxxxxxxxxxF3prATgF8')
const targetSheet = targetFile.getSheetByName('TheSheetNameToCheck')
const a1 = range.getA1Notation()
targetSheet.getRange(a1).setValue(value)
}
}
抱歉,如果这有点长 post - 如果需要,我可以在这里进一步澄清任何事情。我基本上有一个 Apps 脚本问题,涉及两个单独帐户上两个单独 Google Sheet 文件的双向同步。
两个文件相同,但命名不同。我想知道是否有一种方法可以在两个文件之间建立双向同步,但仅限于特定范围,这在两个文件中是相同的。
假设我们有一个帐户 A 和帐户 B,每个帐户都有文件 1 和 2。这两个文件是相同的。我希望拥有它,以便如果我在任一文件中的范围 E14:AE20 之间的任何位置进行更改,这些更改将反映在相反的文件中。
如果这完全令人困惑或需要进一步详细说明,请告诉我,如果有帮助的话,我也可以提供我的意思的照片。我试图让这个 post 尽可能简单明了,但如果需要我可以进一步详细说明。
谢谢, G
我认为您可以使用 onEdit(e) 触发的脚本来完成此操作。这将在每次编辑时 运行,如果脚本中的 if 语句为真,它将在目标文件中设置值->sheet->range.
Note: This will copy only values, not formula's, formatting etc...
- 扩展 -> Apps 脚本
- 清除样板代码
- 粘贴下面的代码
- 更改 sheet 名称
TheSheetNameToCheck
- 更改目标文件中的传播sheet ID。
- 转到触发器(时钟图标),添加触发器并将
Select event type
设置为On edit
- 其他文件也一样。
脚本:
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
const value = e.value;
if (
sheet.getName() == 'TheSheetNameToCheck'
&& range.getColumn() >= 5
&& range.getColumn() <= 31
&& range.getRow() >= 14
&& range.getRow() <= 20
) {
const targetFile = SpreadsheetApp.openById('1hVcBM7Tzkg40YxxxxxxxxxF3prATgF8')
const targetSheet = targetFile.getSheetByName('TheSheetNameToCheck')
const a1 = range.getA1Notation()
targetSheet.getRange(a1).setValue(value)
}
}