Microsoft Office Document Viewer in WPF
Introduction
​Microsoft Office Documents like Word , Excel, PowerPoint are very difficult to View in WPF. I have seen a lot of posts related to viewing office files in forums. So to be straight forward there is no direct method to view office documents in WPF. Office files should be converted to a suitable format so that it could be viewed in WPF. Here are the steps to view an office Document in WPF
Steps
1.) Create a WPF 4.0 Application and Place a Document Viewer.
<Window x:Class="DocumentViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Office Files Viewer" Height="700" Width="1200">
<Grid>
<DocumentViewer Name="documentViewer1" />
</Grid>
2.) Add the Following Com Components in your References
- Microsoft Word 14.0 Object Library
- Microsoft Excel 14.0 Object Library
- Microsoft PowerPoint 14.0 Object Library
Ensure that you are having version 12.0 or Above. Which means Microsoft word 2007 or higher versions.
3.) The next step is to convert the Office Documents into a suitable format which are XPS Documents. Before that add the following dll to your Reference
- ReachFramework.dll
4.) To convert the Office Documents to XPS Documents. Attach the OfficetoXps.cs class file to your project. You can download the class files and the whole project from my skydrive.
5.) Next step is to invoke the class and convert the office files to XPS and View in the Document Viewer. Using the code Below.
public void openFile()
{
System.Windows.Xps.Packaging.XpsDocument xpsDoc; /*Creating a Xps Documnet*/
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); /* Open File Dialog to open .docx Files */
string xpsFilePath=String.Empty;
// Set filter for file extension and default file extension
dlg.DefaultExt = ".txt";
dlg.Filter = "Office Files(*.docx;*.doc;*.xlsx;*.xls;*.pptx;*.ppt)|*.docx;*.doc;*.xlsx;*.xls;*.pptx;*.ppt";
// Display OpenFileDialog by calling ShowDialog method
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
string filename = dlg.FileName;
xpsFilePath = System.Environment.CurrentDirectory + "\\" + dlg.SafeFileName + ".xps";
}
var convertResults = OfficeToXps.ConvertToXps(SourceUrl.Text, ref xpsFilePath);
switch (convertResults.Result)
{
case ConversionResult.OK:
/* Creating a XPS Document in Read Write Mode*/
xpsDoc = new System.Windows.Xps.Packaging.XpsDocument(xpsFilePath, FileAccess.ReadWrite);
/*Open in a Document Viewer*/
documentViewer1.Document = xpsDoc.GetFixedDocumentSequence();
break;
case ConversionResult.InvalidFilePath:
// Handle bad file path or file missing
break;
case ConversionResult.UnexpectedError:
// This should only happen if the code is modified poorly
break;
case ConversionResult.ErrorUnableToInitializeOfficeApp:
// Handle Office 2007 (Word | Excel | PowerPoint) not installed
break;
case ConversionResult.ErrorUnableToOpenOfficeFile:
// Handle source file being locked or invalid permissions
break;
case ConversionResult.ErrorUnableToAccessOfficeInterop:
// Handle Office 2007 (Word | Excel | PowerPoint) not installed
break;
case ConversionResult.ErrorUnableToExportToXps:
// Handle Microsoft Save As PDF or XPS Add-In missing for 2007
break;
}
}
Download the Project from My Skydrive:
https://skydrive.live.com/?cid=841ACEE3077E04E5&id=841ACEE3077E04E5%21138