这个 Google 脚本页面说 stackoverflow 是发布 Google 脚本问题的地方,所以我在这里。
我想使用 Google 脚本自动向 Google 电子表格中的所有手机号码发送短信 (SMS)。
按照本教程,可以将电子邮件发送到电子表格中的所有电子邮件地址,但是当我尝试使用电子表格中的电话号码代替电子邮件地址时,出现错误,表明这些电子邮件地址无效地址。很公平。如果我知道与每个手机号码相关的手机公司,我可以将这些电话号码转换为电子邮件地址(这是一个常见的选项,有几个指南解释它,就像这个),但我没有那个手机提供商信息。
我当然不是第一个尝试从计算机而不是手机自动发送短信的人。 这个问题是最流行(但也更老)的问题之一。 Twilio出现在我浏览过的几个答案中,但这不是免费服务(尽管它相当便宜,我承认。)不过,谷歌有免费选项,所以我想我会尝试一下。 Google Voice 可以发送免费短信,您甚至可以通过 Gmail发送免费短信。
我知道很多人都在寻找一种 API 来使用 Google 服务发送短信,但似乎没有。有一些有趣的项目,例如google-voice-java,但这些项目比任何其他项目都更多。
因此,我想我只需使用一项 Google 服务(Google Docs 电子表格)即可通过使用第三项服务(Google 脚本)来调用另一项服务(Google Voice 或 GMail)。有什么方法可以做到这一点吗?有没有办法让 Google 脚本发送短信?例如,MailApp.sendEmail发送电子邮件 - 是否有一个可以发送短信(SMS)?如果没有,可以MailApp.sendEmail通过按摩/临时操纵来发送短信(无需将电话号码转换为电子邮件地址,如 [phonenumber]@txt.att.net)?是否可以使用其他脚本选项,也许与 Google Chat 相关(因为 GMail 短信选项与 Google Chat 相关)?
我有一个这样的字典:
(100002:“苹果”、100004:“香蕉”、100005:“胡萝卜”)
我试图让我的字典具有键的整数(就像现在一样),但具有值的集(而不是现在的字符串)。我的目标是能够从具有一列的 .csv 文件中读取键(一个 int,即项目 ID 号),然后是大小、形状和颜色等内容的列。我想将此信息添加到我的字典中,以便仅添加字典中已有键的信息。
我的目标字典可能如下所示:
(100002: set(['APPLE','MEDIUM','ROUND','RED']), 100004: set(['Banana','MEDIUM','LONG','YELLOW']), 100005: set(['CARROT','MEDIUM','LONG','ORANGE'])
Run Code Online (Sandbox Code Playgroud)
从我的仅键+字符串作为项目名称的字典开始,我尝试了这样的代码来从 .csv 文件中读取额外信息:
infile = open('FileWithTheData.csv', 'r')
for line in infile.readlines():
spl_line = line.split(',')
if int(spl_line[0]) in MyDict.keys():
MyDict[int(spl_line[0])].update(spl_line[1:])
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个错误说出来了AttributeError: 'str' object has no attribute 'update'。我尝试将字典的值更改为集合,以便我可以更新它们,结果如下:我(100002: set(['A','P','L','E']), 100004: set(['B','A','N']), 100005: set(['C','A','R','O','T']))
想将值转换为集合,以便当前值的字符串将成为集合中的第一个字符串,而不是而不是将字符串分解为字母并将这些字母组成一组。
当我创建字典时,我还尝试通过将两个列表压缩在一起来将值设置为一组,但这似乎没有任何区别。像这样的 MyDict = dict(zip(listofkeys, set(listofnames))) 仍然使整个 listofnames 列表成为一个集合,但它没有实现我的目标,即使 MyDict 中的每个值成为一个集合,其中包含 listofnames 中的相应字符串:集合中的第一个字符串。
如何将 MyDict 中的值放入一个集合中,以便我可以向该集合中添加其他字符串,而无需将字典中当前值的字符串转换为一组单独的字母?
编辑:我目前通过使用一个函数来生成项目 ID 列表(它们是键)和另一个函数来查找这些项目 ID 以生成相应项目名称的列表(使用两列 .csv 文件作为数据源),然后我将zip它们放在一起。
回答:根据这里的建议,我想出了这个解决方案。我发现具有 set()).update 的部分可以轻松更改为 list()).append 以生成列表而不是集合(以便保留顺序。)我还发现通过 更新更容易。通过将包含名称的列添加到 …
我正在开发一个 kivy 应用程序,它从 sqlite3 数据库中提取数据并用它填充 TreeView 。当我展开一些组时,TreeView 变得太大而无法适应我的屏幕,因此我想将其放入 ScrollView 中,这样我仍然可以向下滚动并查看已超出屏幕底部的项目。我可以让一个基本的 ScrollView 工作,但是当我将 TreeView 放入其中时,没有滚动,并且 TreeView 的顶部超出了屏幕顶部。
我已将代码精简为在没有 .kv 文件的情况下运行的问题的工作示例:
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.treeview import TreeView, TreeViewNode
from kivy.uix.treeview import TreeViewLabel
from kivy.app import App
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.button import Button
class TreeViewButton(Button, TreeViewNode):
pass
modGroups = [u'Fruit', u'Fruit', u'Meat', u'Dairy', u'Dairy', u'Fruit']
modItems = [u'Apple', u'Pear', u'Spam', u'Egg', u'Milk', u'Banana']
modDict = dict() …Run Code Online (Sandbox Code Playgroud)