Hallo,
ich habe in Netz schon merere Verfahren entdeckt mit denem man Excel Dateien mit C# auslesen kann. Ist es irgendwie möglich auch die Kommentare, die man in Exceldateien hat auszulesen ?
Jan
Ich habe ein Programm geschrieben, das mittels oleDB Connection die Daten einer Excel Datei ausließt.
Der oleDB Adapter füllt dann seine Daten in eine DataTable, diese Daten kann ich dann in einem DataGrid oder einer einfachen Textbox anzeigen lassen. So weit so gut. Nun möchte ich nicht nur den Inhalt der Zelle sehen sondern auch den Kommentar der in Excel eingefügt wurde.
Du mußt den Weg über das Excel Objekt Modell nehmen:
Also einen Verweis erstellen auf die Excel-Objekt Bibliothek.
(In meinem Fall Office 2003)
Folgender Code sollte Dir einen Startpunkt geben:
(Ich muß dich allerdings warnen, die Sache ist nicht sonderlich performant.)
Tschau, ba,ba und foi net,
Meli
using System;
using System.Collections.Generic;
using System.Text;
namespace ExcelAutomation
{
class Program
{
static void Main(string[] args)
{
object mMissing = System.Reflection.Missing.Value;
Excel.ApplicationClass EXCEL = new Excel.ApplicationClass();
//Da C# keine optionale Argumente kennt, muß man für jeden Parameter
// einen Wert angeben, besser wäre es VB.Net zu nehmen
EXCEL.Workbooks.Open(@"C:\Kommentar.xls", mMissing, mMissing,
mMissing, mMissing, mMissing, mMissing, mMissing, mMissing,
mMissing, mMissing, mMissing, mMissing, mMissing, mMissing);
// Zelle mit dem Komentar
Excel.Range rg = (Excel.Range) EXCEL.Cells[1, 1];
//Kommentartext ausgeben
if (rg.Comment !=null)
{
Console.WriteLine(rg.Comment.Text(mMissing, mMissing, mMissing));
}
Console.ReadLine();
EXCEL = null;
}
}
}
Gernot Melichar
Mhh der Namespace wird nicht akzeptiert:
using System.Collections.Generic;
Der Typ oder Namespacename 'Generic' ist in der Klasse oder dem Namespace 'System.Collections' nicht vorhanden (fehlt ein Assemblyverweis?)
muss ich nochwas anderes einbinden ?
Ich habeVS2005/Net2.0 für das Beispiel verwendet.Deshalb die Einbindung
des Generic Namespace.
Du kannst die Zeile einfach löschen.
Gernot Melichar
wenn ich die Zeile lösche dann kann er mit
Excel.ApplicationClass
nichts anfangen 😦
Jetzt gehts ! Ich hatte den Verweis auf Excel 11.0 vergessen ( sorry )
dann war da noch ein ein Fehler in der Pfadangabe C:\Kommentar.xls ..
Vielen Dank, Du warst eine große Hilfe !
Welche Office Version benutzt Du? Bei mir unter Office2003/VS 2005 funktioniert
es einwandfrei. Ich referenziere die Microsoft Office 11.0 Object Library.
Probiere mal diesen Code:
using System;
using System.Text;
using Office = Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;
namespace ExcelAutomat
{
class Program
{
static void Main(string[] args)
{
object mMissing = System.Reflection.Missing.Value;
Excel.ApplicationClass EXCEL = new Excel.ApplicationClass();
EXCEL.Workbooks.Open(@"C:\Kommentar.xls", mMissing, mMissing,
mMissing, mMissing, mMissing, mMissing, mMissing, mMissing,
mMissing, mMissing, mMissing, mMissing, mMissing, mMissing);
Excel.Range rg = (Excel.Range)EXCEL.Cells[1, 1];
if (rg.Comment != null)
{
Console.WriteLine(rg.Comment.Text(mMissing, mMissing, mMissing));
}
}
}
}
Hoops, ich war wohl zu langsam....
Gernot Melichar
.. eine Frage habe ich noch:
Im Debug Verzeichniss liegt jetzt unter anderem die DLLInterop.Excel.dll ohne die das Programm nicht läuft.
Was kann ich tun, damit das das Programm auch ohne die DLL läuft, bzw wie kann ich erreichen das das Programm die DLL im C:\Windows\system32 Verzeichniss sucht ?
Hallo, soweit ich weis gar nicht es soll so sein. Philosophie von .NET-raus aus dll-Hölle.
Gruss,
Boris