# Shortcuts 结合 CSV，在本地创建、读取和修改表格

> 本文公开全文。

原文：https://utgd.net/article/9410

本文核心思路已经在 UTGD Premium 第4期发布，并应会员要求提高发布优先度。 希望提前获知主笔观点，与主笔讨论，令主笔第一时间答疑本站内容相关问题，支持 UTGD 发展等，请考虑 成为 UTGD 会员 。

如何保存 Shortcuts 某次的运行结果？或者说，怎么调取 Shortcuts 上次运行的结果？对于 Shortcuts 来说一直是个重要的问题。这个问题关系到捷径到底能处理多复杂的需求，关系到它是个小玩具还是可以做更多的事。

到了捷径（当时还叫捷径）的 1\.5\.3 版本，这个问题才体面地被解决了。除了因为在这个版本，捷径终于可以与一些网络服务的 API 互动之外，也因为彼时也同样是在线表格编辑工具 Airtable 在慢慢扩大影响的时候。所以人们很快将联合这两个在效率工具圈频频露面的工具。捷径从此得以与表格挂钩，也就是可以产生、读取和追加信息到表格。

实际上，Shortcuts 一直都可以直接将每一次运行的结果保存到本地，只不过不太“体面”。在 API 互动的功能出现之前，就可以通过系统应用（备忘录、提醒事项等）来保存信息、读取信息。然而通过系统应用是个变通方法，它生成的内容格式过于受限，使用场景也因此受限。所以只能说是应急，和处理表格这个级别的能力还相去甚远。

令人难以置信的是，通过 Shortcuts “创建、读取和修改表格” 的通用解决方案，一直都存在，而且无比简单。它来自于一个在效率圈总是作为“附带一句”被提起，却又几乎被所有相关工具支持的格式——CSV。

其实，Shortcuts 可以与 CSV 联动这个点早已被人发现。搜索一下也可以发现星星点点的思路和做法。只是人们对 CSV 这个格式过于不敏感，导致它的话题性比起华丽的 Airtable 差了太多。但是 CSV，Comma\-Separated Values（逗号分隔值），是个应该更多地被注意到和使用的格式。因为它的纯文本与直接和 Excel 互通的特性，它特别值得 Power User 的注意。

越是使用多个操作系统、多个效率工具的 Power User，就越应该了解像 CSV 这样每个操作平台、每个相关效率工具都支持的，纯文本的格式。而 CSV 还是其中规则特别简单易学的。

得益于 CSV 格式是纯文本，它的另一个明显好处就是非常容易修改。很多 Excel 表格处理上的问题，都可以使用各位 Power User 熟悉的自动化工具搭配 CSV 来解决。朋友可能认为你很懂科技所以很懂电脑又所以很懂 Excel 然后拜托你解决一些 Excel 问题。但他不知道你根本无法忍受那种东西。这时候很大概率你可以通过 Shortcuts \+ CSV 的组合来挽尊。

## CSV 简单介绍

根据本站 UTGD 所涵盖的内容范围和主张。作为纯文本格式的 CSV 是一种以后经常被提起的格式。

看到图片熟悉 Anki 的朋友想必已经明白了。并不需要每次都在电脑前用 Excel 来做内容然后导入 Anki，而是可以在任何地方，用各种设备来随时向 Anki 发送单词。

### CSV文件：纯文本→表格

简单来说，CSV 就是可以让你输入纯文本但生成表格的格式。所以当你马上要做一张简单的表，或者需要用到表格这种格式，但手边没有“重武器 Excel”的时候，请在脑子里“表格”这个词的旁边放上一个“轻武器 CSV”的词条。

> 纯文本 → CSV → 表格

纯文本代表它对输入工具没有要求，使用难度极低。能打开个文本编辑器，你就能用 CSV，也就是说，你可以制造表格。

### CSV 文件的基本写法

CSV 有几条规则和规范，但记住以下两条，足以应对大多数场景都问题。

- 分隔符，一般是逗号 ,

- 牵涉到换行，用半角引号 " 把内容引起来

接下来分别展开说明一下（附带实例）。

分隔符，就是让电脑知道，“这个符号可以区分前后的内容，把1段内容划为2个表格”。它一般是逗号 , 实际上，CSV 这个缩写，展开就是 Comma\-Separated Values，逗号分隔值。

比如我们要记住“戦々恐々”这个日语单词的意思，我们可以写：

> 戦々恐々, 战战兢兢，心惊胆战

因为 CSV 它必须要用半角逗号,来分隔内容，所以中文里使用的全角逗号，没有分隔内容的作用。

现在再来看换行等特殊情况。做表格我们一定会遇到换行的情况。比如做 Anki 卡片，一个单词有多个意思，一个知识点有多个要点：

> 冴える,"勘がさえる 直觉敏锐 技がさえる 手艺高超 月がさえる 月色"

这种时候，我们通过半角引号"来告诉 CSV，包着的内容都在一个格子里，不要分开。哪怕里面有用于分隔内容的分隔符半角逗号,也都要塞在同一个表格里。

