图片缩略图”itemprop=

Matlab谷歌表(matlab2sheets)

版本1.0.0.0 (484 KB) 安德鲁Bogaard
这个函数(和运行一次helper函数)出口数据Google电子数据表

20下载

更新2017年9月21日

从GitHub

查看许可GitHub

一起使用这个GetGoogleSpreadsheet从文件交换,你可以读/写从MATLAB谷歌表。灵感来自一个年长组函数(Matlab谷歌电子表格),不再使用谷歌的新v4 API。
- - -
状态= mat2sheets (spreadsheetID sheetID sheetpos, d)
%这个函数将值从一个数组或单元阵列和地点
%谷歌电子表格。它需要的一次性使用RunOnce(见下文)
%的语法:状态= mat2sheets (spreadsheetID, sheetID pos d)
%
%参数:
% spreadsheetID:(字符串),从你的谷歌表的URL标识符
% sheetID:(字符串),另一个identier URL
% pos: 1 x2数组与指数(sheetrow, sheetcolumn)
%开始粘贴数据
% d:数组或单元阵列的数据粘贴到表。如果
% [],pos表明行或范围的行(开始停止)
%删除
%
%的回报:状态(0 =失败,1 =成功)
%
%的例子:
使用以下URL: %的表
%https://docs.google.com/spreadsheets/d/1GPd-vBsX5VUejz5hrxE/edit gid = 552
%
%的电话可能看起来像:
% mat2sheets (1 gpd-vbsx5vuejz5hrxe ', ' 552 ', 3 [2], [1 2 3 4 5])
%
%将值1,2,3,4,5进入细胞C2, D2, E2, F2,分别G2
%
%删除行(年代)
% mat2sheets (1 gpd-vbsx5vuejz5hrxe ', ' 552 ', 2,[]) %删除第2行
% mat2sheets (“1 gpd-vbsx5vuejz5hrxe”、“552”, 10[2],[]) %删除行2 - 10包容性
%
使用RunOnce () %。
%在使用这段代码之前,你必须使驱动器/床单api通过:
%https://console.developers.google.com/
%这里,你将“创建凭证”,通过OAuth 2.0客户机ID
%客户ID和客户的秘密。这些代码的两个参数
% RunOnce (client_id, client_secret)。与这两种RunOnce运行
%代码作为字符串传递,并遵循指令。
%
%以下代码是启发,利用的代码
%最初发表在文件交换Claudiu Giurumescu。
% (//www.tatmou.com/matlabcentral/fileexchange/31221-matlab-to-google-spreadsheets)
%
%我写这容纳最近Google API的变化,增加了一些
%的评论,和简化,以便它可以实现的
%普通用户(希望!)
%
%此外,我使用loadjson千千方读取输入流
%来自谷歌学习的元数据表
% (//www.tatmou.com/matlabcentral/fileexchange/33381-jsonlab--a-toolbox-to-encode-decode-json-files)
%
%安德鲁·罗伯特bogaard 2016年9月26日
%更新2017年7月25日(删除行)
% abogaard@uw.edu

引用作为

安德鲁Bogaard (2021)。Matlab谷歌表(matlab2sheets)GitHub (https://github.com/abogaard/matlab2gsheets)。检索

评论和评级(41)

Jerinthon Santillan

我跟着这些步骤但当运行RunOnce我有以下错误:
“错误使用保存
google_tokens无法写文件。垫:拒绝访问。
错误RunOnce(22)行
保存(google_tokens。席”、“client_id”、“client_secret”、“aSheets”、“rSheets”、“tSheets”);”
作为一个建议,确保google_tokens Matlab建议我。垫在MATLAB的路径。
我想知道如何解决。

塞巴斯蒂安Lemieux

伟大的工作截至2020年12月,和google_tokens做一些重命名的文件,我能够得到一个脚本,它使用这个函数和google drive上传功能顺利地。然而,我想知道我可以禁用这个函数数据覆盖。我不希望mat2sheets函数覆盖细胞已经在他们在google的数据表。

linhsia noferini

我跟着Readme文件的指示,所有事情都很顺利,直到命令的执行:con.getResponseCode在mat2sheets因数()。我得到以下错误:

Java异常发生:
java.net.ConnectException:连接超时:联系了
java.net.DualStackPlainSocketImpl.connect0(本机方法)
java.net.DualStackPlainSocketImpl.socketConnect(未知源)
java.net.AbstractPlainSocketImpl.doConnect(未知源)
java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
java.net.AbstractPlainSocketImpl.connect(未知源)
java.net.PlainSocketImpl.connect(未知源)
java.net.SocksSocketImpl.connect(未知源)
java.net.Socket.connect(未知源)
在sun.security.ssl.SSLSocketImpl。连接(未知来源)
在sun.security.ssl.BaseSSLSocketImpl。连接(未知来源)
sun.net.NetworkClient.doConnect(未知源)
在sun.net上。www.http.HttpClient.openServer(未知源)
在sun.net上。www.http.HttpClient.openServer(未知源)
在sun.net上。www.protocol.https.HttpsClient。< init >(未知源)
在sun.net上。www.protocol.https.HttpsClient.New(未知源)
在sun.net上。www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(未知源)
在sun.net上。www.protocol.http.HttpURLConnection.plainConnect(未知源)
在sun.net上。www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知源)
在sun.net上。www.protocol.http.HttpURLConnection.getInputStream(未知源)
java.net.HttpURLConnection.getResponseCode(未知源)
在sun.net上。www.protocol.https.HttpsURLConnectionImpl.getResponseCode(未知源)

你能帮ti修复它吗?

戴夫·埃里克森

这是壮观的。真正的问题,试图写一张——Excel,开放的办公室,或谷歌,真的不在乎——而不是击败格式化。Mathworks说writecell()能够在2020 b但是有各种原因(临时)不方便。这似乎绕过所有,因为最终我们希望它在谷歌,而不是当地的电子表格。

艾米沈

这对我来说太棒了!是2020年7月。必须在105个不同的表,这使得过程更快。确保如果你阅读单元阵列,单元阵列不能有一个细胞数组里面,即使是1 x1单元阵列。变量选项卡在MATLAB不显示,这对我来说是一个单元阵列,只是看起来像一个字符串。

IB Ugur

当我试着删除行它失败。错误消息“失败的尝试删除行。最后一个反应是:400 /错误请求“然而在输出数值数据没有问题。我怎么能修复它吗?

疾病预防控制中心

是2020年4月!成功写表。非常感谢创造。未来的用户请注意:使用前,需要RunOnce凭证从谷歌RunOnce文档中描述。

乔凡尼Ciriani

最终我获得了客户秘密,但是当我试着RunOnce,我收到以下错误
错误:urlread:方法必须“获得”或“后”
错误:从
RunOnce > getAccessToken行26列17
RunOnce行18列26

乔凡尼Ciriani

也许Console.Developers.Google.com改变了一点点,我不能够遵循ReadMe的指导方针。PDF设置开/床单api。我访问API库后点击谷歌床单和显示,它启用了。然后我点击凭证,我选择创建凭据,并选择OAuth客户机ID。在下一个屏幕上有一个警告,“创建一个OAuth客户机ID,您必须首先同意屏幕上设置一个产品名称”。点击编辑谷歌警告我设定一个范围表,它回答说,需要请求授权什么的程度。我做错了什么吗?很明显我丢失的东西。

marcio利马

修复皮埃尔的问题这样做:
在第350行(根据pasteSheetData函数),改变:
“‘valueInputOption”:“生”、“…

:“‘valueInputOption USER_ENTERED”、“…

撇号是谷歌的函数表格式化文本作为文本而不是数字。更多信息,看看这个:
https://developers.google.com/sheets/api/guides/values
在写作部分。

marcio利马

解决问题非常大的表做以下更改:
在“getSheetMetaData”功能改变url:
url = ['https://sheets.googleapis.com/v4/spreadsheets/“spreadsheetID”?字段= sheets.properties ');

JFLabrie

适合我。谢谢安德鲁!一些为他人指出,可能是有用的:我不熟悉“google凭证”的事情。我去了”https://console.developers.google.com/”,必须创建一个项目名称。然后我终于到一个页面,我可以创建一个凭证然后我获得一个客户id和client_secret。我执行RunOnce (client_id, client_secret)和随后的指令显示在Matlab。一切都好。然后我执行”状态= mat2sheets (spreadsheetID sheetID, (3 - 2), d)”和有一个403错误。克里斯的评论后,我回到了”https://console.developers.google.com/表“搜索API和激活Google床单API。然后我再次执行”状态= mat2sheets (spreadsheetID sheetID, (3 - 2), d)”在Matlab和没有任何提示。Matlab是一个循环。在调试模式下运行代码,最后我注意到以下循环发生了什么似乎永远,而变量json_return增长越来越大:
虽然~ isempty(左)
json_return = [json_return l];
l = br.readLine ();
结束
我怀疑我的谷歌表太大(已经加载的数据init)所以我测试了一个全新的空白谷歌传播表和它立即工作。
希望这可以帮助别人。
欢呼。

恩里克HIPOLITO

你好,

我不真正理解RunOnce函数的使用。在哪里以及如何运行这个功能?

谢谢。

安德鲁Bogaard

谢谢你们所有人的输入和反馈,我非常高兴地看到,代码主要是工作,这是很有帮助的。我一直在忙于一个国际移动今年夏天,和没有时间来跟上请求。我将试着更敏感,现在我解决。

关于大型数据集的缓慢上传时间,我建在请求之间的延迟,因为我发现,谷歌将会出现反弹,如果他们来到太快/无数的请求。这可能是优化通过改变如何上传数据(而不是遍历多个请求,也许我们可以试着上传每个请求更多的数据。

一般来说,我没有大型数据集的时候我写了这段代码。我一度认为存储数据的表,但它太笨重的和有限的,所以我决定,这是更适合的元数据(这就是我如何使用它)。

皮埃尔,我将在未来几周你撇号的问题。

Quinten Tupker

特别是如果有大量的条件格式在整个表。

Jan Siroky

感谢这个工具和明确的指示。

马大

非常感谢这强大和结构化代码!
是也一种读取数据,就像只要跳过输入“d”?似乎没有spreadsheets.values。get请求的定义。

皮埃尔Chapuis

皮埃尔Chapuis

你好,

首先谢谢你很多这种强大的代码。

它让我很受用,除外我没有弄清楚的一件事。我有一个单元阵列包含数字、字符串、日期和超链接。当我运行的代码将整个数组复制到谷歌表:
*数字和字符串,它将正常工作。
*对日期(如{' 2018/01/01 '})和超链接(如{' =超链接(“something.com”,“链接名”)}),细胞复制到谷歌表,但总有一个撇号之前。例如:单元格的{‘2018/01/01}我要的2018/01/01表(见“代替2018/01/01符号)。这是一个问题尤其是超链接将不会显示正确(' =超链接())。

提前感谢您的帮助。

hxen

你好。这属于约翰的问题(下图),我也遇到过。最有可能的是,Google床单API不支持这个项目。Google Drive API和谷歌床单API必须启用mat2sheets工作。也一定要RunOnce运行,才在“任意键”后你允许访问项目驱动通过谷歌和床单/com/device链接通过用户访问由RunOnce代码提供给您。后点击“允许”Google.com/device,然后返回到您的Matlab命令屏幕上,点击任意键。你应该好然后运行mat2sheets之后。未能在这个序列或使第三方执行RunOnce OAuth访问表将导致错误王约翰了。希望这有助于人可能遇到这个(或希望完全避免那些新的api)。和感谢安德鲁写这有用的代码。

安德鲁Bogaard

匿名信使(谢谢!)也有类似的问题广Ha Vo下面,据我所知,与java和matlab如何构建一个对象在这一步。我已经添加了一个检查这个奇怪的行为,请让我知道如果它修复以下错误:

错误mat2sheets > getSheetMetaData(第369行)
sIds (i) = jdat.sheets .properties.sheetId;
错误mat2sheets(第73行)
[nR,数控,sheetName] = getSheetMetaData (spreadsheetID, sheetID aSheets);%,以确保我们有足够的细胞”

Quang Ha签证官

你好安德鲁,感谢您的代码,但是我得到了以下错误:
不当指数矩阵参考。

错误mat2sheets > getSheetMetaData(第369行)
sIds (i) = jdat.sheets .properties.sheetId;

错误mat2sheets(第73行)
[nR,数控,sheetName] =
getSheetMetaData (spreadsheetID sheetID aSheets);%
确保我们有足够的细胞
你能给我一些建议吗?

安德鲁Bogaard

如果寻求帮助,请直接给我使用的电子邮件地址代码中提供的头(上图)。如果你的问题可能会影响到其他用户,我将它添加到这里。

王约翰

你好安德鲁,我有一些问题当我执行。
你会给我一个帮助吗?谢谢。
错误使用urlreadwrite(56行)
无法发布URL。

错误urlread(36行)
(年代,地位)= urlreadwrite (mfilename catchErrors, url,变长度输入宗量{:});

错误mat2sheets > refreshAccessToken(第400行)
newAccessTokenString = urlread ('https://accounts.google.com/o/oauth2/token”、“职位”,……

错误mat2sheets(55行)
aSheets = refreshAccessToken;%更新和获取访问令牌

大卫·卡杰尔

谢谢你的评论如何将数据附加到现有的电子表格通过“getGoogleSPreadsheet”…

有人有经验成功地这样做从公司的Gmail帐户。我能得到功能工作从个人gmail但一直未能找出改变,使其为企业账户工作。

“s = GetGoogleSpreadsheet (spreadsheetid);%得到表格
mat2sheets (spreadsheetid sheetid,大小(年代,1)+ 1,1],[1,2,3]);%示例1
mat2sheets (spreadsheetid sheetid,大小(年代,1)+ 1,1],{‘一个’,‘2’,‘三’});%例2”

克里斯·特雷沃罗

给每个人一个更新:我的问题是我没有启用Google床单API, Google Drive API。我认为他们是相同的。虽然我最终找到了我自己,安德鲁在他的反应非常迅速,渴望帮助。

克里斯·特雷沃罗

让我知道如果我能送你一个捐赠得到解决。walkinglime@gmail.com

克里斯·特雷沃罗

克里斯·特雷沃罗

我得到这个错误,但是我设置我的所有凭证和一切

没有收集元数据。最后一个反应是:403 /禁止的
粘贴数据失败。最后一个反应是:403 /禁止的

乔瓦尼·斯特拉诺

嗨,安德鲁,互联网工作。我需要去通过一个代理,我认为这可能会产生问题?

安德鲁Bogaard

嗨乔凡尼——道歉如果这听起来像是愚蠢的建议,但你的网络工作正常吗?你遵循文档了吗?我只是测试,所有从这里工作。

如果这些不工作,可能是一些关于您的系统,需要更多的信息。

安德鲁

乔瓦尼·斯特拉诺

你好,我遇到的这个问题在执行:任何提示?谢谢

错误使用mat2sheets > getSheetMetaData(第267行)
Java异常发生:
java.net.UnknownHostException: sheets.googleapis.com

java.net.AbstractPlainSocketImpl.connect(未知源)

java.net.PlainSocketImpl.connect(未知源)

java.net.SocksSocketImpl.connect(未知源)

java.net.Socket.connect(未知源)

在sun.security.ssl.SSLSocketImpl。连接(未知来源)

在sun.security.ssl.BaseSSLSocketImpl。连接(未知来源)

sun.net.NetworkClient.doConnect(未知源)

在sun.net上。www.http.HttpClient.openServer(未知源)

在sun.net上。www.http.HttpClient.openServer(未知源)

在sun.net上。www.protocol.https.HttpsClient。< init >(未知源)

在sun.net上。www.protocol.https.HttpsClient.New(未知源)


sun.net。www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(未知
源)

在sun.net上。www.protocol.http.HttpURLConnection.plainConnect(未知源)

在sun.net上。www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知源)

在sun.net上。www.protocol.http.HttpURLConnection.getInputStream(未知源)

java.net.HttpURLConnection.getResponseCode(未知源)

在sun.net上。www.protocol.https.HttpsURLConnectionImpl.getResponseCode(未知源)

错误mat2sheets(53)行
[nR,数控,sheetName] = getSheetMetaData (spreadsheetID, sheetID aSheets);%,以确保我们有
足够的细胞

安德鲁Bogaard

嗨塞德里克,事情有点忙但我会把这个任务清单。代码是为你工作,我很高兴。
安德鲁

安德鲁Bogaard

你好亨利,谢谢您的反馈!这是我如何实现你想做什么(需要GetGoogleSpreadsheet//www.tatmou.com/matlabcentral/fileexchange/39915-getgooglespreadsheet):
spreadsheetid =“XXXX”;
spreadsheetid =“XXXX”;
sheetid = ' 0 ';
s = GetGoogleSpreadsheet (spreadsheetid);%得到表格
mat2sheets (spreadsheetid sheetid,大小(年代,1)+ 1,1],[1,2,3]);%示例1
mat2sheets (spreadsheetid sheetid,大小(年代,1)+ 1,1],{‘一个’,‘2’,‘三’});%例2

aJackal

安德鲁,你愿意编写一个实用程序,把值从一个特定的细胞?
getgooglespreadsheet不正确解析表如果你使用换行字符在一个细胞。

弗兰吉波特

aJackal

非常有用!

tanmay khattar

我运行RunOnce文件,但是我怎么得到的url表格?

亨利萧

谢谢:]

亨利萧

亨利萧

很多谢谢!它的工作原理!2额外的问题希望你能帮助:
1。如何将行数据附加到最后一行吗
2。如何读取表?
谢谢你!

MATLAB版本兼容性
创建R2014a
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!