Laden...

XLSX und XLSM in WPF-Anwendung anzeigen

Erstellt von pollito vor 3 Monaten Letzter Beitrag vor 3 Monaten 239 Views
pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Monaten
XLSX und XLSM in WPF-Anwendung anzeigen

Hallo!

Wenn das hier das falsche Forum ist, dann bitte in das richtige verschieben. Danke!

Ich möchte Excel-Dateien mit mehreren Arbeitsblättern in einer WPF-Anwendung Anzeigen.

Es geht nur um eine schnelle Ansicht – kein Drucken, keine  Bearbeitung, keine Umwandlung, sonst rein gar nichts.

Vielleicht sehe ich den Wald vor lauter Bäumen nicht, aber ich finde nichts Vernünftiges.

Was ich wegen des Dokumentaufbaus nicht will, ist das Einlesen der Daten, um diese in einem DataGrid darzustellen – das ist für mich keine Lösung. Das Dokument sollte schon richtig gerendert werden.

Eventuell Excel selbst in die WPF-Anwendung einbetten und über die COM-Schnittstelle fernsteuern? Wie würde man hier am sinnvollsten vorgehen?

Danke und lG

René

René

A
763 Beiträge seit 2007
vor 3 Monaten

Hallo pollito

Es gibt fertige Komponenten zu kaufen, die das können.

Alternativ in Pdf oder Html konvertieren und anzeigen.

Gruss
Alf

125 Beiträge seit 2023
vor 3 Monaten

Für das reine Anzeigen kannst du PreviewHandler verwenden.

Das Einbetten so eines PreviewHandlers in WPF siehst du in PreviewHost (GeeLaw)

Hat die Blume einen Knick, war der Schmetterling zu dick.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Monaten

Zitat von Alf Ator

Hallo pollito

Es gibt fertige Komponenten zu kaufen, die das können.

Leider sind die Preise relativ hoch für dieses Projekt. Syncfusion z. B. liegt bei 4.740 US$ im Jahr. Für nur das Anzeigen etwas zu viel für mich.

Alternativ in Pdf oder Html konvertieren und anzeigen.

In einem alten Projekt war ich ähnlich vorgegangen: Ich hatte dafür den XPS-Writer verwendet und das erstellte Dokument in einem WebBrowser-Fenster dargestellt. Es hatte funktioniert, wenn auch nicht wirklich schön. Nun gibt es heute standardmäßig den PDF-Drucker in Windows – dieser ist aber bei z. B 13 Arbeitsblättern zu langsam. Dann gibt es auch Probleme mit dem Format, wenn einzelne Blätter zu breit sind und noch schlimmer, wenn die DPI-Angaben der Blätter sich unterscheiden.

Gruss
Alf

Danke und lG

René

René

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Monaten

Zitat von BlonderHans

Für das reine Anzeigen kannst du PreviewHandler verwenden.

Das Einbetten so eines PreviewHandlers in WPF siehst du in PreviewHost (GeeLaw)

Danke! Das werde ich mir auf jeden Fall anschauen. Es sieht vielversprechend aus.

Aktuell zeige ich die Excel-Dateien in einer separaten Excel-Instanz an. Nicht ganz schön, aber es scheint zu funktionieren. Hier ein ein kleines Testprogrämmchen:

using System.Windows;
using Microsoft.Win32;
using Excel = Microsoft.Office.Interop.Excel;
namespace ExcelInWPF
{
   public partial class MainWindow : Window
   {
       Excel.Application app;
       Excel.Workbook?   currentWorkbook;
       public MainWindow()
       {
           InitializeComponent();
           // Ereignisbehandlungsmethode für das Loaded-Ereignis des Fensters hinzu.
           this.Loaded += OnWindowLoaded;
       }
       private void OnWindowLoaded(object sender, RoutedEventArgs e)
       {
           try
           {
               // Neue Excel-Instanz starten.
               app = new Excel.Application();
           }
           catch (Exception ex)
           {
               MessageBox.Show($"Fehler beim Starten von Excel: {ex.Message}");
           }
       }
       // Eventhandler zum Öffnen der Excel-Datei über das OpenFileDialog
       private void OpenFileButton_Click(object sender, RoutedEventArgs e)
       {
           try
           {
               // Aktuell geöffnete Arbeitsmappe schließen, wenn vorhanden.
               if (currentWorkbook != null)
               {
                   currentWorkbook.Close(false);
                   currentWorkbook = null;
               }
               // Öffne den Datei-Öffnen-Dialog.
               OpenFileDialog openFileDialog = new()
               {
                   Filter = "Excel Dateien|*.xls;*.xlsx;*.xlsm",
                   Title  = "Excel-Datei öffnen"
               };
               if (openFileDialog.ShowDialog() == true)
               {
                   // Öffne die ausgewählte Excel-Datei
                   OpenExcelFile(openFileDialog.FileName);
               }
           }
           catch (Exception ex)
           {
               MessageBox.Show($"Fehler beim Öffnen der Excel-Datei: {ex.Message}");
           }
       }
       private void OpenExcelFile(string filePath)
       {
           // Öffne die Excel-Datei in der neuen Instanz.
           currentWorkbook = app.Workbooks.Open(filePath);
           // Zeige Excel an
           app.Visible = true;
       }
   }
}
<Window x:Class="ExcelInWPF.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="Excel in WPF" Height="177" Width="237">
   <Grid>
       <Button Content="Excel-Datei öffnen" Click="OpenFileButton_Click" HorizontalAlignment="Center" VerticalAlignment="Center"/>
   </Grid>
</Window>

Hinweis: Testprogramm, daher kein MVVM-Muster.

Danke und lG

René

René