## 以记录新冠人数为实例在 iOS 上用 Shorcuts 结合 CSV

2021 年中旬左右，日本的新冠阳性人数从数千上升到 5 位数。当时的我还没有脱敏，所以希望对每日新冠人数有个整体的把握，所以就制作了一个 Shortcuts，在每天早上告诉我有多少新的阳性，并且把记录保存到 CSV。

这个 Shorctus 我一直用到 2022 年中旬，后因为以下三个原因停止使用： 1\. 已经对感染人数脱敏 2\. 换手机后自动化没有同步，也是因为这个经历，我才发现自己已经对感染人数脱敏 3\. 我调用感染人数的 API 后来也停止维护

不过因为这确实是我真实使用的例子，所以在此还是决定以它为例来说明通过 Shortcuts 使用 CSV 的技巧。

我们一般和表格产生的基础交互有 4 种： 1\. 创建内容 2\. 获取内容 3\. 追加内容 4\. 删改内容

这 4 种通过 Shortcuts 和 CSV 的组合都可以解决。 而且 Shortcuts 创建/追加/删减/获取 CSV 的所有方法，包括在 macOS 上突破沙盒限制来读写文件的方法，都可以在处理其它纯文本文件时直接套用。

### 创建

首先，最好先在 iCloud Drive 里的 Shortcuts 文件夹，创建一个 CSV 文件。文件名随意，我在当时起的名字是“新冠统计\.csv”。

为了日后方便以表格形式查看，用其他软件处理，我们可以做一个表头。在 CSV 中制作表头，就是在第一行写上表头的各项内容，以半角逗号,分隔：

必须要创建在 iCloud Drive 里的 Shortcuts 文件夹是因为 iOS 上的 Shortcuts 无法在这个文件夹之外添加内容。

要突破这个限制，可以选择的做法有两个：

- 使用 Dropbox。但使用 Dropbox 本质上和放在 iCloud Drive 里是一样的，都不是在“任意位置”添加内容，而只是在一个限定了的文件夹里。

- 在 macOS 上做这件事。macOS 可以使用“运行 Shell 脚本”这个动作来在任意位置读写文件。

### 添加内容

接下来，我们就可以往这个文件里添加内容了。这只需要两个动作：

在文本框内我们看到了各种变量。这些变量当然都是从 API 中获取的各项数值。但是因为前述的脱敏和 API 失效等原因，我如何从 API 获取这些数值的部分就不再有参考意义。

至于这些如何获取国内新冠人数的 API，网上应该随手可查。至于如何在 Shortcuts 中调用 API，我也在2016年就写过文章，后面也写过教程。不了解的话可以加入本站 Slack 群，我可以将相关内容发给你。总之，API 相关内容不是本教程的重点，展开将过于繁琐，在此按下。

回到正轨，所以如上图所示，对于要记录新冠感染人数这件事来说，我们完全用不到半角引号，只是在用半角逗号来区分一些数字，就做出了其它工具里都可以使用的表格。

鉴于大家读到这篇文章时，很难马上结合 API 做出完整功能的 Shortcuts，我这里放一段数据，可以直接复制粘贴到 Shortcuts 里的文本框里。再结合“追加到文本文件”，就能直接体验给表格追加一行内容：

```
2021-08-12,10866,129496,1055203,8.39%
```

### 获取

获取有两个含义，一个是获得文件的全部内容。一个是精确获取某一行某一列的内容，作为查询。

获取 CSV 全部内容在 Shortcuts 中要用的动作是“获取文件夹中的文件”：

而精确获取某一行某一列的内容稍微有点点麻烦，需要用到多个技巧。

举例来说，我们要获得 2021 年 8 月 13 日这一天的新增阳性的人数。那么它在 Shortcuts 里的方法是，先找到 2021 年 8 月 13 日这一行，再找到第二项（因为第二项是当天的新增人数）。

第一步，找到 2021 年 8 月 13 日这一行非常容易，因为 CSV 是纯文本，我们只要用“匹配文本”即可：

第二步，获取第二项。这也是 Shortcuts 的入门级操作。我们先用“拆分文本”，以半角逗号,为分隔符，把这一行内容拆开，然后在用“从列表中获取项目”，获取索引第2项的内容即可：

## 附：macOS 上 Shortcuts 的特权：写入文件夹不受限制

如果你的主要工作环境是 macOS，那么你应该看一下《用 Shortcuts 制作 Stand\-up meeting 模板》这篇文章的“在 Shortcuts 利用 Shell 命令做好本地备份”这一章节。在这一章节，我介绍了通过“运行 Shell 脚本”这个动作，让 Shortcuts 摆脱沙盒，在 macOS 系统上任何一个位置读写文件的方法。这个方法与《用 Shortcuts 制作 Stand\-up meeting 模板》这篇文章的其它部分没有必然联系，可以单独掌握。

---

[前往标准阅读页](https://utgd.net/article/9410?audience=web)
