我觉得应该是一个简单的任务时,我遇到了非常困难的事情。 每周,我们的团队都会向 VMware vCenter 查询三个输出:三个不同位置的虚拟机计数。 下面是它的样子:
Name Value
---- -----
locationA 1433
locationB 278
locationC 23
这些信息将通过电子邮件发送给我们的团队,以及一些喜欢查看数据的高层。 这一切都是通过在服务器上运行的Powershell脚本和Windows任务计划程序自动完成的,没有问题。
这些数据也放在谷歌表格中。 我们只需附加一个带有日期的新行,然后将数据复制并粘贴到现有三列中。 它需要 30 秒,每周一次。 考虑到将其复制到Google工作表所需的时间很少,这似乎很愚蠢,但我真的很想使用Google Sheets API自动执行最后一个过程。
我似乎一直在寻找和说服什么是在线大雁追逐的感觉,在谷歌脚本访问和编辑谷歌表格。 我已经下载并安装了表格API库,云端硬盘API库,Google .net库,设置了Google开发人员网站,并运行了Google 表格API文档和OAuth身份验证。 我使用的是Visual Studio 2013,因为我认为在Powershell和调用.net命令时效果最好。
除了Powershell之外,我几乎没有编码经验(如果你可以称之为编码的话)。 我什至不知道如何拉动谷歌表格,更不用说对它做任何事情了。 到目前为止,我尝试过的任何方法都不起作用,而且每周手动复制此信息所需的时间很少,我已经花费了比可能值得的多得多的时间。 我觉得如果我能解决这个问题,这将为未来进一步的谷歌自动化打开大门,因为我们使用谷歌域名运营。 无论如何,非常感谢帮助。
以下是我在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;
}
}
}
对于仍在关注此内容的人,我找到了解决方案。 我完全以错误的方式(或者至少是我能理解的方式)来做这件事。 解决我问题的一个解决方案是创建一个新的 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脚本。 干净方便。
希望这对某人有所帮助。