Unfortunately, you cannot use quill-better-table with ngx-quill wrapper. ngx-quill is still based on quilljs v1. quill-better-table requires quilljs v2.0.0-dev.3. You can read about that in the Requirements section: here

I can share with you how I implemented simple paste and read table in my case. Its inspired by this article and created with custom block. And its not a correct way to add elements to quill. But we are using editor internally so we are sure that it is in safe hands.

  1. Create a new 'Block Embed' like this:
import Quill from 'quill';
const BlockEmbed = Quill.import('blots/block/embed');

    export class TableBlockEmbed extends BlockEmbed {

      static blotName = 'TableBlockEmbed';
      static tagName = 'table';

      static create(value) {
        const node = super.create();
        let valueToReturn = value;
        if (!value.includes('assignedTableId')) {
          const tableId = `assignedTableId-${Date.now()}`;
          valueToReturn = value
            .replace('#tableId', `#${tableId}`)
            .replace('table-layout: fixed;', '');
          node.setAttribute('id', tableId);
        } else {
          const existedId = valueToReturn.match(/#assignedTableId-(\d+)/i)[1];
          node.setAttribute('id', `assignedTableId-${existedId}`);
        }
        node.innerHTML = this.transformValue(valueToReturn);
        return node;
      }

      static transformValue(value) {
        let handleArr = value.split('\n');
        handleArr = handleArr.map(e => e.replace(/^[\s]+/, '')
          .replace(/[\s]+$/, ''));
        return handleArr.join('');
      }

      static value(node) {
        return node.innerHTML;
      }
    }
  1. Run registration of new embed block in the constructor of your component which uses ngx-quill:
constructor() {
    Quill.register(TableBlockEmbed, true);
  }
  1. add on editor Created this code below. (you can of course add/remove styles here you need. I added for example margin: 0 auto !important; because I want to force table to be always centered):
onEditorCreated(quill: Quill): void {
    quill.clipboard.addMatcher('TABLE', (node, delta) => {
      const Delta = Quill.import('delta');
      const tableTagStyles = node.getAttribute('style');
      return new Delta([
        {
          insert: {
            TableBlockEmbed:
              `<style>#tableId {${tableTagStyles} margin: 0 auto !important; }</style>` + delta.ops[0].insert.TableBlockEmbed
          }
        }
      ]);
    });
  }
  1. I added also some styles:
quill-view,
quill-editor{
  ::ng-deep {
    table {
      width: 100%; // if table has no width - then give it by default 100%
      max-width: 100% !important;
      box-sizing: border-box;
    }
  }
}

I know this solution is just workaround but until waiting for ngx-quill based on quill 2, I was able at least to give the feature of pasting tables inside the editor which looks quite nice.

Example:

table in office word:

table in ngx-quill:

table in excel:

table in ngx-quill:

Answer from Potwór z Lochness on Stack Overflow
🌐
GitHub
github.com › KillerCodeMonkey › ngx-quill › issues › 546
ngx-quill support table? · Issue #546 · KillerCodeMonkey/ngx-quill
August 9, 2019 - ngx-quill works fine; very good. but i have a problem with table. When i set table: true in the imports; an error come: ... QuillModule.forRoot({ modules: { table: true, //without table: true it works fine. } .... "quill Cannot import mo...
Author   nosz
🌐
StackBlitz
stackblitz.com › edit › stackblitz-starters-13iu4c7q
ngx-quill & quill-table-up Test - StackBlitz
An angular-cli project based on @angular/animations, @angular/common, @angular/compiler, @angular/core, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic, @angular/router, core-js, rxjs, tslib and zone.js
Discussions

Error when trying to implement quill-better-table with quill editor component in Angular - Stack Overflow
Unfortunately, you cannot use quill-better-table with ngx-quill wrapper. ngx-quill is still based on quilljs v1. quill-better-table requires quilljs v2.0.0-dev.3. More on stackoverflow.com
🌐 stackoverflow.com
Does quill editor supports table??
I'm using https://codepen.io/quill/pen/QxypzX this demo...but I'm unable to develop it in angular project I'm using quill version 1.3.7 and ngx-quill version 12.0.1 More on github.com
🌐 github.com
12
September 14, 2020
Quill table
Can you please provide some code. More on reddit.com
🌐 r/Angular2
4
1
August 30, 2019
What Quill version to use?
Boilerplate-free mapping: The database schema is mapped using simple case classes. ... Quill supports Oracle version 12c and up although due to licensing ......Read more > Angular 8,9 Rich Text Editor using Ngx-Quill Example Tutorial More on lightrun.com
🌐 lightrun.com
7
🌐
npm
npmjs.com › package › ngx-quill
ngx-quill - npm
Angular components for the easy use of the QuillJS richt text editor.. Latest version: 30.0.1, last published: 3 months ago. Start using ngx-quill in your project by running `npm i ngx-quill`. There are 161 other projects in the npm registry using ngx-quill.
      » npm install ngx-quill
    
Published   Dec 03, 2025
Version   30.0.1
Author   Bengt Weiße
Top answer
1 of 1
2

Unfortunately, you cannot use quill-better-table with ngx-quill wrapper. ngx-quill is still based on quilljs v1. quill-better-table requires quilljs v2.0.0-dev.3. You can read about that in the Requirements section: here

I can share with you how I implemented simple paste and read table in my case. Its inspired by this article and created with custom block. And its not a correct way to add elements to quill. But we are using editor internally so we are sure that it is in safe hands.

  1. Create a new 'Block Embed' like this:
import Quill from 'quill';
const BlockEmbed = Quill.import('blots/block/embed');

    export class TableBlockEmbed extends BlockEmbed {

      static blotName = 'TableBlockEmbed';
      static tagName = 'table';

      static create(value) {
        const node = super.create();
        let valueToReturn = value;
        if (!value.includes('assignedTableId')) {
          const tableId = `assignedTableId-${Date.now()}`;
          valueToReturn = value
            .replace('#tableId', `#${tableId}`)
            .replace('table-layout: fixed;', '');
          node.setAttribute('id', tableId);
        } else {
          const existedId = valueToReturn.match(/#assignedTableId-(\d+)/i)[1];
          node.setAttribute('id', `assignedTableId-${existedId}`);
        }
        node.innerHTML = this.transformValue(valueToReturn);
        return node;
      }

      static transformValue(value) {
        let handleArr = value.split('\n');
        handleArr = handleArr.map(e => e.replace(/^[\s]+/, '')
          .replace(/[\s]+$/, ''));
        return handleArr.join('');
      }

      static value(node) {
        return node.innerHTML;
      }
    }
  1. Run registration of new embed block in the constructor of your component which uses ngx-quill:
constructor() {
    Quill.register(TableBlockEmbed, true);
  }
  1. add on editor Created this code below. (you can of course add/remove styles here you need. I added for example margin: 0 auto !important; because I want to force table to be always centered):
onEditorCreated(quill: Quill): void {
    quill.clipboard.addMatcher('TABLE', (node, delta) => {
      const Delta = Quill.import('delta');
      const tableTagStyles = node.getAttribute('style');
      return new Delta([
        {
          insert: {
            TableBlockEmbed:
              `<style>#tableId {${tableTagStyles} margin: 0 auto !important; }</style>` + delta.ops[0].insert.TableBlockEmbed
          }
        }
      ]);
    });
  }
  1. I added also some styles:
quill-view,
quill-editor{
  ::ng-deep {
    table {
      width: 100%; // if table has no width - then give it by default 100%
      max-width: 100% !important;
      box-sizing: border-box;
    }
  }
}

I know this solution is just workaround but until waiting for ngx-quill based on quill 2, I was able at least to give the feature of pasting tables inside the editor which looks quite nice.

Example:

table in office word:

table in ngx-quill:

table in excel:

table in ngx-quill:

🌐
npm Trends
npmtrends.com › ngx-quill-vs-ngx-quill-editor-vs-quill-better-table-vs-quill-table
ngx-quill vs ngx-quill-editor vs quill-better-table vs quill-table | npm trends
Comparing trends for ngx-quill 28.0.1 which has 264,182 weekly downloads and 1,836 GitHub stars vs. ngx-quill-editor 2.2.2 which has 708 weekly downloads and 231 GitHub stars vs. quill-better-table 1.2.10 which has 18,342 weekly downloads and 340 GitHub stars vs. quill-table 1.0.0 which has ...
🌐
GitHub
github.com › slab › quill › issues › 3173
Does quill editor supports table?? · Issue #3173 · slab/quill
September 14, 2020 - Does quill editor supports table??#3173 · Copy link · codingmania321 · opened · on Sep 14, 2020 · Issue body actions · I'm using https://codepen.io/quill/pen/QxypzX this demo...but I'm unable to develop it in angular project · I'm using quill version 1.3.7 and ngx-quill version 12.0.1 ·
Author   codingmania321
🌐
npm
npmjs.com › package › quill-table-better
quill-table-better - npm
September 4, 2025 - import Quill from 'quill'; import QuillTableBetter from 'quill-table-better'; import 'quill/dist/quill.snow.css'; import 'quill-table-better/dist/quill-table-better.css' Quill.register({ 'modules/table-better': QuillTableBetter }, true); const toolbarOptions = [ ['bold', 'italic', 'underline', 'strike'], ['table-better'] ]; const options = { theme: 'snow', modules: { table: false, toolbar: toolbarOptions, 'table-better': { language: 'en_US', menus: ['column', 'row', 'merge', 'table', 'cell', 'wrap', 'copy', 'delete'], toolbarTable: true }, keyboard: { bindings: QuillTableBetter.keyboardBindings } } }; const quill = new Quill('#root', options);
      » npm install quill-table-better
    
Published   Sep 04, 2025
Version   1.2.3
Author   attoae
🌐
CodePen
codepen.io › soccerloway › pen › WWJowj
Quill-better-table Demo
Quill.register({ 'modules/better-table': quillBetterTable }, true) window.onload = () => { const quill = new Quill('#editor', { theme: 'snow', modules: { table: false, 'better-table': { operationMenu: { items: { unmergeCells: { text: 'Another unmerge cells name' } }, color: { colors: ['green', 'red', 'yellow', 'blue', 'white'], text: 'Background Colors:' } } }, // keyboard: { // bindings: quillBetterTable.keyboardBindings // } } }) let tableModule = quill.getModule('better-table') document.body.querySelector('#insert-table') .onclick = () => { tableModule.insertTable(3, 3) } document.body.quer
Find elsewhere
🌐
IssueHunt
oss.issuehunt.io › r › KillerCodeMonkey › ngx-quill-example › issues › 217
Whenever I try to integrate quill-better-table with ngx- ...
KillerCodeMonkey/ngx-quill-example · The issue has been closed · Alec-Aldrine-Lakra posted onGitHub · Update comments · Fund this Issue · $0.00 · Funded · Pull requests · Submit a pull request · AboutMission · SpectrumEmbed · FAQTerms of usePrivacy policyCode of conductCredits ·
🌐
npm
npmjs.com › package › quill-better-table
quill-better-table - npm
June 30, 2020 - Right-click on table to open context menu, you can see the button. ... Since I use webpack externals to bundle, you must expose Quill to window object, like load quill.js by script tag globally.
      » npm install quill-better-table
    
Published   Jun 30, 2020
Version   1.2.10
Author   soccerloway
🌐
Medium
dalezak.medium.com › using-tables-in-quill-js-with-rails-and-stimulus-ddd0521ab0cb
Using Tables In Quill.js With Rails and Stimulus | by Dale Zak | Medium
March 25, 2021 - <%= form.hidden_field :html, data: { quill: { target: "input" } } %> <div style="min-height:500px;" data-quill-target="editor"></div>
🌐
StackBlitz
stackblitz.com › edit › angular-w2o33c
Angular (forked) - StackBlitz
Starter project for Angular apps that exports to the Angular CLI
🌐
npm
npmjs.com › package › ngx-quill-v2
ngx-quill-v2 - npm
May 23, 2019 - An angular (>= v2) component for the easy use of the QuillJS rich text editor for v2 release. The v2 release is a dev preview which has new experimental features like table support..
      » npm install ngx-quill-v2
    
Published   May 23, 2019
Version   0.0.1
Author   Arghya Saha
🌐
Openbase
openbase.com › js › ngx-quill › versions
ngx-quill: Versions | Openbase
As $event data you get the quill instance. ... Special thanks to @Benny739! Now the valueSetter is used even on init. We can configure the placeholder for the link tooltip Updated deps ... Since the latest refactorings only angular 9 is supported. If you want to use ngx-quill with angular 8 then please use <v9
🌐
Freakyjolly
freakyjolly.com › angular-rich-text-editor-using-ngx-quill-tutorial
Angular 8,9 Rich Text Editor using Ngx-Quill Example Tutorial
April 30, 2023 - To use Quill editor in Angular project we need to install the Angular directive and Quill library by running following NPM commands given below: $ npm install ngx-quill $ npm install quill $ npm install quill-emoji
🌐
UNPKG
unpkg.com › browse › ngx-quill@4.6.3 › README.md
ngx-quill
Donations to the project are always ... initialisation, e.g. rtl direction - [Ionic v3 Demo](https://github.com/KillerCodeMonkey/ngx-quill-ionic-v3) ## Compatibility to Angular Versions <table> <thead> <tr> <th>Angular</th> <th>ngx-quill</th> </tr> </thead> <tbody> <tr> <td> v4 </td> ...
🌐
Npm
npm.io › package › ngx-quill-v2
Ngx-quill-v2 NPM | npm.io
I have kept the link of all the existing examples from ngx-quill. In addition to the examples I have added a new example using table support.
🌐
Npm
npm.io › search › keyword:quill
Quill | npm.io
quillquilljsimageupload1.3.0 • Published 3 years ago ... editorrich textwysiwygangulardirectiveangularjsricht text editorquillquilljs4.5.3 • Published 6 years ago · Module for better table in Quill, more useful features are supported.