WPF打开操作Office文档的解决办法

时间:2022-06-05 17:24:36

最近在一个项目碰到一个问题,要用WPF打开并显示打印Office文档。包括Word, Excel, PowerPoint文档。找了很多资料,解决方案之一:调用第三方开发的Word, Excel, PowerPoint解析控件,三个不同的人开发的,要使用三个控件才能解决这个问题。而且有些控件对解析表格和图片还存在问题。

 

所以只好使用第二个解决方案,把Office文档先转换成XPS,然后用DocumentViewer来显示XPS

 

所以解决方案的操作流程是:打开Office文档=》转换并在硬盘生成XPS=》加载显示XPS=》任务完成后删除XPS 

 

以下代码适用于目标计算机已安装Office2007或以上版本,对于Office 2003,需要下载 Office升级插件

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD

 

那我们开始吧:

 

在一个工程文件添加如下引用:

Microsoft.Office.Interop.ExcelC:/Program Files/Microsoft Visual Studio 10.0/Visual Studio Tools for Office/PIA/Office12/Microsoft.Office.Interop.Excel.dll

Microsoft.Office.Interop.PowerPointC:/Program Files/Microsoft Visual Studio 10.0/Visual Studio Tools for Office/PIA/Office12/Microsoft.Office.Interop.PowerPoint.dll

Microsoft.Office.Interop.WordC:/Program Files/Microsoft Visual Studio 10.0/Visual Studio Tools for Office/PIA/Office12/Microsoft.Office.Interop.Word.dll

OFFICEC:/Windows/assembly/GAC/office/12.0.0.0__71e9bce111e9429c/OFFICE.DLL

ReachFramework

(C:/Program Files/Reference Assemblies/Microsoft/Framework/v3.0/ReachFramework.dll

 

以上的引用可直接在引用窗口点击“浏览”,直接找到相应的DLL,并添加就可以了。

 

我们先完成最关键的步骤:Office文档转成XPS

 

首先创建一个转换类:

OfficeToXps.cs

代码如下:

 

 

有了这个类,我们可以轻而易举的把Word, Excel PPT文档转成XPS

调用方法如下:

 

 

 

由于有些文档可能很大,为了保证在完全转换后才加载XPS,我们可以接收OfficeToXps.csConversionResult属性,只有在接收到ConversionResult.OK属性的情况下,才能开始加载XPS文件。

为了让用户稍作等待,我们这里姑且用一个比较简陋的方法提示用户等待。

PleaseWait pw =newPleaseWait();

               pw.Owner =this;

               pw.Show();

我们打开一个无边框的窗体,上面写着“请等待”。大家也可以使用WPFToolKit里的BusyIndicator

转换完成后,pw.Close();关闭窗体。

 

加载XPS的代码非常简单:

 

在窗体的XAML里定义一个DocumentViewer:

<Window x:Class="Office_To_XPS.Xps_Document"

       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

       Title="XpsDocument" Height="413" Width="605" WindowStartupLocation="CenterScreen">

   <DocumentViewer x:Name="xpsDoc"/>       

</Window>

C#里:

privatevoid LoadXPSFile(string _xpsfile)

{

           using (XpsDocument xpsDoc =new XpsDocument(_xpsfile,FileAccess.Read))

           {

               var fs = xpsDoc.GetFixedDocumentSequence();

               this.xpsDoc.Document = fs;

           }

}

 

大功告成!效果图如下图所示:

可以打开任何Word, Excel, PowerPoint文件,而且支持显示文件内的图形,表格等各类元素!

 

 

WPF打开操作Office文档的解决办法

 

 

本文完整代码下载