前端导出文件为word格式(React)

对于前端导出word文档来说,感觉技术没有那么成熟(个人感觉,参数什么的也比较少)

我这里是用了这个mhtml-to-word这个库(这个库的信息更是少的可怜感觉,但还比较好用)

1.首先安装mhtml-to-word这个库

yarn add mhtml-to-word

2.引入

import { exportWord } from 'mhtml-to-word'

3.然后调用这个函数

 exportWord的参数有mhtml, style, filename, data, selector,

        mhtml:html里的body中的内容

        style:是导出为word时设定word页面中的样式(下面附图)

        filename:导出的文件名

        data :这个好像是类似模板的一个参数(具体我不太清楚怎么用,看了一下baidu-template-pro官方,应该是对应页面中替代的数据,需要转译,看起来比较复杂,详情参考:https://github.com/BetterZxx/baidu-template-pro

        selector:选择器(选择你要导出为word的id参数,例如盒子id=“mhtml”,那么这个参数就是“”“#mhtml”,导出的也就是你在mhtml下写的东西)

        style参数格式如图:

        注:有些css中的样式导出为word是并不兼容,例如float,flex等是没有效果的在word里

        如果想要导出word里有表格,在构建的时候要用table,th,tr,td等标签构建,导出为word的时候也会自动转换为word里的表格,就不会是一张不能编辑的图了,也可以先随便保存一个word,逆方法把格式改为html然后打开看一下源码,就会发现word里的表格是这类型标签。 

 小伙伴们安装这个库之后可以看看源码,源码也比较简单,主要是用baidu-template-pro和file-saveas实现的,但是它不是开源库,默认导出格式也只有doc,不能改,但是可以模仿这个库自己封装的一个函数,更改导出文件类型(我这里的需求是导出为docx)

基本上内容和mhtml-to-word库还是一致的:


import { saveAs } from "file-saver"
import baidu from "baidu-template-pro"
export const exportWord = ({ mhtml, style, filename, data, selector }) => {

    function getModelHtml(mhtml, style = '') {
        return `
              Content-Type: text/html; charset="utf-8"
                <!DOCTYPE html>
                <html>
                <head>
                <style>
                  ${style}
                </style>
                </head>
                <body>
                  ${mhtml}
                </body>
                </html>
              `
    }
    if (selector) {
        let nodes = window.document.querySelectorAll(selector)
        mhtml = nodes.length > 0 ? Array.from(nodes).reduce((a, b) => a + b.innerHTML, '') : ''
    }
    //没有baiduTemplatePro.js依赖时必须传入selector
    if (!selector && typeof baidu === 'undefined') {
        console.error("wordExport : missing (selector) for params without depandency (baiduTemplatePro.js)");
        return;
    }
    if (typeof saveAs === "undefined") {
        console.error("wordExport : missing dependency (FileSaver.js)");
        return;
    }
    //没有模板引擎时,将获取节点的html字符串生成模板
    let html = typeof baidu !== 'undefined' ? baidu.template(getModelHtml(mhtml, style), data) : getModelHtml(mhtml)
    let blob = new Blob([html], { type: 'application/msword;charset=utf-8' })
    saveAs(blob, filename + '.docx')
}

自己封装需要安装一下file-saveas这个保存的库还有baidu-template-pro模板库就OK了

这个就是mhtml的简单使用了,具体的data参数还需要研究学习一下。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端表格导出word可以通过使用HTML标签构建表格,并将其导出Word文档。首先,你可以使用table、th、tr和td等标签构建表格的结构。然后,可以使用相应的库或函数将HTML转换为Word文档格式。一个可行的方法是使用baidu-template-pro和file-saveas库来实现这个功能。你可以先创建一个docx文件,并在其中编写好表格的模板。如果数据结构中存在数组,可以使用{#xxx}{/xxx}包裹。然后,使用相应的函数将模板和数据结构进行渲染,生成最终的Word文档。请注意,这个库默认导出格式是doc,如果需要导出为docx格式,可以模仿这个库自己封装一个函数来更改导出文件类型。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [前端导出文件word格式React)](https://blog.csdn.net/HYHhmbb/article/details/126057735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [前端实现导入(excel文件)导出(word)文件](https://blog.csdn.net/weixin_44234920/article/details/120324826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值