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 } }
 | 
						|
  ] }
 | 
						|
});
 |