图片缩略图

GetGoogleSpreadsheet

version 1.0.0.0 (1.97 KB) by 丹尼尔
下载谷歌电子表格作为csv并导入到Matlab单元阵列。
4.7
22日评级

25下载

更新2016年1月02

查看许可协议

结果= GetGoogleSpreadsheet (DOCID)
[DOCID]类似于'0AmQ013fj5234gSXFAWLK1REgwRW02hsd3c'的值,可以在电子表格的url中找到:这里https://docs.google.com/spreadsheets/d/ < > /编辑# gid = 0

在电子表格中的值的单元格数组

重要提示:电子表格必须与“任何有链接的人”选项共享。

这没有错误处理,也没有经过广泛的测试。
请在下面的评论中报告问题。

感谢@MarkTomaszewski和@Constantine注意到更新的url格式(上面的描述已经更新以反映这一点)。

引用作为

丹尼尔(2021)。GetGoogleSpreadsheet(//www.tatmou.com/matlabcentral/fileexchange/39915-getgooglespreadsheet), MATLAB中央文件交换。检索

意见及评分(48

唐纳德

这是可行的,但你可以直接使用API下载:
https://docs.google.com/spreadsheets/d/ {{ID}} / gviz / tq ? tqx =: csv&sheet = {{sheet_name}}

url_name = sprintf ('https://docs.google.com/spreadsheets/d/%s/gviz/tq?tqx=out:csv&sheet=%s”,……
ID, sheet_name);
sheet_data = webread (url_name);

莫拉Medugno

你好,我有一个组织的谷歌电子表格。没有办法读吗?谢谢

布兰登沃森

这在windows和mac上工作得很好,但在Linux上一直在第27行得到一个429错误……有人看到并修复了吗?

Karthikeyan Duriavel

^^^如果工作表的单元格有空值,它中断,还不确定如何修复它

Karthikeyan Duriavel

我将永远珍惜这个函数

如果你只有数字数据,想把它输出成矩形矩阵。将这段代码插入第34行之后!
Result = cellfun(@str2num, Result);
警告!只适用于数值数据

诺兰克鲁克

亚历克斯支持者

伟大的功能,谢谢!顺便说一下,我注意到如果一个文本行有换行符,它会被读成多行到MATLAB中。
请注意下面关于如何访问单个表格/选项卡的评论。

疾病预防控制中心

2020年4月工作。谢谢你创造了这个!如果在谷歌表上没有设置权限,只产生结果而不产生数据。似乎只工作单电子表格/从第一个表格拉数据。有没有从其他表格中提取数据的方法?一种方法是在谷歌工作表中设置要处理第一个工作表的工作表,但如果需要来自多个工作表的数据,则需要在每次读取操作之前重新安排谷歌工作表中的工作表。

Lior阿尔珀特

重要注意:您必须设置谷歌表单文档的权限,以便每个拥有链接的人都可以打开它

Sachinkumar Suthar

安德鲁Bogaard

这最近对我不起作用了——我得到了HTML。为了解决这个问题,我发现谷歌在高级共享中添加了一个复选框,效果是“禁止公共下载”。一旦我不检查这个,它又起作用了。

marcio利马

史蒂夫的解决方案几乎奏效了。试试这个:
data = parseCsv(data)
%将数据分割成单独的行
data =分裂(数据、sprintf (' \ r \ n '));%关闭阀2017-12-15
% data = textscan(data,'%s','空格','\n');%这在一般情况下不起作用:不能处理单元格中有单个\n或\r的数据
如果为空(data{end}), %修剪任何空的最后一行% SDV 2017-12-15
=数据(1:end-1);
结束;
数据=数据。';
2 = 1:长度(数据)
%为每一行,将字符串分割成以逗号分隔的单元
'%q'格式适当地处理"引号"约定。
{二}tmp = textscan(数据,“% q”,“分隔符”,',');
数据(2,1:长度(tmp {1})) = tmp {1};
结束
结束

加雷斯·劳埃德

直接从盒子里拿出来。对实际问题的一个很好的解决方案。

马克曾

它工作得很好,但是,我的电子表格中的中文单词导入单元格数组不正确……

马克•布罗尔斯玛

很有魅力。

如果你想要一个特定的表单,我在Daniel的文件中找到了这个编辑:
csvURL = ['https://docs.google.com/spreadsheet/ccc?key=' DOCID '&gid=' GID '&output=csv&pref=2'];
其中,可以在特定工作表的谷歌电子表格url中找到GID,并将其作为额外参数传递给函数。

Jan Siroky

我不想评价这个应用程序,然而,我不知道如何撤消这。所以我给其他用户打了5颗星:)

Minaelkommos阿德尔

我有一个错误,意外的matlab表达式在第1行
它不能读取我的DOCID是= '1FysI4O-MLyE0dETK5LU-e_L4axfOXeQj5OwhQzkagmo'
有什么紧急的帮助吗?

hxen

哦。每一个想法。没有分享医生!愚蠢的wabbit)。

hxen

感谢尼古拉斯的推荐。出于某些原因,我无法在Mac上解压,只能在PC上解压。不知道为什么会这样……我能够运行程序,但现在混淆了输出。我对电子表格使用result = GetGoogleSpreadsheet(DOCID)命令,该电子表格的单元格中只包含数值。不是每个单元格都包含值。然而,我得到的返回是空单元格(显示为[]),除了第一列给出的是HTML代码的字符返回,第一行(result{1,1})是。我如何得到我的数值,如果我想看到沿着行第三列的值范围是2:10。我本以为它会是结果{2:10,3},但得到的只是每个单元格[],即使我在电子表格中有值。我哪里做错了? Thanks,

