docs.sheetjs.com/docz/docs/03-demos/06-data/29-pouchdb.md
2023-02-24 02:55:41 -05:00

2.7 KiB

title pagination_prev pagination_next sidebar_custom_props
PouchDB demos/grid demos/worker
type
nosql

PouchDB is a pure JS database with built-in synchronization features.

Integration Details

Database#allDocs is the standard approach for bulk data export. The generated row objects have additional _id and _rev keys that should be removed.

Nested objects must be flattened. The "Tutorial" includes an example of constructing a simple array.

function export_pouchdb_to_xlsx(db) {
  /* fetch all rows, including the underlying data */
  db.allDocs({include_docs: true}, function(err, doc) {

    /* pull the individual data rows */
    const aoo = doc.rows.map(r => {
      /* `rest` will include every field from `r` except for _id and _rev */
      const { _id, _rev, ...rest } = r;
      return rest;
    });

    /* generate worksheet */
    const ws = XLSX.utils.json_to_sheet(aoo);

    /* generate workbook and export */
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
    XLSX.writeFile(wb, "SheetJSPouch.xlsx");
  });
}

Complete Example

  1. Download the "Working Version" from the Getting Started guide.

The ZIP file should have MD5 checksum ac4da7cb0cade1be293ba222462f109c:

curl -LO https://github.com/nickcolley/getting-started-todo/archive/master.zip
md5sum master.zip || md5 master.zip
### the checksum will be printed

If the download is unavailable, a mirror is available at https://docs.sheetjs.com/pouchdb/master.zip

  1. Unzip the master.zip file and enter the folder:
unzip master.zip
cd getting-started-todo-master
  1. Edit index.html to reference the SheetJS library and add a button:
  <body>
<!-- highlight-start -->
    <script src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js"></script>
    <button id="xport">Export!</button>
<!-- highlight-end -->
    <section id="todoapp">
  1. Just before the end of app.js, add a click event listener:
  if (remoteCouch) {
    sync();
  }

  // highlight-start
  document.getElementById("xport").addEventListener("click", function() {
    db.allDocs({include_docs: true}, function(err, doc) {
      const aoo = doc.rows.map(r => {
        const { _id, _rev, ... rest } = r.doc;
        return rest;
      });
      const ws = XLSX.utils.json_to_sheet(aoo);
      const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
      XLSX.writeFile(wb, "SheetJSPouch.xlsx");
    });
  });
  // highlight-end
})();
  1. Start a local web server:
npx http-server .

Access http://localhost:8080 from your browser. Add a few items and click the "Export!" button to generate a new file.