Blob设置type为application/msword将document DOM节点转换为Word(.doc,.docx),并下载到本地

core code

javascript 复制代码
    // 导出为Word文档
    downloadWord({ dom, fileName = "", fileType = "doc", l = {} } = {}) {
        l.show && l.show();
        // 获取HTML内容
        const content = dom.innerHTML;

        // 构建Word文档的HTML结构
        const html = `
                  <!DOCTYPE html>
                  <html>
                  <head>
                      <meta charset="UTF-8">
                      <title>HTML导出文档</title>
                      <style>
                          body { font-family: Arial, sans-serif; line-height: 1.6; }
                          h1, h2, h3 { color: #2c3e50; }
                          table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
                          th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
                          th { background-color: #f2f2f2; }
                          ul, ol { margin-left: 20px; margin-bottom: 15px; }
                      </style>
                  </head>
                  <body>
                      ${content}
                  </body>
                  </html>
              `;

        // 创建Blob对象
        const blob = new Blob([html], { type: "application/msword" });

        // 创建下载链接
        const link = document.createElement("a");
        link.href = URL.createObjectURL(blob);
        link.download = `${fileName}.${fileType}`;

        // 触发下载
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        setTimeout(() => {
            l.close && l.close();
        }, 1000);
    },

demo

html 复制代码
<template>
  <div :class="$options.name">
    <h1>公司季度报告</h1>
    <p style="color: #2c3e50"><strong>2023年第三季度</strong></p>

    <h2>执行摘要</h2>
    <p>
      本季度公司业绩表现强劲,总收入同比增长25%。主要增长点来自新产品线的推出和国际市场的拓展。
    </p>

    <h2>财务亮点</h2>
    <ul>
      <li>总收入:$1.25亿 (同比增长25%)</li>
      <li>净利润:$2300万 (同比增长18%)</li>
      <li>毛利率:42% (同比提高2个百分点)</li>
    </ul>

    <h2>部门表现</h2>
    <table border="1" style="width: 100%; border-collapse: collapse">
      <tr>
        <th>部门</th>
        <th>收入</th>
        <th>同比增长</th>
      </tr>
      <tr>
        <td>产品开发</td>
        <td>$6500万</td>
        <td>+32%</td>
      </tr>
      <tr>
        <td>市场销售</td>
        <td>$4500万</td>
        <td>+18%</td>
      </tr>
      <tr>
        <td>客户服务</td>
        <td>$1500万</td>
        <td>+12%</td>
      </tr>
    </table>

    <el-button type="primary" @click="downloadWord" :loading="loading">
      下载为Word</el-button
    >
  </div>
</template>
<script>
export default {
  name: `downloadWord`,
  data() {
    return {
      loading: false,
    };
  },
  methods: {
    downloadWord(d) {
      this.$g.downloadWord({
        dom: this.$el,
        l: { show: () => (this.loading = true), close: () => (this.loading = false) },
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.downloadWord {
  box-sizing: border-box;
  padding: 20px;
  line-height: normal;
  & > * {
    margin-bottom: 10px;
    &:last-of-child {
      margin-right: 0;
      margin-bottom: 0;
    }
  }

  table {
    td,
    th {
      box-sizing: border-box;
      border: 1px solid #eee;
      box-sizing: border-box;
      padding: 20px;
    }
  }
}
</style>
相关推荐
爱学习的白杨树24 分钟前
Sentinel介绍
java·开发语言
Frankabcdefgh30 分钟前
Python基础数据类型与运算符全面解析
开发语言·数据结构·python·面试
kaiaaaa34 分钟前
算法训练第十五天
开发语言·python·算法
南玖i1 小时前
vue3 + ant 实现 tree默认展开,筛选对应数据打开,简单~直接cv
开发语言·前端·javascript
南枝异客1 小时前
三数之和-力扣
开发语言·javascript·数据结构·算法·leetcode·排序算法
爱意随风起风止意难平2 小时前
AIGC 基础篇 Python基础 05 元组,集合与字典
开发语言·python·aigc
Rose 使者2 小时前
全网手机二次放号查询接口如何用C#进行调用?
c#·api·手机二次放号
鸢时望巧2 小时前
Shell循环(二)
运维·开发语言
景彡先生2 小时前
C++ 中的 iostream 库:cin/cout 基本用法
开发语言·c++
vvilkim2 小时前
Flutter 核心概念:深入理解 StatelessWidget 与 StatefulWidget
开发语言·javascript·flutter