真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

WinForm中預覽Office文件的方法-創(chuàng)新互聯(lián)

小編給大家分享一下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控件

WinForm中預覽Office文件的方法

3. 編輯WPF用戶控件


  
    
  

VS設計預覽顯示效果如下:

WinForm中預覽Office文件的方法

如果不需要自帶的工具欄, 可以添加以下資源隱藏工具欄:



  
    
    
    
    
      
        
          
            
              
                
              
              
                
                
                
              
              
                
                  
                    
                    
                  
                
              
            
          
        
      
    
  

4. 新建WinForm用戶控件

WinForm中預覽Office文件的方法

在WinForm上添加ElementHost

WinForm中預覽Office文件的方法

將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è)資訊頻道!


當前題目:WinForm中預覽Office文件的方法-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/pspjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部