Node.js 如何快速导出多表头的excel文件

133 阅读1分钟

Node.js 如何快速导出嵌套列(多表头)的excel文件。效果图如下:

1:使用 @zurmokeeper/exceljs, V4.4.1以上 安装:

npm i @zurmokeeper/exceljs

2: 有一个 worksheet.makeColumns 方法,API文档: 代码示例:

                        const workbook = new ExcelJS.Workbook();
                            const worksheet = workbook.addWorksheet('Sheet1', {
                                  views: [{state: 'frozen', xSplit: 0, ySplit: 2}], // 冻结第1行和第二行
                                      });
                                          // 设置多级表头
                                              worksheet.makeColumns([
                                                    {
                                                            id: 1,
                                                                    title: '姓名',
                                                                          },
                                                                                {id: 2, title: 'Qwe'},
                                                                                      {id: 3, title: 'Foo'},
                                                                                            {
                                                                                                    id: 4,
                                                                                                            title: '基础信息',
                                                                                                                    children: [
                                                                                                                              {id: 41, title: 'Zoo 1'},
                                                                                                                                        {id: 42, title: 'Zoo 2'},
                                                                                                                                                  {id: 44, title: 'Zoo 3'},
                                                                                                                                                          ],
                                                                                                                                                                },
                                                                                                                                                                      {
                                                                                                                                                                              id: 5,
                                                                                                                                                                                      title: 'Zoo1',
                                                                                                                                                                                              children: [
                                                                                                                                                                                                        {id: 51, title: 'Zoo 51'},
                                                                                                                                                                                                                  {id: 52, title: 'Zoo 52'},
                                                                                                                                                                                                                            {id: 54, title: 'Zoo 53'},
                                                                                                                                                                                                                                    ],
                                                                                                                                                                                                                                          },
                                                                                                                                                                                                                                                {id: 6, title: 'Foo123213'},
                                                                                                                                                                                                                                                    ]);
                                                                                                                                                                                                                                                        const data = [
                                                                                                                                                                                                                                                              [1, 2, 3, null, null, 'DOB'],
                                                                                                                                                                                                                                                                    [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                          [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                                [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                                      [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                                            [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                                                  [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                                                        [1, 'electron', 'DOB'],
                                                                                                                                                                                                                                                                                                            ];
                                                                                                                                                                                                                                                                                                                worksheet.addRows(data);
                                                                                                                                                                                                                                                                                                                    worksheet.columns.forEach(function(column) {
                                                                                                                                                                                                                                                                                                                          column.alignment = {horizontal: 'center', vertical: 'middle'};
                                                                                                                                                                                                                                                                                                                              });
                                                                                                                                                                                                                                                                                                                                  await workbook.xlsx.writeFile(test);
                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                  })()" title="" data-bs-original-title="复制" aria-label="复制"></button>
</div>
const ExcelJS = require('@zurmokeeper/exceljs');
(async ()=>{
  const test = 'test.xlsx';
  <span class="hljs-keyword">const</span> <span class="hljs-variable constant_">workbook</span> = <span class="hljs-keyword">new</span> ExcelJS.<span class="hljs-title function_ invoke__">Workbook</span>();
      <span class="hljs-keyword">const</span> <span class="hljs-variable constant_">worksheet</span> = workbook.<span class="hljs-title function_ invoke__">addWorksheet</span>(<span class="hljs-string">'Sheet1'</span>, {
            <span class="hljs-attr">views</span>: [{<span class="hljs-attr">state</span>: <span class="hljs-string">'frozen'</span>, <span class="hljs-attr">xSplit</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">ySplit</span>: <span class="hljs-number">2</span>}], // 冻结第<span class="hljs-number">1</span>行和第二行
                });
                    <span class="hljs-comment">// 设置多级表头</span>
                        worksheet.<span class="hljs-title function_ invoke__">makeColumns</span>([
                              {
                                      <span class="hljs-attr">id</span>: <span class="hljs-number">1</span>,
                                              <span class="hljs-attr">title</span>: <span class="hljs-string">'姓名'</span>,
                                                    },
                                                          {<span class="hljs-attr">id</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Qwe'</span>},
                                                                {<span class="hljs-attr">id</span>: <span class="hljs-number">3</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Foo'</span>},
                                                                      {
                                                                              <span class="hljs-attr">id</span>: <span class="hljs-number">4</span>,
                                                                                      <span class="hljs-attr">title</span>: <span class="hljs-string">'基础信息'</span>,
                                                                                              <span class="hljs-attr">children</span>: [
                                                                                                        {<span class="hljs-attr">id</span>: <span class="hljs-number">41</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo 1'</span>},
                                                                                                                  {<span class="hljs-attr">id</span>: <span class="hljs-number">42</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo 2'</span>},
                                                                                                                            {<span class="hljs-attr">id</span>: <span class="hljs-number">44</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo 3'</span>},
                                                                                                                                    ],
                                                                                                                                          },
                                                                                                                                                {
                                                                                                                                                        <span class="hljs-attr">id</span>: <span class="hljs-number">5</span>,
                                                                                                                                                                <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo1'</span>,
                                                                                                                                                                        <span class="hljs-attr">children</span>: [
                                                                                                                                                                                  {<span class="hljs-attr">id</span>: <span class="hljs-number">51</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo 51'</span>},
                                                                                                                                                                                            {<span class="hljs-attr">id</span>: <span class="hljs-number">52</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo 52'</span>},
                                                                                                                                                                                                      {<span class="hljs-attr">id</span>: <span class="hljs-number">54</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Zoo 53'</span>},
                                                                                                                                                                                                              ],
                                                                                                                                                                                                                    },
                                                                                                                                                                                                                          {<span class="hljs-attr">id</span>: <span class="hljs-number">6</span>, <span class="hljs-attr">title</span>: <span class="hljs-string">'Foo123213'</span>},
                                                                                                                                                                                                                              ]);
                                                                                                                                                                                                                                  <span class="hljs-keyword">const</span> <span class="hljs-variable constant_">data</span> = [
                                                                                                                                                                                                                                        [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-literal">null</span>, <span class="hljs-literal">null</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                              [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                    [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                          [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                                [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                                      [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                                            [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                                                  [<span class="hljs-number">1</span>, <span class="hljs-string">'electron'</span>, <span class="hljs-string">'DOB'</span>],
                                                                                                                                                                                                                                                                                      ];
                                                                                                                                                                                                                                                                                          worksheet.<span class="hljs-title function_ invoke__">addRows</span>(data);
                                                                                                                                                                                                                                                                                              worksheet.columns.<span class="hljs-title function_ invoke__">forEach</span>(function(column) {
                                                                                                                                                                                                                                                                                                    column.alignment = {horizontal: <span class="hljs-string">'center'</span>, vertical: <span class="hljs-string">'middle'</span>};
                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                            await workbook.xlsx.<span class="hljs-title function_ invoke__">writeFile</span>(test);
                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                            })()</pre>