none
WPF Fenster in Word-Seite übertragen RRS feed

  • Frage

  • Hallo zusammen,

    Wie kann ich den Inhalt von TextBoxen auf einer WPF-Seite  lagegenau auf eine Word-Seite ürtragen.

    Danke und Gruß

    Carl-Heinz
    Montag, 25. September 2017 07:49

Antworten

  • Hi Carl-Heinz,
    hie mal eine Demo für das Einfügen über die Zwischenablage:

    XAML:

    <Window x:Class="Window15"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window15" Height="300" Width="300">
      <Window.Resources>
        <Style TargetType="TextBox">
          <Setter Property="Margin" Value="5"/>
        </Style>
      </Window.Resources>
      <StackPanel Name="stp">
        <TextBox Text="Text 1"/>
        <TextBox Text="Text 2"/>
        <TextBox Text="Text 3"/>
        <Button Content="Export" Click="Button_Click"/>
      </StackPanel>
    </Window>

    Und CodeBehind dazu:

    Imports Microsoft.Office.Interop
    
    Public Class Window15
      Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim wdApp As New Word.Application
        Dim wdDoc = wdApp.Documents.Add()
        wdApp.Visible = True
        Dim bmp As New RenderTargetBitmap(CType(stp.ActualWidth, Integer),
                                          CType(stp.ActualHeight, Integer),
                                          96, 96, PixelFormats.Pbgra32)
        bmp.Render(stp)
        Dim img As New Image
        img.Source = bmp
        Clipboard.SetImage(bmp)
        wdDoc.Range.Paste()
      End Sub
    
    End Class


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Montag, 25. September 2017 09:54

Alle Antworten

  • Hi Carl-Heinz,
    hie mal eine Demo für das Einfügen über die Zwischenablage:

    XAML:

    <Window x:Class="Window15"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="Window15" Height="300" Width="300">
      <Window.Resources>
        <Style TargetType="TextBox">
          <Setter Property="Margin" Value="5"/>
        </Style>
      </Window.Resources>
      <StackPanel Name="stp">
        <TextBox Text="Text 1"/>
        <TextBox Text="Text 2"/>
        <TextBox Text="Text 3"/>
        <Button Content="Export" Click="Button_Click"/>
      </StackPanel>
    </Window>

    Und CodeBehind dazu:

    Imports Microsoft.Office.Interop
    
    Public Class Window15
      Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim wdApp As New Word.Application
        Dim wdDoc = wdApp.Documents.Add()
        wdApp.Visible = True
        Dim bmp As New RenderTargetBitmap(CType(stp.ActualWidth, Integer),
                                          CType(stp.ActualHeight, Integer),
                                          96, 96, PixelFormats.Pbgra32)
        bmp.Render(stp)
        Dim img As New Image
        img.Source = bmp
        Clipboard.SetImage(bmp)
        wdDoc.Range.Paste()
      End Sub
    
    End Class


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Montag, 25. September 2017 09:54
  • Hi Peter,

    Danke für Deinen Beitrag.

    Da der CodeBehind nicht in C# ist muss ich das erst studieren.

    Meine VB Kenntnisse sind völlig versackt.

    Aber der Gedanke das über bmp und Clipbord zu machen wird zielfürend sein.

    Viele Grüße

    Carl-Heinz

    Montag, 25. September 2017 15:28
  • Hi Carl-Heinz,
    wenn Du es in der kryptischen Sprache mit den vielen Klammern brauchst :-), dann könnte das so aussehen:

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    
    namespace WpfApp1CS
    {
      /// <summary>
      /// Interaction logic for Window12.xaml
      /// </summary>
      public partial class Window12 : Window
      {
        public Window12()
        {
          InitializeComponent();
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
          var wdApp = new Microsoft.Office.Interop.Word.Application();
          var wdDoc = wdApp.Documents.Add();
          wdApp.Visible = true;
          var bmp = new RenderTargetBitmap((int)stp.ActualWidth,
                                            (int)stp.ActualHeight,
                                            96, 96, PixelFormats.Pbgra32);
          bmp.Render(stp);
          var img = new Image();
          img.Source = bmp;
          Clipboard.SetImage(bmp);
          wdDoc.Range().Paste();
        }
      }
    }
    


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort vorgeschlagen Peter Fleischer Dienstag, 26. September 2017 08:21
    Montag, 25. September 2017 15:53
  • Hi Peter,

    vielen Dank und viele Grüsse.

    Carl-Heinz

    Montag, 25. September 2017 16:25