WinForm 에서 Office 파일 을 미리 보 는 방법

7102 단어 WinFormOffice
본 고 는 WinForm 에서 Office 문 서 를 미리 볼 수 있 는 방법 을 공유 하 였 으 며,구체 적 인 내용 은 다음 과 같 습 니 다.
WinForm,WPF,Office 구성 요소 사용 하기
원리:Office COM 구성 요 소 를 사용 하여 Word,Excel 을 XPS 문서 로 변환 하고 WPF 의 DocumentViewer 컨트롤 을 WinForm 에 저장 하여 미리 보기 합 니 다.
1.새 WinForm 프로젝트
2.새 WPF 사용자 컨트롤,주의 WPF 컨트롤

3.WPF 사용자 컨트롤 편집

<UserControl ...
       ...>
  <Grid>
    <DocumentViewer x:Name="documentViewer"/>
  </Grid>
</UserControl>
VS 디자인 미리 보기 효 과 는 다음 과 같 습 니 다.

자체 도구 모음 이 필요 하지 않 으 면 다음 자원 숨 김 도구 모음 을 추가 할 수 있 습 니 다.

<!--  DocumentViewer  -->
<UserControl.Resources>
  <Style x:Key="{x:Type DocumentViewer}" TargetType="{x:Type DocumentViewer}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" />
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DocumentViewer}">
          <Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Focusable="False">
            <Grid KeyboardNavigation.TabNavigation="Local">
              <Grid.Background>
                <SolidColorBrush Color="{DynamicResource ControlLightColor}" />
              </Grid.Background>
              <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
              </Grid.RowDefinitions>
              <ScrollViewer Grid.Row="1" CanContentScroll="true" HorizontalScrollBarVisibility="Auto" x:Name="PART_ContentHost" IsTabStop="true">
                <ScrollViewer.Background>
                  <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0" />
                    <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="1" />
                  </LinearGradientBrush>
                </ScrollViewer.Background>
              </ScrollViewer>
            </Grid>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
</UserControl.Resources>
4.새 WinForm 사용자 컨트롤

WinForm 에 Element Host 추가

WPF 사용자 컨트롤 을 Element Host 에 추가 합 니 다.디자이너 코드 XpsPreviewer.Design.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 배경 코드 에서 방법 을 정의 합 니 다.

  /// <summary>
  ///   XPS  
  /// </summary>
  /// <param name="fileName">XPS   </param>
  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 로 변환:

  /// <summary>
  ///  Excel     XPS  
  /// </summary>
  /// <param name="execelFileName">Excel   </param>
  /// <param name="xpsFileName">   xps   </param>
  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 을 호출 하여 파일 을 열 때마다 하나의 프로 세 스 가 생 성 됩 니 다.네트워크 에서 수집 한 Excel 프로 세 스 방식 은 작 동 하지 않 습 니 다.따라서 프로 세 스 를 직접 종료 하 는 것 을 선택 하 십시오.프로 세 스 이름 에 따라 실행 중인 Excel 을 죽 이 는 것 이 아 닙 니 다.

  [DllImport("User32.dll")]
  private static extern int GetWindowThreadProcessId(IntPtr hWnd, out int ProcessId);

  /// <summary>
  ///   Excel  
  /// </summary>
  /// <param name="obj"></param>
  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 { }
  }

이 제 는 Excel 파일 을 정상적으로 미리 볼 수 있 습 니 다.Excel 을 XPS 파일 로 저장 하 는 데 시간 이 걸 리 기 때문에 배경 스 레 드 에서 비동기 로 생 성 하 는 것 을 권장 합 니 다.미리 볼 때 XPS 파일 을 직접 찾 을 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기