@hxen,尝试安装第三方存档工具,我强烈推荐“Unarchiver”。我能够解压缩' getgooglespreaddress .zip'与那个实用程序没有问题。

theunarchiver。com

hxen

嗯…我无法解压缩这个下载。我用的是Mac电脑,已经下载了好几次了。上面写着:“无法将‘getgoogleeshreadsheet .zip’解释为‘Downloads’。(错误1 -不允许操作。)还有人遇到过这个问题吗?

kapil bhayani

史蒂夫·范·Hooser

有一个小问题。在当前版本中,如果谷歌工作表单元格内的文本包含新行,那么它们将被解释为CSV描述电子表格的新行。

修复方法是将内部函数parseCsv替换为:

data = parseCsv(data)
%将数据分割成单独的行
data =分裂(数据、sprintf (' \ r \ n '));%关闭阀2017-12-15
% data = textscan(data,'%s','空格','\n');%这在一般情况下不起作用:不能处理单元格中有单个\n或\r的数据
如果为空(data{end}), %修剪任何空的最后一行% SDV 2017-12-15
=数据(1:end-1);
结束;

2 = 1:长度(数据)
%为每一行,将字符串分割成以逗号分隔的单元
'%q'格式适当地处理"引号"约定。
{二}tmp = textscan(数据,“% q”,“分隔符”,',');
数据(2,1:长度(tmp {1})) = tmp {1};
结束

最好的
史蒂夫

塔伦纳

真管用!

蒂姆·布莱克摩尔

按要求工作。

大卫·卡杰尔

我用的是gmail公司账户…脚本将返回HTML和单元格数组,类似于“Timothy OConnor”编写的....

我在我的个人gmail帐户上创建了一个文件,并得到了完美的结果....

有人知道如何从谷歌文件中读取数据吗?

多米尼克•贝特

我使这张表“对任何人都可见”,并把“DOCID”信息作为要求。不幸的是,我总是得到以下消息:错误:意外的MATLAB表达式。有人遇到同样的问题并找到了解决方案吗?

塞德里克徐

蒂莫西,你得让所有有链接的人都能看到这张表。

盖OConnor

+1在corp帐户-脚本显示返回HTML在1861x1265单元格数组

作为对我下面评论的回应,Matlab似乎使用它自己的内置浏览器来完成与web相关的任务。我可以用这个浏览器登录谷歌,但当我试图下载链接时,仍然得到html。

如果我使用web(url)手动打开链接,我可以登录谷歌,然后它问我在哪里保存链接,但在选择一个位置后,它似乎进入一个无限的等待循环在浏览器中…

由于某些原因,当我尝试这个时,我得到谷歌登录屏幕的HTML结果。我用Chrome和IE登录谷歌。

我不能让这张表与任何人共享,因为它是谷歌公司账户的一部分,不允许与外界共享。当我用我的默认浏览器登录谷歌时,用其他软件(例如JMP)下载链接没有问题。

有人能解决这个问题吗?

刘易斯•科尔文

我从哪里得到parseCsv(第36行)?我在matlab上没有这个函数,也不能在网上找到。

贾斯汀·爱普斯坦

@ mpn17

第1行应该是:
function result = GetGoogleSpreadsheet(DOCID, gid)

第20行应该是:
csvURL = ['https://docs.google.com/spreadsheet/ccc?key=' DOCID '&output=csv&pref=2&gid=' gid];

Yau Benor的回复是在第20行代码中有一个错误,在2和&之间有一个错误的空格。参照= 2 gid……”

mpn17

@ Yau Benor,我尝试了您的更改更改多个表的代码,但没有运气。

试图将第20行更改为以下内容以匹配新的URL格式,但它输出了一个太大而无法读取的594x44192数组。

csvURL = ['https://docs.google.com/spreadsheets/d/' DOCID '/编辑#gid=' gid];

任何帮助都非常感谢!

贾斯汀·爱普斯坦

邱Benor

要允许多个工作表-修改脚本中的第1行和第20行:

1 .查询查询结果

20 csvURL = ['https://docs.google.com/spreadsheet/ccc?key=' DOCID '&output=csv&pref=2 &gid=' gid];

贾斯汀·爱普斯坦

如果它支持使用URL中的“GID”的多表电子表格,那么这将是完美的。金宝app

肖恩

这个脚本工作得很好,只是注意到在工作表单元格中添加新行会导致对工作表的错误解析。

肖恩

斯图尔特McGarrity

斯图尔特McGarrity

安德鲁Bogaard

先生,你彻底改变了我的实验记录

康斯坦丁

嗨,我花了一段时间才弄明白这个非常有用的脚本,用于从谷歌表传递信息。脚本中的'DOCID'信息并没有提到删除/edit#gid=0和spreadsheets/d之类的东西……你在下面的回答中明确地陈述了什么。如果你能更新脚本中的注释就太好了!谢谢!

利物浦他突袭

感谢一个伟大的脚本工作的好。:-)但是,对于如何存储与单元格文本相关联的超链接有什么想法吗?

马克张照片

@Daniel,

非常感谢!这是完美的工作时,工作表被设置为任何人与链接查看。否则,输出将包含一个很大的html单元格数组。

有没有办法使这工作的床单没有共享设置?

此外,你的描述可能受益于根据以下的编辑…

@Adam,

当我在浏览器中访问我的表单时,我看到一个URL像这样:
https://docs.google.com/spreadsheets/d/ <这里的文本是文档id>/edit#gid=0

希望这可以帮助!

~马克

亚当Danz

这看起来非常有用。

任何更新现在谷歌表已经合并好驱动器,不再包含'key='部分(替换为/d/,但仍然不能与此代码工作)?

Nagavenkat

完美的工作
谢谢你!

MATLAB版本兼容性
创建R2012b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!