use-google-sheets
v3.0.0
Published
### A React Hook wrapper library for google-sheets-mapper for getting data from Google Sheets API v4
Maintainers
Readme
useGoogleSheets
A React Hook wrapper library for google-sheets-mapper for getting data from Google Sheets API v4
Installation
npm install use-google-sheetspnpm add use-google-sheetsbun add use-google-sheetsPackage available on unpkg.
Usage
- Go to Google Cloud Console to get API key for Google Sheets API.
- Create a Google Sheet and add some data. See example sheet.
- Share it with "Anyone with this link can view".
- Get sheet id from url of the sheet.
https://docs.google.com/spreadsheets/d/[THIS-IS-THE-SHEET-ID]/- I suggest adding API key and sheet id to
.envfile
Examples
Get data from all sheets inside the spreadsheet
import useGoogleSheets, { Status } from "use-google-sheets";
const App = () => {
const { status, data, error } = useGoogleSheets({
apiKey: process.env.REACT_APP_GOOGLE_API_KEY,
sheetId: process.env.REACT_APP_GOOGLE_SHEETS_ID,
});
if (status === Status.pending) {
return <div>Loading...</div>;
}
if (status === Status.error) {
return <div>Error!</div>;
}
return <div>{JSON.stringify(data)}</div>;
};Get data from specific sheets inside the spreadsheet
Don't use single quotes on sheet names, they will be removed because when using space in sheet name it will be returned wrapped with single quotes and plugin will remove them for clean string id.
import useGoogleSheets, { Status } from "use-google-sheets";
const App = () => {
const { status, data } = useGoogleSheets({
apiKey: process.env.REACT_APP_GOOGLE_API_KEY,
sheetId: process.env.REACT_APP_GOOGLE_SHEETS_ID,
sheetsOptions: [{ id: "Sheet1" }],
});
if (status === Status.pending) {
return <div>Loading...</div>;
}
if (status === Status.error) {
return <div>Error!</div>;
}
return <div>{JSON.stringify(data)}</div>;
};Refetch data from all sheets inside the spreadsheet
import useGoogleSheets, { Status } from "use-google-sheets";
const App = () => {
const { status, data, refetch } = useGoogleSheets({
apiKey: process.env.REACT_APP_GOOGLE_API_KEY,
sheetId: process.env.REACT_APP_GOOGLE_SHEETS_ID,
});
if (status === Status.pending) {
return <div>Loading...</div>;
}
if (status === Status.error) {
return <div>Error!</div>;
}
return (
<div>
<div>{JSON.stringify(data)}</div>
<button onClick={refetch}>Refetch</button>
</div>
);
};API Documentation
The useGoogleSheets hook takes an object with three properties:
| Name | Value | | ------------- | ------ | | apiKey | string | | sheetId | string | | sheetsOptions | array |
apiKeyis a Google Sheets API v4 key from Google Cloud Console.sheetIdis the id of the sheet.sheetsOptionsis an array of specific objects{ id, headerRowIndex }. Can be left out then it will fallback to all sheets inside the spreadsheet and use first row from sheet as header.
Exposed Data
The hook produces an HookState object:
const { status, data, error, refetch, loading } = useGoogleSheets({
apiKey,
sheetId,
});| Name | Value |
| ------- | --------------------------------------- |
| status | "pending" | "success" | "error" |
| data | array |
| error | null or object |
| refetch | function |
| loading | boolean (deprecated, use status) |
statusindicates the current state of the request:pending- request is in-flightsuccess- data received successfullyerror- request failed
loadingistruewhenstatus === "pending"(deprecated).datais an array of mapped data objects.
[
{
id: "Sheet1",
data: [
{ key: "language", value: "et" },
{ key: "title", value: "Test sheet" },
],
},
];errorlets you know when there is something wrong. It returns an error object where you can get specific error properties fromerror.response
{
status: '404',
statusText: '',
url: 'https://sheets.googleapis.com/v4/spreadsheets/...',
}Status Constant
Import the Status constant for status comparisons:
import { Status } from "use-google-sheets";
Status.pending; // "pending"
Status.success; // "success"
Status.error; // "error"Migration from v2 to v3
- New
statusfield:"pending"|"success"|"error"(aligned with TanStack Query) loadingis still available but deprecated (usestatus === "pending")calledhas been removed
Migration from v1 to v2
- Change
sheetsNamesarray of string tosheetsOptionsarray of objects with{ id: 'sheetName' }
