在电子表格中跟踪基本数据非常简单——记住每天、每周或每月更新数据,这可能是个问题。 但是,既然可以利用一些简单的自动化工具,为什么还要手动更新呢?
这是创建自动更新 Google 表格的分步指南,它既可以从网络上抓取数据,也可以自动更新电子表格。 在此示例中,我们将使用“午餐时间的每日当地温度”,但可以轻松调整代码以获取和存储其他数据。
1. 创建一个 Google 表格电子表格
前往 Google 云端硬盘或 Google 表格并创建一个新的空白电子表格。 (如果您还没有 Google 帐户,可以在那里注册。)
为工作表命名任何你想要的,你就可以开始了。 (默认设置为“无标题电子表格”,但您可以单击它以将其更改为可以在您的文档列表中更好地识别它的内容。)
2. 找到您要抓取的网页部分的“XPath”
Google 表格需要一个“XPath”选择器来从网页中提取一部分数据。 幸运的是,有一个易于使用的点击工具可以帮助您做到这一点:SelectorGadget。 (网站上有一段不到 2 分钟的视频演示了它是如何工作的。)
安装 SelectorGadget Chrome 浏览器扩展程序,通过单击浏览器工具图标将其激活,然后单击要抓取的页面部分。 该部分将变为绿色。 诀窍是确保你只选择那个。 页面的其他区域也可能是绿色或黄色。 如果是,请单击要从选择中删除的那些。
在下图中,我访问了 Foundry 公司总部所在地马萨诸塞州尼达姆的国家气象局页面。 (Foundry 是 Computerworld 的母公司。)
这个页面很简单:我点击了温度,它是唯一选择的项目。 如果其他人显示为绿色或黄色,我会单击它们将其关闭,以确保我的 XPath 仅选择我需要的内容。
XPath 通常比 CSS 更复杂,但您不必担心所有表达式的含义。 一个关键点是 XPath 选择器将在您的 Google 表格公式中被双引号括起来。 不幸的是,选择器本身也有双引号。 这会导致问题,因此如果您的 XPath 包含双引号,请手动将它们全部更改为单引号。
我将在我的 Google 表格中使用的 XPath 选择器现在是
3. 添加你的公式
电子表格公式可以做的不仅仅是数学计算; 他们还可以从网页中提取数据。 对于 Google Sheet,读取网页部分内容的功能是:
=ImportXML(“URL”, “XPath 选择器”)
对于我的 National Weather Service Needham, MA 页面和温度选择器,这是
=IMPORTXML(“https://forecast.weather.gov/MapClick.php?lat=42.2803&lon=-71.2345”, “//*[contains(concat(‘ ‘, @class, ‘ ‘ ), concat( ‘ ‘ , ‘myforecast-current-lrg’, ‘ ‘ ))]”)
在我的电子表格的第一列中,我将列出我正在跟踪的位置。 这将使将来向我的工作表添加其他位置变得容易。 我会把公式放在第二列。
我想要 C 列中的日期和时间。我们稍后会处理。
4.写一个函数来获取和存储数据
当前设置电子表格的方式,不会保存温度; 每次打开工作表时它都会改变。
为了保持工作表当前设计的历史数据,我需要在每次打开它时手动将值复制并粘贴到另一个单元格中。 这不是很可扩展! 相反,让我们创建一个新函数来 1) 找到工作表中的第一个空行和 2) 将单元格 B2 中的值复制到另一个空单元格中进行存储。
为了存储数据,我们需要创建一个电子表格函数。 前往 Extensions > Apps Script 为电子表格创建函数。
第一行代码为任何活动的电子表格创建一个变量,然后是一个保存该工作表第一个空行编号的变量。
为了在表格单元格中读取或写入数据,该单元格需要是范围对象。 幸运的是,使用 yourSheetObject.getRange() 可以轻松地将电子表格的单元格位置转换为单元格范围对象。 在这个例子中,我将我的工作表对象命名为 sheet(你可以随便叫它),所以代码是 sheet.getRange()。 getRange 采用多种格式来标识单元格位置,包括用于第 3 行、5 列的 getRange(3,5) 或用于传统电子表格单元格语法(如 B2)的 getRange(“B ” + 2)。
考虑到这一点,我可以使用 sheet.getRange(2, 2) 创建一个变量来保存单元格 B2 的单元格范围,即第 2 行和第 2 列,我知道我当前的温度所在的位置。 然后我使用 get.Value() 读取该值,如您在上面的代码中所见。
接下来在该代码块中,我在 B 列中找到第一个空行,我想在其中添加新温度,并将该单元格另存为范围对象。 然后只需用我刚刚存储的温度设置该单元格的值即可。
最后几行执行类似于存储当前日期和时间以及硬编码位置的操作。
有很多方法可以使这段代码更紧凑,但我分享了一个详细的版本,以便更容易看到发生了什么。 在最后一行中,我通过在一行代码中组合 getRange 和 setValue 来稍微加强它,而不是创建一个单独的变量来保存单元格范围。 使用您喜欢的任何语法。
通过单击功能代码上方的软盘图标来保存它。 您可能希望将默认项目名称更改为其他名称。 我将我的命名为“午餐时间温度”。
您可以通过单击“运行”按钮来测试您的脚本,以查看电子表格中发生的情况。 如果一切顺利,您将获得包含当前温度的新数据行。
5.安排你的功能自动运行
最后一块:安排您的功能自动运行。 为此,请单击左侧的时钟图标以打开显示当前项目触发器的脚本仪表板。 (目前还没有。)您可能会被要求先在您的 Google 帐户中对此进行授权。
如果您希望电子表格按特定计划更新,请将事件源从“从电子表格”更改为“时间驱动”,然后选择您希望它每小时、每天、每周、每月或其他选项运行。
然后,瞧! 自动收集和存储数据的自我更新电子表格。