forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								import { google } from "googleapis";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Change this import statement to point to the credentials JSON file */
							 | 
						||
| 
								 | 
							
								import creds from './sheetjs-test-726272627262.json' assert { type: "json" };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Change this to the primary account address, NOT THE SERVICE ACCOUNT */
							 | 
						||
| 
								 | 
							
								const acct = "YOUR_ADDRESS@gmail.com";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* connect to google services */
							 | 
						||
| 
								 | 
							
								const jwt = new google.auth.JWT({
							 | 
						||
| 
								 | 
							
								  email: creds.client_email,
							 | 
						||
| 
								 | 
							
								  key: creds.private_key,
							 | 
						||
| 
								 | 
							
								  scopes: [
							 | 
						||
| 
								 | 
							
								    'https://www.googleapis.com/auth/spreadsheets',
							 | 
						||
| 
								 | 
							
								    'https://www.googleapis.com/auth/drive.file',
							 | 
						||
| 
								 | 
							
								  ]
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const sheets = google.sheets({ version: "v4", auth: jwt });
							 | 
						||
| 
								 | 
							
								const drive = google.drive({version: "v3", auth: jwt });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* create new google workbook */
							 | 
						||
| 
								 | 
							
								const [id, sheet0id] = await (async() => {
							 | 
						||
| 
								 | 
							
								  const res = await sheets.spreadsheets.create({
							 | 
						||
| 
								 | 
							
								    requestBody: {
							 | 
						||
| 
								 | 
							
								      properties: {
							 | 
						||
| 
								 | 
							
								        title: "SheetJS Test"
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  const id = res.data.spreadsheetId;
							 | 
						||
| 
								 | 
							
								  const sheet0id = res.data.sheets[0].properties.sheetId;
							 | 
						||
| 
								 | 
							
								  return [id, sheet0id];
							 | 
						||
| 
								 | 
							
								})();
							 | 
						||
| 
								 | 
							
								console.log(`Created Google Workbook ${id}`);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* create new google worksheet and delete initial sheet */
							 | 
						||
| 
								 | 
							
								const [sheet1id, sheet2id] = await (async() => {
							 | 
						||
| 
								 | 
							
								  const res = await sheets.spreadsheets.batchUpdate({
							 | 
						||
| 
								 | 
							
								    spreadsheetId: id,
							 | 
						||
| 
								 | 
							
								    requestBody: { requests: [
							 | 
						||
| 
								 | 
							
								      /* add SheetJS1 */
							 | 
						||
| 
								 | 
							
								      { addSheet: { properties: { title: "SheetJS1" } } },
							 | 
						||
| 
								 | 
							
								      /* add SheetJS2 */
							 | 
						||
| 
								 | 
							
								      { addSheet: { properties: { title: "SheetJS2" } } },
							 | 
						||
| 
								 | 
							
								      /* remove default sheet */
							 | 
						||
| 
								 | 
							
								      { deleteSheet: { sheetId: sheet0id } },
							 | 
						||
| 
								 | 
							
								    ] }
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  console.log(`Created Google Worksheets "SheetJS1" and "SheetJS2"`);
							 | 
						||
| 
								 | 
							
								  return res.data.replies.slice(0,2).map(r => r.addSheet.properties.sheetId);
							 | 
						||
| 
								 | 
							
								})();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								await sheets.spreadsheets.values.update({
							 | 
						||
| 
								 | 
							
								  spreadsheetId: id,
							 | 
						||
| 
								 | 
							
								  range: "SheetJS1!A1",
							 | 
						||
| 
								 | 
							
								  valueInputOption: "USER_ENTERED",
							 | 
						||
| 
								 | 
							
								  resource: { values: [
							 | 
						||
| 
								 | 
							
								    ["Sheet", "JS"],
							 | 
						||
| 
								 | 
							
								    [72, 62]
							 | 
						||
| 
								 | 
							
								  ]}
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								await sheets.spreadsheets.values.update({
							 | 
						||
| 
								 | 
							
								  spreadsheetId: id,
							 | 
						||
| 
								 | 
							
								  range: "SheetJS2!A1",
							 | 
						||
| 
								 | 
							
								  valueInputOption: "USER_ENTERED",
							 | 
						||
| 
								 | 
							
								  resource: { values: [
							 | 
						||
| 
								 | 
							
								    ["Area Code", "Part 1", "Part 2"],
							 | 
						||
| 
								 | 
							
								    [201, 867, 5309],
							 | 
						||
| 
								 | 
							
								    [281, 330, 8004],
							 | 
						||
| 
								 | 
							
								  ]}
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Share new Document with the primary account */
							 | 
						||
| 
								 | 
							
								try {
							 | 
						||
| 
								 | 
							
								  await drive.permissions.create({
							 | 
						||
| 
								 | 
							
								    fileId: id,
							 | 
						||
| 
								 | 
							
								    fields: "id",
							 | 
						||
| 
								 | 
							
								    requestBody: {
							 | 
						||
| 
								 | 
							
								      type: "user",
							 | 
						||
| 
								 | 
							
								      role: "writer",
							 | 
						||
| 
								 | 
							
								      emailAddress: acct
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  console.log(`Shared ${id} with ${acct}`);
							 | 
						||
| 
								 | 
							
								} catch(e) { console.log(e); }
							 |