在Google工作表中创建函数以获取我的外部IP地址

amm*_*eln 5 xpath google-sheets web-scraping google-apps-script google-sheets-formula

我需要在Google工作表中创建一个函数来获取我的外部(公共)IP地址

我尝试使用功能=IMPORTXML("https://api.myip.com","//body"),但是此方法显示的是不同的IP地址,而不是我的外部IP地址

pla*_*er0 6

IP不同的原因是因为您获取的是Google表格位置的IP,而不是您的IP

0


Sou*_*ria 6

以下解决方案利用了电子表格中的自定义菜单 -

function onOpen(e) {
  SpreadsheetApp.getUi()
      .createMenu('My Menu')
      .addItem('Get IP', 'getIP')
      .addToUi();
}

function getIP() {
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().appendRow([JSON.parse(UrlFetchApp.fetch('https://api6.ipify.org?format=json')).ip]);
}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要随意修改脚本以将所述IP放置在工作表中的任何位置。

另外,我使用的是IPv6地址,而不是IPv4,但是如果您要将其切换到IPv4,请将URL从代码替换为https://api.ipify.org?format=json-您可以在此处找到此资源。

我已经四处询问,这不能(以任何方式)通过自定义公式来实现,因为此类公式在各种包装中运行(不与任何客户端元素交互)。希望这可以帮助。

编辑笔记

添加一种使用自定义菜单将外部IP插入特定单元格的方法(准确地说是当前单元格)-

function onOpen(e) {
  SpreadsheetApp.getUi()
  .createMenu('My Menu')
  .addItem('Get IP', 'getIP')
  .addToUi();
}

function getIP() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var currentCell = sheet.getCurrentCell();
  var ip = JSON.parse(UrlFetchApp.fetch('https://api6.ipify.org?format=json')).ip;
  currentCell.setValue(ip)
}
Run Code Online (Sandbox Code Playgroud)

通过使用此方法,IP将被添加到已选择的单元格中。

您可能想知道为什么选择了当前单元格而不是活动单元格 -答案是因为文档更喜欢我们这样做:)我敢打赌,即使我们要使用活动单元格,它也可以工作(尽管未进行测试)但我不知道为什么不会这样)

  • @ player0-因此,可以在没有菜单的情况下调用函数(不是我在答案中共享的函数,因为它已被建模为“ appedRow”,但仍可以调用常规的自定义函数,但不会给您提供外部IP地址,但是我的响应可以建模为在进一步定制时将IP注入指定的单元格(例如D9)中-让我也这样做并将其附加到我的原始响应中。 (3认同)