我对自己感觉非常困难应该是一项简单的任务。每周,我们的团队都会向VMware vCenter查询三项输出:三个不同位置的VM计数。这是它的样子:
Name Value
---- -----
locationA 1433
locationB 278
locationC 23
这些信息通过电子邮件发送给我们的团队,以及一些喜欢查看数据的高层人士。这是通过在服务器上运行的Powershell脚本和Windows任务计划程序自动完成的,没有任何问题。
该数据也放在Google表格中。我们只是在日期附加一个新行,然后将数据复制并粘贴到三个现有列中。它需要30秒,每周一次。考虑到将其复制到Google表格所花费的时间很少,但我真的想要使用Google表格API自动执行最后一个流程,这似乎很愚蠢。
我似乎一直在寻找并坚持在谷歌脚本中访问和编辑Google表格的感觉。我已下载并安装了Sheets API库,Drive API库,Google .net库,设置了Google开发者网站,并运行了Google Sheet API文档和OAuth身份验证。我正在使用Visual Studio 2013,因为我认为使用Powershell并调用.net命令会发挥最佳效果。
我在Powershell之外几乎没有编码经验(如果你可以称之为编码)。我甚至无法弄清楚如何拉动Google表格,更不用说做任何事了。我到目前为止没有尝试过任何工作,而且每周手动复制这些信息的时间很短,我已经花了很多时间而不是可能值得。我觉得如果我能掌握这一点,那将来会为我们进一步的Google自动化打开大门,因为我们使用的是Google域名。无论如何,非常感谢帮助。
以下是我在Visual Studio中的最新脚本尝试:
using System;
using Google.GData.Client;
using Google.GData.Spreadsheets;
namespace MySpreadsheetIntegration
{
class Program {
static void Main(string[] args)
{
string CLIENT_ID = "abunchofcharacters.apps.googleusercontent.com";
string CLIENT_SECRET = "secretnumber";
string REDIRECT_URI = "https://code.google.com/apis/console";
OAuth2Parameters parameters = new OAuth2Parameters();
parameters.ClientId = CLIENT_ID;
parameters.ClientSecret = CLIENT_SECRET;
parameters.RedirectUri = REDIRECT_URI;
parameters.Scope = SCOPE;
string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
Console.WriteLine(https://code.google.com/apis/console);
Console.WriteLine("Please visit the URL above to authorize your OAuth "
+ "request token. Once that is complete, type in your access code to "
+ "continue..."));
parameters.AccessCode = Console.ReadLine();
OAuthUtil.GetAccessToken(parameters);
string accessToken = parameters.AccessToken;
Console.WriteLine("OAuth Access Token: " + accessToken);
GOAuth2RequestFactory requestFactory =
new GOAuth2RequestFactory(null, "MySpreadsheetIntegration-v1", parameters);
SpreadsheetsService service = new SpreadsheetsService("MySpreadsheetIntegration-v1");
service.RequestFactory = requestFactory;
var driveService = new DriveService(auth);
var file = new File();
file.Title = "VSI - VM Totals by Service TEST";
file.Description = string.Format("Created via {0} at {1}", ApplicationName, DateTime.Now.ToString());
file.MimeType = "application/vnd.google-apps.spreadsheet";
var request = driveService.Files.Insert(file);
var result = request.Fetch();
var spreadsheetLink = "https://docs.google.com/spreadsheets/d/GoogleDoc_ID";
Console.WriteLine("Created at " + spreadsheetLink);
End Class;
End Namespace;
}
}
}
答案 0 :(得分:0)
对于仍然关注此事的人,我找到了解决方案。我完全以错误的方式处理这个问题(或者至少是我能理解的方式)。我的问题的一个解决方案是创建一个新的Google脚本,该脚本每周只访问一次我的电子邮件(在我们收到报告之后)并且除了我要查找的数据之外的所有内容并将其发送到Google电子表格。
这是脚本:
function SendtoSheet(){
var threads = GmailApp.search("from:THESENDER in:anywhere subject:THESUBJECTOFTHEEMAILWHICHNEVERCHANGES")[0];
var message = threads.getMessages().pop()
var bodytext = message.getBody();
counts = []
bodytext = bodytext.split('<br>');
for (var i=0 ; i < bodytext.length; i++){
line = bodytext[i].split(':');
if (line.length > 0){
if (!isNaN(line[1])){counts.push(line[1]);}}}
var now = new Date()
counts.unshift(Utilities.formatDate(now, 'EST', 'MM/dd/yyyy'))
var sheet = SpreadsheetApp.openById("GoogleDocID")
sheet = sheet.setActiveSheet(sheet.getSheetByName("Data by Week"))
sheet.appendRow(counts)
}
Counts数组包含通过换行符分解和提取数字数据的魔力。完美的工作。它不涉及如何使用Visual Studio,.net Google库或编辑正在运行的PowerShell脚本。干净又简单。
希望这有助于某人。