forked from sheetjs/docs.sheetjs.com
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { google } from "googleapis";
 | |
| 
 | |
| import { set_fs, readFile, utils } from 'xlsx';
 | |
| import * as fs from 'fs';
 | |
| set_fs(fs);
 | |
| 
 | |
| /* 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 spreadsheet ID */
 | |
| const id = "SOME-SPREADSHEETJS-ID";
 | |
| 
 | |
| /* 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 });
 | |
| 
 | |
| /* get existing sheets */
 | |
| const wsheet = await sheets.spreadsheets.get({spreadsheetId: id});
 | |
| 
 | |
| /* remove all sheets after the first */
 | |
| if(wsheet.data.sheets.length > 1) await sheets.spreadsheets.batchUpdate({
 | |
|   spreadsheetId: id,
 | |
|   requestBody: { requests:
 | |
|     wsheet.data.sheets.slice(1).map(s => ({
 | |
|       deleteSheet: {
 | |
|         sheetId: s.properties.sheetId
 | |
|       }
 | |
|     }))
 | |
|   }
 | |
| });
 | |
| 
 | |
| /* read file */
 | |
| const wb = readFile("pres.numbers");
 | |
| 
 | |
| /* rename first worksheet to avoid collisions */
 | |
| const props0 = wsheet.data.sheets[0].properties;
 | |
| if(wb.SheetNames.map(n => n.toLowerCase()).includes(props0.title.toLowerCase())) {
 | |
|   await sheets.spreadsheets.batchUpdate({
 | |
|     spreadsheetId: id,
 | |
|     requestBody: { requests: [{
 | |
|       updateSheetProperties: {
 | |
|         fields: "title",
 | |
|         properties: {
 | |
|           sheetId: props0.sheetId,
 | |
|           title: "thistitleisatleast33characterslong"
 | |
|         }
 | |
|       }
 | |
|     }]}
 | |
|   });
 | |
|   console.log(`renamed "${props0.title}" to "thistitleisatleast33characterslong"`);
 | |
| }
 | |
| 
 | |
| /* add sheets from file */
 | |
| for(let name of wb.SheetNames) {
 | |
|   const aoa = utils.sheet_to_json(wb.Sheets[name], {header:1});
 | |
|   await sheets.spreadsheets.batchUpdate({
 | |
|     spreadsheetId: id,
 | |
|     requestBody: { requests: [
 | |
|       /* add new sheet */
 | |
|       { addSheet: { properties: { title: name } } },
 | |
|     ] }
 | |
|   });
 | |
|   await sheets.spreadsheets.values.update({
 | |
|     spreadsheetId: id,
 | |
|     range: `'${name}'!A1`,
 | |
|     valueInputOption: "USER_ENTERED",
 | |
|     resource: { values: aoa }
 | |
|   });
 | |
|   console.log(`Created Google Worksheet "${name}"`);
 | |
| }
 | |
| 
 | |
| /* remove first sheet */
 | |
| const res = await sheets.spreadsheets.batchUpdate({
 | |
|   spreadsheetId: id,
 | |
|   requestBody: { requests: [
 | |
|     /* remove old first sheet */
 | |
|     { deleteSheet: { sheetId: wsheet.data.sheets[0].properties.sheetId } }
 | |
|   ] }
 | |
| });
 |