// this method creates the spreadsheet, deletes the old one if overwrite is on and there's already on with the same name, // and adds the worksheets if they've been specified. Wrapped in a static method so other components (like WriteToSpreadsheet) // can make use of it and create new spreadsheets. public static SpreadsheetEntry createNewSpreadsheet(GH_ActiveObject activeObj, AuthToken authToken, string sheetName, List<string> worksheets, bool overwrite) { SpreadsheetEntry matchingEntry = null; //setup OAuth Parameters OAuth2Parameters parameters = GDriveUtil.GetParameters(authToken); // It seems clunky to need both a SpreadsheetService and a DocumentService - but // DocumentService is necessary to add/delete spreadsheets, and SpreadsheetService // is needed to manipulate the worksheets. //setup auth and factory for documentsService GOAuth2RequestFactory requestFactory = new GOAuth2RequestFactory(null, "MyDocumentsListIntegration-v1", parameters); DocumentsService docService = new DocumentsService("MyDocumentsListIntegration-v1"); docService.RequestFactory = requestFactory; //setup SpreadsheetsService SpreadsheetsService service = GDriveUtil.GetSpreadsheetsService(parameters); //make spreadsheet documentquery Google.GData.Documents.SpreadsheetQuery dQuery = new Google.GData.Documents.SpreadsheetQuery(); DocumentsFeed dFeed = docService.Query(dQuery); //if user has opted to overwrite, find first matching spreadsheet and delete. If no matching spreadsheet found, nothing happens. if (overwrite) { foreach (DocumentEntry entry in dFeed.Entries) { if (entry.Title.Text.Equals(sheetName)) { docService.Delete(entry); break; } } } //create new spreadsheet object DocumentEntry dEntry = new DocumentEntry(); dEntry.Title.Text = sheetName; dEntry.Categories.Add(DocumentEntry.SPREADSHEET_CATEGORY); docService.Insert(DocumentsListQuery.documentsBaseUri, dEntry); //find the spreadsheet we just created as a SpreadsheetEntry matchingEntry = GDriveUtil.findSpreadsheetByName(sheetName, service); //if worksheets specified, add worksheets if (worksheets.Count > 0) { if (matchingEntry == null) //this shouldn't ever happen, since we just created a new spreadsheet called sheetName. { activeObj.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Something went wrong with spreadsheet creation."); return null; } WorksheetFeed wsFeed = matchingEntry.Worksheets; //first, we find the existing worksheets, store them, add new ones, and then delete the old. List<WorksheetEntry> entriesToDelete = new List<WorksheetEntry>(); foreach (WorksheetEntry entry in wsFeed.Entries) { entriesToDelete.Add(entry); } // find the dimensions of the first worksheet, to use for other worksheet creation uint rows = ((WorksheetEntry)wsFeed.Entries[0]).Rows; uint cols = ((WorksheetEntry)wsFeed.Entries[0]).Cols; for (int i = 0; i < worksheets.Count; i++) { { string wsName = worksheets[i]; WorksheetEntry entry = new WorksheetEntry(rows, cols, wsName); service.Insert(wsFeed, entry); } } foreach (WorksheetEntry entryToDelete in entriesToDelete) { entryToDelete.Delete(); } } //end if worksheets... return matchingEntry; }
private WorksheetEntry createSpreadSheet(string sheetName) { DocumentsService docService = new DocumentsService(this.googleAppName); docService.RequestFactory = GoogleOauthAccess.getRequestFactory(this.googleAppName, this.parameters); DocumentEntry entry = new DocumentEntry(); entry.Title.Text = sheetName; entry.Categories.Add(DocumentEntry.SPREADSHEET_CATEGORY); DocumentEntry newEntry = docService.Insert(DocumentsListQuery.documentsBaseUri, entry); return this.searchForSpreadsheet(entry.Title.Text); }