react项目导出数据doc格式及其他格式方法

简介: react项目导出数据doc格式及其他格式方法

1.场景


如下图所示,项目要求对页面中的数据下载到本地,并以某种类型展示,如Word、doc、html等。在这个项目中要求下载为doc文件和HTML文件,其实下载功能还是很简单的,关键的地方就是下载后的格式问题,比如doc其实就是表格或者文档的格式。

6e59d385cd5d455fa81962910e525491.png

image.png

2.思路


我的思路是这样的,我会根据需求将需要导出的数据,在项目中找个地方以table、th表格标签的形式写,然后设置display:none,目的是不让多出来的结构影响到原本的页面,然后绑定ref,然后再通过模板字符串的形式,渲染出来。下面我是代码实例。

3.实现


第一步,准备数据,隐藏标签,绑定ref


             // 1.准备数据,要下载的数据,以表格的形式书写。
               <div ref={wrapperRef}>
                     <table style={{display: "none"}} className='table11_7 resultTable'>
                          <tr>
                              <th>序号</th>
                              <th>名称</th>
                              <th>是否存在漏洞</th>
                              {/* <th>开放情况</th> */}
                          </tr>
                          {list.map((ele, idx) => (
                              <tr className='tr'>
                                  <td className='td td1'>{idx + 1}</td>
                                  <td className='td td2'>{ele.data.Id}</td>
                                  <td className='td td3'>{ele.data.status} </td>
                                  {/* <td className='td td4'> </td> */}
                              </tr>
                          ))}
                     </table>
               </div>

第二步,通过模板字符串生成数据


需要注意的是,如果不以table标签书写,下载后的doc文件很乱,html则没事,所以还是尽量用table标签去写。

代码中的最后几行是下载功能,个人感觉是挺万金油的,可以根据需要下载为任意类型的文件

image.png

以下代码实例为,点击按钮下载。

 <Button
                        onClick={(e) => {
                            let resHtml = `
                             <!DOCTYPE html>
                             <html lang="en">
                             <head>
                                 <meta charset="UTF-8">
                                 <meta http-equiv="X-UA-Compatible" content="IE=edge">
                                 <meta name="viewport" content="width=device-width, initial-scale=1.0">
                                 <title>Document</title>
                                 <style>
                                    .table11_7 table {
                                        width:500px;
                                        margin:15px 0;
                                        border:0;
                                    }
                                    .table11_7 th {
                                        background-color:#00A5FF;
                                        color:#FFFFFF
                                    }
                                    .table11_7,.table11_7 th,.table11_7 td {
                                        font-size:0.95em;
                                        width:800px;
                                        text-align:center;
                                        padding:10px;
                                        border-collapse:collapse;
                                    }
                                    .table11_7 th,.table11_7 td {
                                        border: 1px solid #2087fe;
                                        border-width:1px 0 1px 0;
                                        border:2px inset #ffffff;
                                    }
                                    .table11_7 tr {
                                        border: 1px solid #ffffff;
                                    }
                                    .table11_7 tr:nth-child(odd){
                                        background-color:#aae1fe;
                                    }
                                    .table11_7 tr:nth-child(even){
                                        background-color:#ffffff;
                                    }
                                 </style>
                             </head>
                             <body>
                                <div style="display:flex;">  
                                    <div> ${listRef.current.innerHTML}</div>
                                </div>
                                <div style="display:flex;"> 
                                    <div style=" ">
                                         ${listRef3.current.innerHTML}</div>
                                    </div>
                                </div>
                             </body>
                             </html>
                            `
                            var datastr = "data:text/html;charset=utf-8," + encodeURIComponent(resHtml)
                            var downloadAnchorNode = document.createElement("a")
                            downloadAnchorNode.setAttribute("href", datastr)
                            downloadAnchorNode.setAttribute(
                                "download",
                                `${localStorage.getItem("verboseNameRaw")}-${localStorage.getItem("isStart")}.html`
                            )
                            downloadAnchorNode.click()
                            downloadAnchorNode.remove()
                        }}
                    >
                        .HTML
                    </Button>
相关文章
|
14小时前
|
前端开发 JavaScript 测试技术
从零开始搭建react+typescript+antd+redux+less+vw自适应项目
从零开始搭建react+typescript+antd+redux+less+vw自适应项目
64 0
|
14小时前
|
前端开发 API 数据安全/隐私保护
【第45期】一文解决React项目的权限管理
【第45期】一文解决React项目的权限管理
116 0
|
14小时前
|
Web App开发 资源调度 JavaScript
竟然可以在一个项目中混用 Vue 和 React?
竟然可以在一个项目中混用 Vue 和 React?
179 0
|
14小时前
|
前端开发
【专栏】在 create-react-app 中集成 less/sass 预处理器和 react-css-modules 的方法
【4月更文挑战第29天】本文介绍了在 create-react-app 中集成 less/sass 预处理器和 react-css-modules 的方法。首先,通过 `npm` 安装 less 或 sass 依赖,然后修改 `config-overrides.js` 配置文件以支持 less/sass 编译。接着,详细阐述如何使用 less/sass 编写样式。再者,安装 react-css-modules 并配置 webpack,使能样式模块化。最后,展示了如何结合使用 less/sass 和 react-css-modules,以提升前端开发的效率和代码质量。
|
14小时前
|
存储 人工智能 开发框架
【AI大模型应用开发】【AutoGPT系列】0. AutoGPT概念及原理介绍 - Agent开发框架及ReAct方法
【AI大模型应用开发】【AutoGPT系列】0. AutoGPT概念及原理介绍 - Agent开发框架及ReAct方法
25 0
|
14小时前
|
前端开发 JavaScript
React生命周期方法在实际开发中的应用场景有哪些?
【4月更文挑战第6天】 React 生命周期方法应用于数据获取、订阅管理、渲染逻辑处理、用户交互响应、性能优化、资源清理、强制更新、错误处理、动画实现、代码分割、服务端渲染、路由处理、依赖注入和集成第三方库。它们帮助控制组件行为和性能,但现代开发推荐使用Hooks替代部分生命周期方法。
18 0
|
14小时前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
14小时前
|
存储 JSON 前端开发
react保姆级搭建新项目
此文主要以ts+vite+router6+antd 快速搭建一个react项目,适用于初学者,用于学习交流
|
14小时前
|
移动开发 JavaScript 前端开发
vue/react项目刷新页面出现404的原因以及解决办法
vue/react项目刷新页面出现404的原因以及解决办法
224 0
|
14小时前
|
前端开发 中间件 数据安全/隐私保护
React路由进阶方法
React路由进阶方法
29 1

热门文章

最新文章