Montag, 4. August 2014

Ein Excel Dokument anlegen und speichern

Nachdem ich vor einiger Zeit ein kleines Tutorial zur Einbindung von Word in C# geschrieben habe, möchte ich nun eine Postreihe zum Thema Excel Einbindung in C# starten.
Im heutigen Post wird es um die Einbindung von Excel, die Erzeugung eines neuen Dokumentes und dessen Speicherung gehen.
Um Excel benutzen zu können, müssen wir zuerst einen Verweis auf die Microsoft Excel 14.0 Object Library (oder eine beliebige andere Versionsnummer, je nach Excel Version) einbinden, welche sich im Reiter COM unter Verweisen befindet. Dann binden wir diese mittels using in unser Projekt ein: using Microsoft.Office.Interop.Excel;
Anschließend legen wir 3 Variablen für benötigte Objekte an, nämlich eine Excel Anwendung, eine Arbeitsmappe und eine Tabelle (ein Arbeitsblatt):

            Microsoft.Office.Interop.Excel.Application ExcelApp;
            Workbook ExcelWorkbook;
            Worksheet ExcelWorksheet;

(Der Typ Application ist mehrdeutig, deswegen müssen wir den eingebundenen Namespace davorstellen.)
Das Anlegen und Speichern eines Excel Dokumentes ist dann eigentlich relativ einfach:

                ExcelApp = new Microsoft.Office.Interop.Excel.Application();
                ExcelWorkbook = ExcelApp.Workbooks.Add();
                ExcelWorksheet = (Worksheet)ExcelWorkbook.Worksheets.get_Item(1);
                ExcelWorkbook.SaveAs("MyFirstExcelSheet.xls");
                ExcelWorkbook.Close();
                ExcelApp.Quit();

Zuerst erzeugen wir die Anwendung und die Arbeitsmappe, dann greifen wir auf deren erstes Arbeitsblatt zu. Mit der Funktion SaveAs() speichern wir die Arbeitsmappe dann unter dem angegebenen Namen, ist kein Pfad spezifiziert, wird im Pfad "Dokumente" gespeichert. Die Funktion SaveAs() kann noch viele Argumente entgegennehmen, auf die ich hier aber nicht näher eingehen möchte, eine genaue Beschreibung kann hier gefunden werden.
Falls die Datei aber bereits existiert, erscheint ein Dialogfeld, in welchem gefragt wird, ob die Datei überschrieben werden soll. Leider scheint aber wohl auf dieses Argument der Speichern Funktion mit C# nicht zugegriffen werden zu können, als einziges Workaround, um diese Abfrage zu verhinden, habe ich im Netz folgendes gefunden (was tadellos funktioniert): Mittels ExcelApp.DisplayAlerts = false; ist die Ausgabe von Meldung der Excel App zu deaktivieren, das Überschreiben wird dann automatisch durchgeführt.
Der komplette Code sieht so aus:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;

namespace Excel
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application ExcelApp;
            Workbook ExcelWorkbook;
            Worksheet ExcelWorksheet;

            try
            {
                ExcelApp = new Microsoft.Office.Interop.Excel.Application();
                ExcelWorkbook = ExcelApp.Workbooks.Add();
                ExcelWorksheet = (Worksheet)ExcelWorkbook.Worksheets.get_Item(1);
                ExcelApp.DisplayAlerts = false;
                ExcelWorkbook.SaveAs("MyFirstExcelSheet.xls");
                ExcelWorkbook.Close();
                ExcelApp.Quit();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

Keine Kommentare:

Kommentar veröffentlichen