sheetjs_sheetjs/demos/google-sheet
2021-04-08 11:21:37 -07:00
..
index.js Added google sheet example 2020-10-20 11:45:59 +09:00
package.json Added google sheet example 2020-10-20 11:45:59 +09:00
README.md [Tests] migrate tests to Github Actions 2021-04-08 11:21:37 -07:00

Google Sheet Demo

This demo is using drive-db to fetch a public Google Sheet and then xlsx to save the data locally as test.xlsx.

It uses modern Javascript; import/export, async/away, etc. To run this you need Node.js 12 or newer, and you will notice we added "type": "module" to the package.json.

Here is the full code:

import xlsx from "xlsx";
import drive from "drive-db";

(async () => {
  const data = await drive("1fvz34wY6phWDJsuIneqvOoZRPfo6CfJyPg1BYgHt59k");

  /* Create a new workbook */
  const workbook = xlsx.utils.book_new();

  /* make worksheet */
  const worksheet = xlsx.utils.json_to_sheet(data);

  /* Add the worksheet to the workbook */
  xlsx.utils.book_append_sheet(workbook, worksheet);

  xlsx.writeFile(workbook, "test.xlsx");
})();

Let's go over the different parts:

import xlsx from "xlsx";
import drive from "drive-db";

This imports both xlsx and drive-db libraries. While these are written in commonjs, Javascript Modules can usually import the commonjs modules with no problem.

(async () => {
  // ...
})();

This is what is called an Immediately Invoked Function Expression. These are normally used to either create a new execution context, or in this case to allow to run async code easier.

const data = await drive("1fvz34wY6phWDJsuIneqvOoZRPfo6CfJyPg1BYgHt59k");

Using drive-db, fetch the data for the given spreadsheet id. In this case it's this Google Sheet document, and since we don't specify the sheet it's the default one.

const workbook = xlsx.utils.book_new();
const worksheet = xlsx.utils.json_to_sheet(data);

We need to create a workbook with a worksheet inside. The worksheet is created from the previously fetched data. drive-db exports the data in the same format that xlsx's .json_to_sheet() method expects, so it's a straightforward operation.

xlsx.utils.book_append_sheet(workbook, worksheet);

The worksheet needs to be inside the workbook, so we use the operation .book_append_sheet() to make it so.

xlsx.writeFile(workbook, "test.xlsx");

Finally we save the workbook into a XLSX file in out filesystem. With this, now it can be opened by any spreadsheet program that we have installed.

Analytics