Markdown导出为 Excel文件 Vue3

直接复制到单文件内即可使用

需要用到的插件

  • xlsx @0.17.5
  • marked @14.0.0
  • file-saver @2.0.5
  • vue @3.4.29

直接SFC单文件内使用

javascript 复制代码
<script setup>
import {reactive} from 'vue';
import xlsx from 'xlsx';
import {marked} from 'marked';
import {saveAs} from 'file-saver';

const markdownTable = reactive({
  "code": 0,
  "message": "ok",
  "data": [
    "| 镜号 | 景别   | 场景   | 拍摄技巧       | 画面                                 | 台词               | 画面备选 | 道具   | 备注 |\n| ---- | ------ | ------ | -------------- | ------------------------------------ | ------------------ | -------- | ------ | ---- |\n| 1    | 大远景 | 山峰   | 无人机俯拍     | 无人机从高空俯拍山峰,云雾缭绕     | 大型古装仙侠爱情   |          |        |      |\n| 2    | 中景   | 山峰   | 镜头跟随       | 演员从山峰小路走下,表情凝重       |                    |          | 吊威亚 |      |\n| 3    | 近景   | 大海   | 镜头推进       | 女演员站在海边,风吹动衣裙         |                    |          |        |      |\n| 4    | 全景   | 树林   | 镜头环绕       | 男演员在树林中舞剑,树叶飘落       |                    |          |        |      |\n| 5    | 特写   | 树林   | 镜头聚焦       | 剑尖上的露珠                         |                    |          |        |      |\n| 6    | 中景   | 山峰   | 镜头快速切换   | 男女演员在山峰上相遇,眼神交流     |                    |          |        |      |\n| 7    | 大远景 | 大海   | 镜头拉远       | 大海波涛汹涌,远处有船只           |                    |          |        |      |\n| 8    | 近景   | 树林   | 镜头推进       | 女演员手抚树干,表情忧伤           |                    |          |        |      |\n| 9    | 全景   | 山峰   | 镜头环绕       | 山峰上男女演员并肩站立,背景壮丽   |                    |          |        |      |\n| 10   | 特写   | 大海   | 镜头聚焦       | 海浪拍打岩石,水花四溅             |                    |          |        |      |\n| 11   | 中景   | 树林   | 镜头跟随       | 男演员在树林中追逐,表情紧张       |                    |          |        |      |\n| 12   | 大远景 | 山峰   | 镜头拉远       | 山峰上男女演员相拥,背景云雾缭绕   |                    |          |        |      |\n| 13   | 近景   | 大海   | 镜头推进       | 女演员站在海边,眼神望向远方       |                    |          |        |      |\n| 14   | 全景   | 树林   | 镜头环绕       | 树林中男女演员相遇,背景树叶飘落   |                    |          |        |      |\n| 15   | 特写   | 山峰   | 镜头聚焦       | 山峰上男女演员手牵手,表情坚定     |                    |          |        |      |\n| 16   | 中景   | 大海   | 镜头跟随       | 大海中男女演员划船,表情平静       |                    |          |        |      |\n| 17   | 大远景 | 树林   | 镜头拉远       | 树林中男女演员并肩行走,背景宁静   |                    |          |        |      |\n| 18   | 近景   | 山峰   | 镜头推进       | 山峰上男女演员相视而笑,表情幸福   |                    |          |        |      |\n| 19   | 全景   | 大海   | 镜头环绕       | 大海中男女演员拥抱,背景波涛汹涌   |                    |          |        |      |\n| 20   | 特写   | 树林   | 镜头聚焦       | 树林中男女演员手牵手,表情坚定     |                    |          |        |      |", "\"| 镜号 | 景别   | 场景   | 拍摄技巧       | 画面                                 | 台词               | 画面备选 | 道具   | 备注 |\n| ---- | ------ | ------ | -------------- | ------------------------------------ | ------------------ | -------- | ------ | ---- |\n| 1    | 大远景 | 山峰   | 无人机俯拍     | 无人机从高空俯拍山峰,云雾缭绕     | 大型古装仙侠爱情   |          |        |      |\n| 2    | 中景   | 山峰   | 镜头跟随       | 演员从山峰小路走下,表情凝重       |                    |          | 吊威亚 |      |\n| 3    | 近景   | 大海   | 镜头推进       | 女演员站在海边,风吹动衣裙         |                    |          |        |      |\n| 4    | 全景   | 树林   | 镜头环绕       | 男演员在树林中舞剑,树叶飘落       |                    |          |        |      |\n| 5    | 特写   | 树林   | 镜头聚焦       | 剑尖上的露珠                         |                    |          |        |      |\n| 6    | 中景   | 山峰   | 镜头快速切换   | 男女演员在山峰上相遇,眼神交流     |                    |          |        |      |\n| 7    | 大远景 | 大海   | 镜头拉远       | 大海波涛汹涌,远处有船只           |                    |          |        |      |\n| 8    | 近景   | 树林   | 镜头推进       | 女演员手抚树干,表情忧伤           |                    |          |        |      |\n| 9    | 全景   | 山峰   | 镜头环绕       | 山峰上男女演员并肩站立,背景壮丽   |                    |          |        |      |\n| 10   | 特写   | 大海   | 镜头聚焦       | 海浪拍打岩石,水花四溅             |                    |          |        |      |\n| 11   | 中景   | 树林   | 镜头跟随       | 男演员在树林中追逐,表情紧张       |                    |          |        |      |\n| 12   | 大远景 | 山峰   | 镜头拉远       | 山峰上男女演员相拥,背景云雾缭绕   |                    |          |        |      |\n| 13   | 近景   | 大海   | 镜头推进       | 女演员站在海边,眼神望向远方       |                    |          |        |      |\n| 14   | 全景   | 树林   | 镜头环绕       | 树林中男女演员相遇,背景树叶飘落   |                    |          |        |      |\n| 15   | 特写   | 山峰   | 镜头聚焦       | 山峰上男女演员手牵手,表情坚定     |                    |          |        |      |\n| 16   | 中景   | 大海   | 镜头跟随       | 大海中男女演员划船,表情平静       |                    |          |        |      |\n| 17   | 大远景 | 树林   | 镜头拉远       | 树林中男女演员并肩行走,背景宁静   |                    |          |        |      |\n| 18   | 近景   | 山峰   | 镜头推进       | 山峰上男女演员相视而笑,表情幸福   |                    |          |        |      |\n| 19   | 全景   | 大海   | 镜头环绕       | 大海中男女演员拥抱,背景波涛汹涌   |                    |          |        |      |\n| 20   | 特写   | 树林   | 镜头聚焦       | 树林中男女演员手牵手,表情坚定     |                    |          |        |      |", "\"| 镜号 | 景别   | 场景   | 拍摄技巧       | 画面                                 | 台词               | 画面备选 | 道具   | 备注 |\n| ---- | ------ | ------ | -------------- | ------------------------------------ | ------------------ | -------- | ------ | ---- |\n| 1    | 大远景 | 山峰   | 无人机俯拍     | 无人机从高空俯拍山峰,云雾缭绕     | 大型古装仙侠爱情   |          |        |      |\n| 2    | 中景   | 山峰   | 镜头跟随       | 演员从山峰小路走下,表情凝重       |                    |          | 吊威亚 |      |\n| 3    | 近景   | 大海   | 镜头推进       | 女演员站在海边,风吹动衣裙         |                    |          |        |      |\n| 4    | 全景   | 树林   | 镜头环绕       | 男演员在树林中舞剑,树叶飘落       |                    |          |        |      |\n| 5    | 特写   | 树林   | 镜头聚焦       | 剑尖上的露珠                         |                    |          |        |      |\n| 6    | 中景   | 山峰   | 镜头快速切换   | 男女演员在山峰上相遇,眼神交流     |                    |          |        |      |\n| 7    | 大远景 | 大海   | 镜头拉远       | 大海波涛汹涌,远处有船只           |                    |          |        |      |\n| 8    | 近景   | 树林   | 镜头推进       | 女演员手抚树干,表情忧伤           |                    |          |        |      |\n| 9    | 全景   | 山峰   | 镜头环绕       | 山峰上男女演员并肩站立,背景壮丽   |                    |          |        |      |\n| 10   | 特写   | 大海   | 镜头聚焦       | 海浪拍打岩石,水花四溅             |                    |          |        |      |\n| 11   | 中景   | 树林   | 镜头跟随       | 男演员在树林中追逐,表情紧张       |                    |          |        |      |\n| 12   | 大远景 | 山峰   | 镜头拉远       | 山峰上男女演员相拥,背景云雾缭绕   |                    |          |        |      |\n| 13   | 近景   | 大海   | 镜头推进       | 女演员站在海边,眼神望向远方       |                    |          |        |      |\n| 14   | 全景   | 树林   | 镜头环绕       | 树林中男女演员相遇,背景树叶飘落   |                    |          |        |      |\n| 15   | 特写   | 山峰   | 镜头聚焦       | 山峰上男女演员手牵手,表情坚定     |                    |          |        |      |\n| 16   | 中景   | 大海   | 镜头跟随       | 大海中男女演员划船,表情平静       |                    |          |        |      |\n| 17   | 大远景 | 树林   | 镜头拉远       | 树林中男女演员并肩行走,背景宁静   |                    |          |        |      |\n| 18   | 近景   | 山峰   | 镜头推进       | 山峰上男女演员相视而笑,表情幸福   |                    |          |        |      |\n| 19   | 全景   | 大海   | 镜头环绕       | 大海中男女演员拥抱,背景波涛汹涌   |                    |          |        |      |\n| 20   | 特写   | 树林   | 镜头聚焦       | 树林中男女演员手牵手,表情坚定     |                    |          |        |      |,"
  ]
})

