Web 纯前端导出带样式的表格为 Excel 文件

当需要将带有样式的表格导出为Excel文件时,可以使用js-xxx库来实现。该库提供了一个名为exportFile的函数,可以将HTML内容导出为Excel文件。

javascript 复制代码
/**
 * 导出数据为文件
 * @example
 * exportFile(data); /// 导出 txt 文件
 * exportFile(data, 'csv-导出文件测试', 'csv'); /// 导出 csv 文件
 * exportFile(document.getElementById('table_to_xls').outerHTML, 'excelWithStyle', 'xls'); /// 导出表格为带样式的 excel xls 文件
 * exportFile('http://a.biugle.cn/img/cdn/dev/avatar/1.png', 'test', 'png'); /// 导出 png 文件
 * @param data 数据
 * @param fileName 文件名
 * @param fileType 文件类型
 * @returns
 */
export function exportFile(data: string, fileName?: string, fileType = 'txt'): void {
  if (isUrl(data)) {
    // eslint-disable-next-line spellcheck/spell-checker
    download(data, `${fileName ?? formatDate(new Date(), 'yyyy-mm-dd-hhiiss')}.${fileType}`);
    return;
  }
  // 加入特殊字符确保 utf-8
  // eslint-disable-next-line spellcheck/spell-checker
  const uri = `data:${getContentType(fileType)};charset=utf-8,\ufeff${encodeURIComponent(data)}`;
  // U+FEFF 是一个零宽度非断字符(Zero Width No-Break Space),也称为"字节顺序标记(Byte Order Mark,BOM)"。
  // eslint-disable-next-line spellcheck/spell-checker
  download(uri, `${fileName ?? formatDate(new Date(), 'yyyy-mm-dd-hhiiss')}.${fileType}`);
  // downloadContent 可以兼容落后浏览器的情况
}

下面是介绍如何导出带样式的表格为 Excel 文件

如何导出带样式的表格为Excel文件

在Web开发中,有时我们需要将网页上的表格导出为Excel文件,同时保留表格的样式。本文将介绍如何使用js-xxx库来实现这一功能。

准备工作

首先,我们需要引入js-xxx库。在本示例中,我们将使用以下CDN链接:

html 复制代码
<script src="https://pandaoh.github.io/js-xxx/html/js-xxx.min.js"></script>

const { exportFile } = $xxx;

// 或者

npm i js-xxx

import { exportFile } from 'js-xxx';
const { exportFile } = require('js-xxx');

创建带样式的表格

我们将创建一个九九乘法表作为示例,并为表格添加一些样式。以下是示例HTML代码:

html 复制代码
<!DOCTYPE html>
<html>
  <head lang="zh-cmn-Hans">
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>带样式的 excel 表格导出 demo</title>
    <script src="https://pandaoh.github.io/js-xxx/html/js-xxx.min.js"></script>
  </head>
  <body>
    <div id="table-export-demo">
      <h1 style="color: red">九九乘法表</h1>
      <table style="border: 2px solid blue">
        <tbody id="multiplicationTable"></tbody>
      </table>
    </div>

    <script>
      var table = document.getElementById('multiplicationTable');

      for (var i = 1; i <= 9; i++) {
        var row = document.createElement('tr');
        row.style.border = '1px solid green';
        table.appendChild(row);

        for (var j = 1; j <= 9; j++) {
          var cell = document.createElement('td');
          cell.style.border = '1px solid green';

          if (i === j) {
            if ((i * j) % 3 === 0) {
              cell.className = 'equals triple';
            } else {
              cell.className = 'equals';
            }
          } else if ((i * j) % 3 === 0) {
            cell.className = 'triple';
          }

          cell.textContent = i + '×' + j + '=' + i * j;
          row.appendChild(cell);
        }
      }

      document.getElementById('my-btn').onclick = () => {
        const { exportFile, printDom } = $xxx;
        exportFile(
          document.getElementById('table-export-demo').outerHTML,
          `excelTableWithStyle-${new Date().getTime()}`,
          'xls'
        );

        // printDom('#table-export-demo', {
        //   bodyStyle: {
        //     padding: '10px',
        //     backgroundColor: 'red'
        //   }
        // });
      };
    </script>
    <button id="my-btn">download</button>
  </body>
</html>

在上述示例中,我们首先创建一个带有id为table-export-demo的<div>元素,用于包裹整个导出内容。在该<div>中,我们创建一个带有样式的九九乘法表,并将其放置在一个带有id为multiplicationTable的<tbody>元素中。

导出表格为Excel文件

在示例代码的最后,我们使用exportFile函数将带样式的表格导出为Excel文件。exportFile函数接受三个参数:

  1. 导出的HTML内容,这里我们使用document.getElementById('table-export-demo').outerHTML获取整个导出内容的HTML字符串。
  2. 导出文件的名称,这里我们使用excelTableWithStyle-${new Date().getTime()}作为文件名,确保每次导出都有唯一的名称。
  3. 导出文件的格式,这里我们使用'xls'表示导出为Excel文件。

注意

  • 样式需些行内样式,因为导出的是 dom 元素,并没有包含类样式这些。
  • 最好用一个大的 div 包起需要导出的部分。
  • 如果需要导出类样式,可以参考 js-xxx 的 printDom 方法。
  • 使用 printDom 等打印样式时,请注意需要开启浏览器打印设置中的 - 更多设置-背景图像显示开关

完成上述步骤后,当页面加载后,点击导出按钮,可以将带有样式的表格导出为 Excel 文件。

演示预览

以上就是如何使用js-xxx库将带样式的表格导出为Excel文件的介绍。通过这个简单的示例,你可以在自己的项目中轻松实现类似的功能。希望本文对你有所帮助!

相关推荐
Csvn3 小时前
运行时性能
前端
Never_every994 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck4 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖5 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
欣欣之王来了7 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒7 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师7 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端
特立独行的猫A7 小时前
10 MB 的桌面 AI 客户端:用仓颉 + 系统 WebView 替代 Electron
前端·harmonyos
修炼的dance8 小时前
白底图存JPG,sharp开mozjpeg背景杂点少近三成
前端
anOnion8 小时前
构建无障碍组件之Grid Pattern
前端·html·交互设计