最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3+TypeScript實(shí)現(xiàn)Docx/Excel預(yù)覽組件

 更新時(shí)間:2024年04月26日 09:19:34   作者:下雨會(huì)打傘的前端  
這篇文章主要為大家詳細(xì)介紹了如何使用Vue3+TypeScript實(shí)現(xiàn)Docx/Excel預(yù)覽組件,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下

簡(jiǎn)介

在現(xiàn)代的 Web 應(yīng)用中,預(yù)覽文檔和表格是一個(gè)常見(jiàn)的需求。本文將介紹如何使用 Vue3 和 TypeScript 開(kāi)發(fā)一個(gè)高度可定制的文檔和表格預(yù)覽組件。

技術(shù)棧

Vue3

TypeScript

Element Plus

unocss

vue-office

PDF文檔預(yù)覽

使用 Vue3 + TypeScript 實(shí)現(xiàn) PDF 預(yù)覽組件

Docx 預(yù)覽組件

功能特點(diǎn)

  • 支持的文件格式: 僅支持預(yù)覽 Docx 類型的文件。
  • 自定義選項(xiàng): 提供豐富的渲染選項(xiàng),如頁(yè)面寬度、高度、字體等。
  • 通知提示: 在不支持的文件類型時(shí),會(huì)彈出通知提示。

組件實(shí)現(xiàn)

// types
export interface RenderOptions {
	className?: string; // 默認(rèn)和文檔樣式類的類名/前綴
	inWrapper?: boolean; // 啟用在文檔內(nèi)容周圍的包裝器渲染
	ignoreWidth?: boolean; // 禁用頁(yè)面寬度渲染
	ignoreHeight?: boolean; // 禁用頁(yè)面高度渲染
	ignoreFonts?: boolean; // 禁用字體渲染
	breakPages?: boolean; // 啟用分頁(yè)在頁(yè)面斷點(diǎn)上
	ignoreLastRenderedPageBreak?: boolean; // 禁用在lastRenderedPageBreak元素上的分頁(yè)
	experimental?: boolean; // 啟用實(shí)驗(yàn)性功能(制表符計(jì)算)
	trimXmlDeclaration?: boolean; // 如果為true,將從解析之前的xml文檔中移除xml聲明
	useBase64URL?: boolean; // 如果為true,圖像、字體等將轉(zhuǎn)換為base 64 URL,否則使用URL.createObjectURL
	useMathMLPolyfill?: boolean; // 包括MathML填充,適用于chrome、edge等
	showChanges?: boolean; // 啟用文檔更改的實(shí)驗(yàn)性渲染(插入/刪除)
	debug?: boolean; // 啟用額外的日志記錄
}
<script setup lang="ts">
import { ref, computed } from "vue";
import VueOfficeDocx from "@vue-office/docx";
import "@vue-office/docx/lib/index.css";
import { ElNotification } from "element-plus";
import { RenderOptions } from "./types";

interface DocxProps {
	height?: string; // 組件高度 ==> 非必傳(默認(rèn)為 150px)
	customOptions?: RenderOptions; // 配置參數(shù) ==> 非必傳(默認(rèn)為 {})
}
// 接收父組件參數(shù)并設(shè)置默認(rèn)值
const props = withDefaults(defineProps<DocxProps>(), {
	height: "80vh"
});

const show = ref(false);
const loading = ref(true);
const docx = ref();
const url = ref("http://static.shanhuxueyuan.com/test.docx");

const customStyle = computed(() => {
	return {
		height: props.height
	};
});

const renderedCallback = () => {
	loading.value = false;
};

const open = async (src?: string) => {
	show.value = true;
	if (src) {
		url.value = src;
	}
	fetch(url.value)
		.then(response => response.blob())
		.then(res => {
			if (res.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
				docx.value = res;
			} else {
				ElNotification({
					title: "提示",
					message: "目前僅支持預(yù)覽 Docx 類型的文件",
					type: "warning"
				});
			}
		});
};

defineExpose({
	open
});
</script>

<template>
	<div>
		<el-dialog v-model="show" align-center title="預(yù)覽" width="80%">
			<VueOfficeDocx v-loading="loading" :options="customOptions" :style="customStyle" :src="docx" @rendered="renderedCallback" />
		</el-dialog>
	</div>
</template>

<style lang="scss" scoped></style>

Excel預(yù)覽組件

功能特點(diǎn)

  • 支持的文件格式: 僅支持預(yù)覽 Excel 類型的文件。
  • 自定義選項(xiàng): 提供豐富的渲染選項(xiàng),如最小渲染列數(shù)、行數(shù)等。
  • 通知提示: 在不支持的文件類型時(shí),會(huì)彈出通知提示。
// types
export interface ExcelRenderOptions {
	minColLength: number; // excel最少渲染多少列
	minRowLength: number; // excel最少渲染多少行
	widthOffset: number; // 在默認(rèn)渲染的列表寬度上再加10px寬
	heightOffset: number; // 在默認(rèn)渲染的列表高度上再加10px高
	beforeTransformData: (workbookData: any) => any; // 修改workbookData的函數(shù)類型定義
	transformData?: (workbookData: any) => any; // 修改workbookData的函數(shù)類型定義
}
<script setup lang="ts">
import { ref, computed } from "vue";
import VueOfficeExcel from "@vue-office/excel";
import "@vue-office/excel/lib/index.css";
import { ElNotification } from "element-plus";
import { type ExcelRenderOptions } from "./types";

interface DocxProps {
	height?: string; // 組件高度 ==> 非必傳(默認(rèn)為 150px)
	customOptions?: Partial<ExcelRenderOptions>; // 配置參數(shù) ==> 非必傳(默認(rèn)為 {})
}
// 接收父組件參數(shù)并設(shè)置默認(rèn)值
const props = withDefaults(defineProps<DocxProps>(), {
	height: "80vh"
});