const exportTable = () => {
  // 将Markdown转换为HTML
  const html = marked(markdownTable.data[0]);
  // 创建DOM元素来存放转换后的HTML
  const container = document.createElement('div');
  container.innerHTML = html;
  // 提取表格元素
  const table = container.querySelector('table');
  // 将表格转换为工作表
  const ws = xlsx.utils.table_to_sheet(table);
  // 创建工作簿并添加工作表
  const wb = xlsx.utils.book_new();
  xlsx.utils.book_append_sheet(wb, ws, 'Sheet1');
  // 生成Excel文件并导出
  const wbout = xlsx.write(wb, {bookType: 'xlsx', type: 'binary'});
  saveAs(new Blob([s2ab(wbout)], {type: 'application/octet-stream'}), 'table.xlsx');
}

// 将字符串转换为ArrayBuffer
const s2ab = (s) => {
  const buf = new ArrayBuffer(s.length);
  const view = new Uint8Array(buf);
  for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  return buf;
}
</script>

<template>
  <div class="markdown">
    markdown
    <textarea v-model="markdownTable.data" rows="15" cols="15"></textarea>
    <button @click="exportTable">导出Excel</button>
  </div>
</template>

效果图

  • 页面效果图
  • 导出后的excel效果图
相关推荐
Forever7_9 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
不会敲代码19 小时前
前端组件化样式隔离实战:React CSS Modules、styled-components 与 Vue scoped 对比
css·vue.js·react.js
Angelial9 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
SuperEugene11 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
阿懂在掘金12 小时前
defineModel 是进步还是边界陷阱?双数据源组件的选择逻辑
vue.js·源码阅读
李剑一12 小时前
要闹哪样?又出现了一款新的格式化插件,尤雨溪力荐,速度提升了惊人的45倍!
前端·vue.js
阿虎儿12 小时前
React Context 详解:从入门到性能优化
前端·vue.js·react.js
滕青山15 小时前
文本行过滤/筛选 在线工具核心JS实现
前端·javascript·vue.js
时光不负努力15 小时前
ts+vue3开发规范
vue.js·typescript
梦想CAD控件16 小时前
在线CAD开发包结构与功能说明
前端·javascript·vue.js