手机版

WinForm中如何预览办公室文件

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

本文为大家分享了WinForm预览办公室文档的方法,供大家参考,具体内容如下

使用WinForm办公室组件

原理:使用Office COM组件将Word、Excel转换为波段移相器(同x波段移相器)文档,将WPF的文档查看器控件寄宿到WinForm中,实现预览。

1.新建WinForm项目

2.新建WPF用户控件,注意是WPF控件

3.编辑WPF用户控件

UserControl.网格文档查看器x:Name='文档查看器'//网格/用户控件对设计预览显示效果如下:

如果不需要自带的工具栏,可以添加以下资源隐藏工具栏:

!-隐藏文档查看器边框用户控制。资源样式x :键=' { x :类型文档查看器} '目标类型=' { x :类型文档查看器} ' Setter属性=' forecast ' Value=' {动态资源{ x 3360静态系统颜色} .windowtextbrush key } } '/Setter Property=' Background ' Value=' {动态资源{ x :静态系统颜色} ' .controlbrushcey } } '/Setter属性=' FocusVisualStyle ' Value=' { x : null } '/Setter属性=“模板”设置器.值控制模板目标类型=“{ x : type文档查看器}”边框边框宽度="{模板绑定边框厚度} "边框宽度="{模板绑定边框画笔} "可聚焦性=“假”网格键盘导航。选项卡导航="本地"网格。背景SolidColorBrush Color=' {动态源ControlLightColor } '//网格。背景网格。行定义行定义高度='自动'/行定义高度='*' /行定义高度='自动'/网格。行定义滚动查看器网格row=' 1 ' CanContentScroll=' true ' horizontalscroll bar visibility=' Auto ' x : name=' PART _ content host ' IsTabStop=' true '滚动查看器.背景线性渐变画笔端点='0.5,1' StartPoint='0.5,0 '渐变停止颜色=' {动态资源控制器颜色} '偏移量=' 0 '/渐变停止颜色=' {动态资源控制媒体颜色} '偏移量=' 1 '/线性渐变画笔/滚动查看器。背景/滚动查看器/网格/边框/控件模板/设置器。值/设置器/样式/用户控件。资源四新建WinForm用户控件

在WinForm上添加ElementHost

将WPF用户控件添加到ElementHost上,设计器代码XpsPreviewer .Designer.cs如下

//ElementHost私有系统窗户。表格。整合。元素主机元素主机1;//XpsPreviewer变量二等兵WPF .XpsPreviewer XpsPreviewer 1 private void initialize component(){ this。elementhost 1=新系统窗户。表格。整合。元素主机();this.xpsPreviewer1=新WPF .XpsPreviewer();//初始化//其他属性初始化.这个。elementhost 1。孩子=这个。xpspreview R1;//其他属性初始化.}在XpsPreviewer.cs后台代码中定义方法:

///摘要///加载波段移相器(同x波段移相器)文件////summary///param name=' fileName ' XPS文件名/param内部void LoadXps(字符串文件名){ var XPS文档=新XPS文档(文件名,文件访问.阅读);这个。xpspreviewer 1。文档查看器。文档=XPS文档.GetFixedDocumentSequence();xpsDocument .close();}5.将Excel(Word类似)转换为波段移相器(同x波段移相器)文件

通过Nuget包管理控制台安装计算机输出缩微胶片组件:

首相安装包微软办公室。互操作. Excel

转换为XPS:

///摘要///将超过文件转换为波段移相器(同x波段移相器)文件////summary////param name=' execelFileName ' excel文件名/param///param name=' xpsFileName '转换的波段移相器(同x波段移相器)文件名/param public void ConvertExcelToXps(字符串excelFileName,字符串xpsFileName) { if(字符串isnullorhitespace(Excelfilename))抛出新的argumentNullException(ExcelFilename);如果(字符串isnullorhitespace(xpsFileName))抛出新的ArgumentNullException(xpsFileName);var文件信息=新文件信息(xpsFileName);if(!文件信息。目录。存在)文件信息。目录。create();//删除已存在的文件如果(文件。存在(xpsFileName))文件。删除(xpsFileName);Excel .应用app=新Excel .application();应用程序.显示警报=假Excel .工作簿wbsExcel .工作簿WB;wbs=app .工作簿;wb=wbs .添加(ExcelFilename);动态无=系统。反思。缺失。价值;wb .导出固定格式XlFixedFormatType.xlTypeXPS,xpsFileName,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing);wb .关闭(真);wbs .close();应用程序.退出();killExcelProcess(app);}扩展: 每次调用超过打开文件,均会产生一个进程,在网络上收集的释放超过进程方式均不起作用。因此选择直接结束进程,根据超过句柄结束进程,而不是根据进程名称杀死全部正在运行的Excel .

[DllImport('User32.dll')]私有静态extern int GetWindowThreadProcessId(int ptr HWnd,out int ProcessId);///摘要///结束超过进程////summary///param name=' obj '/param private void killexelpprocess(Excel .应用程序app) { if (app==null)返回;尝试{ IntPtr intptr=new IntPtr(app .hwnd);int idGetWindowThreadProcessId(int ptr,out id);过程. GetProcessById(id);p . Kill();} catch { } }现在已经可以正常的预览超过文件了。由于超过另存为波段移相器(同x波段移相器)文件会耗费一定的时间,因此建议在后台线程中提前异步生成,在预览时可直接调取波段移相器(同x波段移相器)文件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:WinForm中如何预览办公室文件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。