vue2项目中在线预览csv文件

简介

希望在项目中,在线预览.csv文件,本以为插件很多,结果都只是支持excel(.xls、.xlsx)一到.csv就歇菜。。。

关于文件预览

vue-office文档查看在线演示demo,支持docx、.xlsx、pdf、pptx格式,优势可以vue组件形式嵌入系统,只需要普通文档预览使用这个足矣。

univer文档查看在线演示demo、支持docx、.xlsx、pdf、pptx格式,以.xlsx为主,不如vue-office接入简单,也不如kkFileView、OnlyOffice支持的格式丰富。

kkFileView文档查看在线演示demo、大部分格式都支持,但需要后端部署,优势比OnlyOffice支持格式更多。

OnlyOffice文档vue3组件、大部分格式都支持,但需要后端部署,优势有vue3组件,且支持在线编辑实时保存、多人协同。

效果

简单粗暴无需手动添加样式,引入调用即可 。
heiho.js github :用于渲染弹窗
PapaParse github:用于解析csv文件
在这里插入图片描述

源码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="referrer" content="no-referrer" />
    <meta name="viewport"
        content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no, viewport-fit=cover" />
    <title>vue2项目中在线预览csv文件</title>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@kktsvetkov/heiho@0.3.3/heiho.css" />
    <style>
        /* 页面所需样式 */
        html,
        body,
        #app {
            width: 100%;
            margin: 0;
            padding: 0;
        }

        .cardBox {
            width: 50%;
            border-radius: 8px;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding-top: 20px;
            margin: 0 auto;
        }
    </style>
</head>

<body style="background: #eee;">
    <div id="app" class="pt10">
        <div class="cardBox pl10 pr10 pt15 pb15 borBox bgf ml12 mr12 mb12 fz16">
            <p>在线预览csv文件</p>
            <button @click="viewForUrl">通过在线可访问的csv地址的方式</button>
            <br />
            <button @click="viewForFlie">通过接口返回csv文件流的方式</button>
        </div>
    </div>
</body>

<script src="https://lib.baomitu.com/vue/2.6.14/vue.js"></script>
<!-- 引入heiho -->
<script src="https://cdn.jsdelivr.net/npm/@kktsvetkov/heiho@0.3.3/heiho.min.js"></script>
<!-- 引入papaparse -->
<script src="https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data() {
            return {

            }
        },
        created() {

        },
        mounted() {

        },
        methods: {
            // 在线可访问的csv文件,可通过路径方式预览
            viewForUrl(){
                Papa.parse(
                    'https://support.staffbase.com/hc/en-us/article_attachments/360009197071/email.csv', 
                    {
                        download: true,
                        complete: function(results) {
                            const data = results.data;
                            // 渲染组件
                            Heiho(data, { max: data.length });
                        }
                    }
                );
            },
            // 无法访问的文件,通过接口拿到文件流的方式预览
            viewForFlie(){
                fetch('https://support.staffbase.com/hc/en-us/article_attachments/360009197071/email.csv')
                .then(response => {
                    if (response.ok) {
                        return response.blob();
                    }
                    throw new Error('Network response was not ok.');
                })
                .then(blob => {
                    Papa.parse(
                        blob, 
                        {
                            complete: function(results) {
                                const data = results.data;
                                // 渲染组件
                                Heiho(data, { max: data.length, title: 'email.csv' });
                            }
                        }
                    );
                })
            }
        }
    })
</script>

</html>
外传

期待2025、这几年互联网似乎进入了末期,好像经济危机在身边,可能十年后,人们会谈论着202x年就是低谷期。
我也是时常跟媳妇说,再失业了,如果找不到合适的码农岗位,我就要转行了。自古逢秋悲寂寥,我言秋日胜春朝。

Vue.js中将数据导出为CSV文件可以通过以下步骤实现: 1. **准备数据**:首先,你需要有一组数据,这些数据将导出为CSV格式。 2. **创建CSV格式**:将数据转换为CSV格式的字符串。 3. **创建Blob对象**:使用转换后的CSV字符串创建一个Blob对象。 4. **生成下载链接**:创建一个临时的下载链接,并模拟点击以触发下载。 以下是一个简单的示例代码,展示了如何在Vue.js中实现这一功能: ```html <template> <div> <button @click="exportToCSV">导出为CSV</button> </div> </template> <script> export default { data() { return { data: [ { name: '张三', age: 25, city: '北京' }, { name: '李四', age: 30, city: '上海' }, { name: '王五', age: 28, city: '广州' } ] }; }, methods: { exportToCSV() { // 标题行 const csvRows = []; const headers = Object.keys(this.data[0]); csvRows.push(headers.join(',')); // 数据行 for (const row of this.data) { const values = headers.map(header => { const escaped = ('' + row[header]).replace(/"/g, '\\"'); return `"${escaped}"`; }); csvRows.push(values.join(',')); } // 创建CSV字符串 const csvString = csvRows.join('\n'); // 创建Blob对象 const blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' }); // 生成下载链接 const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.setAttribute('href', url); link.setAttribute('download', 'data.csv'); document.body.appendChild(link); link.click(); // 清理 document.body.removeChild(link); URL.revokeObjectURL(url); } } }; </script> ``` 在这个示例中,我们首先准备了一组数据,然后在`exportToCSV`方法中将这些数据转换为CSV格式,并生成一个下载链接,最终触发下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘斩仙的笔记本

富贵险中求

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值