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é
Hallo pollito
Es gibt fertige Komponenten zu kaufen, die das können.
Alternativ in Pdf oder Html konvertieren und anzeigen.
Gruss
Alf
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.
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é
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é