Montag, 25. August 2014

Excel: Zellen auslesen / beschreiben

Nachdem ich in vorigen Posts erläutert habe, wie man Excel in C# einbindet, ein neues Dokument erstellt oder eins öffnet, möchte ich heute zeigen, wie auf die Inhalte der Dokumente zugegriffen werden kann. Dies geht ganz leicht, über die Eigenschaft Range eines ExcelWorksheet's kann auf die einzelnen Zellen zugegriffen werden. Die entsprechende Zelle wird entweder durch Zeile,Spalte spezifiziert oder, wie in Excel, durch BuchstabeZahl. Über die Eigenschaft Value kann dann auf den Inhalt der Zelle zugegriffen werden. Dabei ist zu beachten, dass Value  einen String enthält, wenn die Zelle Text enthält, oder einen Double, wenn die Zelle eine Zahl enthält.
Der folgende Code legt ein neues Excel Dokument an, schreibt Text in die Zellen 2,1 und B4, und liest anschließend den Inhalt von B4 aus:

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

            ExcelApp = new Microsoft.Office.Interop.Excel.Application();
            ExcelWorkbook = ExcelApp.Workbooks.Add();
            ExcelWorksheet = (Worksheet)ExcelWorkbook.Worksheets.get_Item(1);

            ExcelWorksheet.Cells[2, 1].Value = "Cell 2-1";
            ExcelWorksheet.Range["B4"].Value = "Cell B4";

            string Read = ExcelWorksheet.Range["B4"].Value;

            ExcelWorkbook.SaveAs("MyFirstExcelSheet.xls");
            ExcelWorkbook.Close();
            ExcelApp.Quit();

Dienstag, 19. August 2014

Alle Codeabschnitte reduzieren

Heute möchte ich euch einen kleinen Trick zeigen, den ich eben gelernt habe. Und zwar geht es um das Reduzieren aller Codeabschnitte, das heißt, das Einklappen aller Codebereiche, was die Codeansicht viel übersichtlicher macht. Dieses geht in der .Net Entwicklungsumgebung über die Tastenkombination Strg + M + L.

Montag, 11. August 2014

Excel Dokument öffnen

Nachdem ich im vorigen Post Grundlegendes zur Einbindung von Excel in C# sowie das Anlegen und Speichern eines neuen Dokumentes erläutert habe, möchte ich in diesem Post zeigen, wie man mit C# ein Excel Dokument zur Bearbeitung öffnet.
Hierfür benutzen wir die Funktion Microsoft.Office.Interop.Excel.Application.Workbooks.Open(). Diese kennt viele Überladungen, welche hier beschrieben sind. Wir übergeben hier nur den Dateinamen, die entsprechende Datei wird dann über das Excel Steuerelement geöffnet und kann benutzt werden. Der komplette Code lautet:

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

            ExcelApp = new Microsoft.Office.Interop.Excel.Application();
            ExcelWorkbook = ExcelApp.Workbooks.Open("MyFirstExcelSheet.xls");
            ExcelWorkbook.Close();
            ExcelApp.Quit();

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());
            }
        }
    }
}