OfficeViewer Office 文档预览

OfficeViewer 基于 optional peer 依赖 @silurus/ooxml(office-open-xml-viewer)在浏览器 Canvas 中预览 docx / xlsx / pptx。运行时优先加载本地 peer,未安装时自动从 jsDelivr 拉取 ESM 回退,业务工程构建阶段不再强依赖该包。

何时使用

  • Workspace 文件树或对话附件中需要内联预览 Office 三件套
  • 希望按需引入 WASM 解析器(默认 CDN,可 wasmUrl 覆盖)而不打进主包

安装依赖(可选)

pnpm add @silurus/ooxml

@silurus/ooxml 为 optional peerDependency。不安装时预览模块默认从 CDN 加载;内网或需锁定版本时可安装 peer 以走本地包。

代码演示

基础用法 - 预置三件套样例预览

自定义 wasmUrl - xlsx 样例预览

Markdown 中渲染卡片 - Word / Excel 文件卡片 + PPTX 幻灯片列表,点击查看详情

API

OfficeViewerProps

属性说明类型默认值版本
className自定义类名string--
enableSlideRailPPTX 是否启用左侧缩略图侧栏;关闭后 PPTX 走连续滚动视图booleantrue-
file文件源:URL、File/Blob 或 ArrayBufferFile | Blob | string | ArrayBuffer--
fileName用于扩展名推断与展示的文件名;file 为 ArrayBuffer 或 URL 无扩展名时必传string--
fileType显式指定格式;缺省按 fileName / URL / File.name 推断'docx' | 'xlsx' | 'pptx'--
height容器高度number | string480-
loadingRender自定义加载中内容React.ReactNode--
missingDependencyRender未安装 @silurus/ooxml 时的自定义降级内容React.ReactNode--
onError加载或渲染失败回调(error: Error) => void--
onLoad文档加载完成回调() => void--
style自定义内联样式React.CSSProperties--
wasmUrlWASM 解析器地址;未传时按格式指向 jsDelivr 上的 @silurus/ooxml 资产string | URLCDN 默认-

注意事项

  1. 仅支持 Office Open XML(.docx / .xlsx / .pptx);旧版 .doc / .xls / .ppt 不可预览。
  2. Workspace File 预览已接入:点击符合扩展名的文件时自动走 OfficeViewer;未安装 peer 时显示安装提示。
  3. PPTX 默认展示左侧缩略图侧栏,点击缩略图跳转对应页;侧栏可通过分界处的手柄按钮展开/收起(收起后主区自动铺满);enableSlideRail: false 时退化为连续滚动视图。
  4. 生产环境建议将 *_parser_bg.wasm 托管到自有 CDN,再通过 wasmUrl 传入。
  5. 数学公式、ChartEx 等可选引擎需自行从 @silurus/ooxml/math 等入口引入并传入上游选项(本组件默认不捆绑)。

内容复制

三种格式均支持复制内容,无需额外配置:

  • docx / pptx:内置透明文本层(enableTextSelection 默认开启),可直接用鼠标划选文字后 Ctrl/Cmd+C 复制。
  • xlsx:点选 / 框选单元格后按 Ctrl/Cmd+C,选中区域以 TSV(制表符分隔)写入剪贴板,可直接粘贴到 Excel / 表格。