Reputation: 355
am new stuck with a problem, am not able to write data in google sheet , read data from google sheet is working fine, can anyone try to tell me where am wrong please try to fix my code. If you have any question please free feel to ask any time.
sheet.js
import { google } from 'googleapis';
export async function getDataFromSheets() {
try {
const target = ['https://www.googleapis.com/auth/spreadsheets.readonly'];
const jwt = new google.auth.JWT(
process.env.GOOGLE_SHEETS_CLIENT_EMAIL,
null,
(process.env.GOOGLE_SHEETS_PRIVATE_KEY || '').replace(/\\n/g, '\n'),
target
);
const sheets = google.sheets({ version: 'v4', auth: jwt });
const response = await sheets.spreadsheets.values.get({
spreadsheetId: process.env.SPREADSHEET_ID,
range: 'sheet'
});
const rows = response.data.values;
const res = await sheets.spreadsheets.values.append({
spreadsheetId: process.env.SPREADSHEET_ID,
range: 'sheet',
valueInputOption: 'USER_ENTERED',
requestBody: {
values: [['']],
}
})
console.log(res)
if (rows.length) {
return rows.map((row) => ({
title: row[0],
description: row[1],
}));
}
} catch (err) {
console.log(err);
}
return [];
}
index.js
This is the index.js file. where we write our output code.
import Head from 'next/head'
import Image from 'next/image'
import styles from '../styles/Home.module.css'
import { getDataFromSheets } from './libs/sheets'
export default function Home({ data }) {
return (
<div className={styles.container}>
<Head>
<title>Nextsheet 💩</title>
<meta
name="description"
content="Connecting NextJS with Google Spreadsheets as Database"
/>
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<h1>Welcome to Nextsheet 💩</h1>
<p>Connecting NextJS with Google Spreadsheets as Database</p>
<ul>
{data && data.length ? (
data.map((item) => (
<li key={item}>
{item.title} - {item.description}
</li>
))
) : (
<li>Error: do not forget to setup your env variables 👇</li>
)}
</ul>
</main>
</div>
)
}
export async function getStaticProps(context) {
const sheet = await getDataFromSheets();
return {
props: {
data: sheet.slice(0, sheet.length), // remove sheet header
},
revalidate: 1, // In seconds
};
}
Upvotes: 0
Views: 273
Reputation: 201513
When I saw your script, it seems that you use the scope of https://www.googleapis.com/auth/spreadsheets.readonly
. In this case, the values can be retrieved. But, when the values are put, such an error showing in the image occurs. So how about the following modification?
const target = ['https://www.googleapis.com/auth/spreadsheets.readonly'];
const target = ['https://www.googleapis.com/auth/spreadsheets'];
Upvotes: 1