const show = ref(false);
const loading = ref(true);
const docx = ref();
const url = ref("http://static.shanhuxueyuan.com/demo/excel.xlsx");

const customStyle = computed(() => {
	return {
		height: props.height
	};
});

const renderedCallback = () => {
	loading.value = false;
};

const open = async (src?: string) => {
	show.value = true;
	if (src) {
		url.value = src;
	}
	fetch(url.value)
		.then(response => response.blob())
		.then(res => {
			if (res.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
				docx.value = res;
			} else {
				ElNotification({
					title: "提示",
					message: "目前僅支持預(yù)覽 Excel 類型的文件",
					type: "warning"
				});
			}
		});
};

defineExpose({
	open
});
</script>

<template>
	<div>
		<el-dialog v-model="show" align-center title="預(yù)覽" width="80%">
			<VueOfficeExcel
				v-loading="loading"
				:options="customOptions"
				:style="customStyle"
				:src="docx"
				@rendered="renderedCallback"
			/>
		</el-dialog>
	</div>
</template>

<style lang="scss" scoped></style>

總結(jié)

通過(guò)使用 Vue3 和 TypeScript,我們可以輕松地開(kāi)發(fā)出高度可定制的文檔和表格預(yù)覽組件。這些組件不僅提供了豐富的功能,還支持多種自定義選項(xiàng),以滿足不同項(xiàng)目的需求。

以上就是Vue3+TypeScript實(shí)現(xiàn)Docx/Excel預(yù)覽組件的詳細(xì)內(nèi)容,更多關(guān)于Vue3 TypeScript預(yù)覽組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue封裝組件的過(guò)程詳解

    vue封裝組件的過(guò)程詳解

    這篇文章主要為大家詳細(xì)介紹了vue中封裝組件的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入了解vue有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Vue實(shí)現(xiàn)手機(jī)計(jì)算器

    Vue實(shí)現(xiàn)手機(jī)計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)手機(jī)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Vue3實(shí)戰(zhàn)之插槽封裝與懶加載詳解

    Vue3實(shí)戰(zhàn)之插槽封裝與懶加載詳解

    這篇文章主要介紹了Vue3實(shí)戰(zhàn)之插槽封裝與懶加載的相關(guān)資料,過(guò)插槽實(shí)現(xiàn)組件的結(jié)構(gòu)分離、復(fù)用性和語(yǔ)義清晰,通過(guò)懶加載實(shí)現(xiàn)圖片的按需加載,減少首屏加載時(shí)間和資源浪費(fèi),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2025-04-04
  • vue實(shí)現(xiàn)評(píng)論列表

    vue實(shí)現(xiàn)評(píng)論列表

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)評(píng)論列表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue3中如何使用component :is 加載組件

    Vue3中如何使用component :is 加載組件

    Monaco-editor,一個(gè)vs code 編輯器,需要將其集成到項(xiàng)目,這篇文章主要介紹了Vue3中如何使用component :is 加載組件,需要的朋友可以參考下
    2023-11-11
  • Vue cli構(gòu)建及項(xiàng)目打包以及出現(xiàn)的問(wèn)題解決

    Vue cli構(gòu)建及項(xiàng)目打包以及出現(xiàn)的問(wèn)題解決

    這篇文章主要介紹了Vue cli構(gòu)建及項(xiàng)目打包以及出現(xiàn)的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vue通過(guò)elementUI組件實(shí)現(xiàn)圖片預(yù)覽效果

    vue通過(guò)elementUI組件實(shí)現(xiàn)圖片預(yù)覽效果

    我們?cè)陂_(kāi)發(fā)中經(jīng)常會(huì)遇到通過(guò)點(diǎn)擊某個(gè)按鈕或者文字實(shí)現(xiàn)圖片的預(yù)覽功能,這里我們分別介紹vue2和vue3里面如何實(shí)現(xiàn)圖片預(yù)覽方法,需要的朋友可以參考下
    2023-09-09
  • vue項(xiàng)目使用js監(jiān)聽(tīng)瀏覽器關(guān)閉、刷新、后退事件實(shí)現(xiàn)方法

    vue項(xiàng)目使用js監(jiān)聽(tīng)瀏覽器關(guān)閉、刷新、后退事件實(shí)現(xiàn)方法

    用vue做的項(xiàng)目,有個(gè)需求就是關(guān)閉瀏覽器的時(shí)候,需要往后臺(tái)提交有個(gè)接口,來(lái)看看這個(gè)賬號(hào)有沒(méi)有下線,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用js監(jiān)聽(tīng)瀏覽器關(guān)閉、刷新、后退事件的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-06-06
  • VUE中常用的四種高級(jí)方法總結(jié)

    VUE中常用的四種高級(jí)方法總結(jié)

    開(kāi)發(fā)vue項(xiàng)目的時(shí)候一般都會(huì)開(kāi)發(fā)很多自定義的全局組件,下面這篇文章主要給大家總結(jié)介紹了關(guān)于VUE中常用的四種高級(jí)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)

    Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)

    這篇文章主要為大家介紹了Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

东乌珠穆沁旗| 宜宾市| 简阳市| 舟曲县| 南皮县| 邹平县| 来凤县| 迭部县| 洛阳市| 康平县| 郸城县| 任丘市| 绥中县| 项城市| 江油市| 富顺县| 灵山县| 平利县| 宜良县| 中山市| 云林县| 秦皇岛市| 吉林省| 新绛县| 屏边| 南川市| 苍山县| 汪清县| 华池县| 泾阳县| 周宁县| 噶尔县| 河间市| 乾安县| 德钦县| 会东县| 家居| 金华市| 河池市| 陆良县| 山丹县|