小編給大家分享一下WinForm中預覽Office文件的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比普陀網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式普陀網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋普陀地區(qū)。費用合理售后完善,十載實體公司更值得信賴。WinForm預覽Office文檔的方法,具體內容如下
使用WinForm, WPF, Office組件
原理:使用Office COM組件將Word,Excel轉換為XPS文檔, 將WPF的DocumentViewer控件寄宿到WinForm中, 實現(xiàn)預覽.
1. 新建WinForm項目
2. 新建WPF用戶控件, 注意是WPF控件
3. 編輯WPF用戶控件
VS設計預覽顯示效果如下:
如果不需要自帶的工具欄, 可以添加以下資源隱藏工具欄:
4. 新建WinForm用戶控件
在WinForm上添加ElementHost
將WPF用戶控件添加到ElementHost上,設計器代碼XpsPreviewer.Designer.cs如下
//ElementHost private System.Windows.Forms.Integration.ElementHost elementHost1; //XpsPreviewer變量 private WPF.XpsPreviewer xpsPreviewer1; private void InitializeComponent() { this.elementHost1 = new System.Windows.Forms.Integration.ElementHost(); this.xpsPreviewer1 = new WPF.XpsPreviewer(); //初始化 //其他屬性初始化... this.elementHost1.Child = this.xpsPreviewer1; //其他屬性初始化... }
在XpsPreviewer.cs后臺代碼中定義方法:
////// 加載XPS文件 /// /// XPS文件名 internal void LoadXps(string fileName) { var xpsDocument = new XpsDocument(fileName, FileAccess.Read); this.xpsPreviewer1.documentViewer.Document = xpsDocument.GetFixedDocumentSequence(); xpsDocument.Close(); }
5. 將Excel(Word類似)轉換為XPS文件
通過Nuget包管理控制臺安裝COM組件:
PM> Install-Package Microsoft.Office.Interop.Excel
轉換為XPS:
////// 將Excel文件轉換為XPS文件 /// /// Excel文件名 /// 轉換的xps文件名 public void ConvertExcelToXps(string excelFileName, string xpsFileName) { if (string.IsNullOrWhiteSpace(excelFileName)) throw new ArgumentNullException(excelFileName); if (string.IsNullOrWhiteSpace(xpsFileName)) throw new ArgumentNullException(xpsFileName); var fileInfo = new FileInfo(xpsFileName); if (!fileInfo.Directory.Exists) fileInfo.Directory.Create(); //刪除已存在的文件 if (File.Exists(xpsFileName)) File.Delete(xpsFileName); Excel.Application app = new Excel.Application(); app.DisplayAlerts = false; Excel.Workbooks wbs; Excel.Workbook wb; wbs = app.Workbooks; wb = wbs.Add(excelFileName); dynamic Nothing = System.Reflection.Missing.Value; wb.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypeXPS, xpsFileName, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing); wb.Close(true); wbs.Close(); app.Quit(); KillExcelProcess(app); }
擴展: 每次調用Excel打開文件,均會產(chǎn)生一個進程, 在網(wǎng)絡上收集的釋放Excel進程方式均不起作用. 因此選擇直接結束進程, 根據(jù)Excel句柄結束進程, 而不是根據(jù)進程名稱殺死全部正在運行的Excel.
[DllImport("User32.dll")] private static extern int GetWindowThreadProcessId(IntPtr hWnd, out int ProcessId); ////// 結束Excel進程 /// /// private void KillExcelProcess(Excel.Application app) { if (app == null) return; try { IntPtr intptr = new IntPtr(app.Hwnd); int id; GetWindowThreadProcessId(intptr, out id); var p = Process.GetProcessById(id); p.Kill(); } catch { } }
現(xiàn)在已經(jīng)可以正常的預覽Excel文件了. 由于Excel另存為XPS文件會耗費一定的時間, 因此建議在后臺線程中提前異步生成, 在預覽時可直接調取XPS文件.
以上是“WinForm中預覽Office文件的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!