Laden...

Excel Zelle auslesen

Erstellt von torsten vor 17 Jahren Letzter Beitrag vor 16 Jahren 29.956 Views
T
torsten Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren
Excel Zelle auslesen

Hallo! Hoffe ich bin hier richtig.
Hier steht zwar schon einiges zu diesem Thema und immer wird auf bereits bestehende Antworten hingewiesen jedoch ist c# für mich völlig neu und ich tue mich wirklich sehr schwer die bestehenden Antworten zu verstehen.
Ich habe eine Excel Datei und möchte einfach durch Angabe einer bestimmten Zelle den darin stehenden Wert abfragen.
Wie mache ich das?
Wahrscheinlich ist diese Frage total überflüssig und wird von vielen belächelt aber ich bitte eucht trotzdem um eine Antwort.
Vielen Dank!
Gruß Torsten

2.223 Beiträge seit 2005
vor 17 Jahren

moin und herzlich willkommen

wie so oft gibt es mehrere möglichkeiten

per ODBC
per OLEDB

oder mit dem Excel Object

Jede variante hat seine tücken

ps wenn du dir mal die alten beiträge richtig anschaust wirst du sogar code beispiele finden

mfg

T
torsten Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren

Danke schonmal für die Antwort!
Wenn ich mich für die Objekt Variante entschieden habe... wie bringe ich die dafür benötigten dll´s in mein Programm. wie verwende ich die von office zu verfügung gestellten objekte??

2.223 Beiträge seit 2005
vor 17 Jahren

im visual studio über verweis hinzufügen

dan namespace einbinden

und den code schreiben

mfg

3.728 Beiträge seit 2005
vor 17 Jahren
Faq

Hallo torsten,

Bitte schau mal in den FAQ-Bereich. Dort findest Du die Infos, die Du brauchst.

T
torsten Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren

Das ist ja alles ganz toll... wenn man es versteht.
vor allem ist das alles viel zu aufwendig. ich möchte ersteinmal aus Übungszwecken eine einzige Zelle aus einem Excel Dokument auslesen.
Gibt es da nicht einfach einen Befehl?? getValue z.B
das muss doch mit max. 3 Zeilen Code zu bewältigen sein oder nicht?
Vielleicht kann mir jemand ein Beispiel geben (Bitte mit verknüpfung zur Datei und Zugriff auf bestimmte Zellen)...

Die ganze Geschichte mit den Primary Interop Assemblies klappt aus irgendeinem Grund auch nicht. Das ganze scheitert schon bei der Instalation. Wohin muss ich die Dateien entpacken? Ist das egal? Wenn ja woher weiß ich beim Verweiß hinzufügen wo ich die entsprechende Dll finde.
Muss ich die in jedem Fall instalieren?
Ich weiß es sind viele Fragen aber vielleicht könnt ihr mir ja auf einige davon eine Antwort geben und mir weiterhelfen.
Vielen Dank
Gruß Torsten

3.728 Beiträge seit 2005
vor 17 Jahren
Beispiel

Ich hab ein Beispiel geschrieben. Funktioniert komplett ohne Interop Assemblies. Einfach Copy & Paste in ein neues Konsolenprojekt, Fertig!


using System;
using System.Collections.Generic;
using System.Text;

// Diesen Namensraum brauchst Du für COM-Interop
using System.Runtime.InteropServices;

// Diesen Namensraum brauchst Du für "Late Binding"
using System.Reflection;

// Dieses Beispiel ruft den Inhalt der Zelle A1 aus dem aktuellen Excel-Dokument ab
namespace ExcelHelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            // Verweis auf die geöffnete Excel-Instanz herstellen (Excel muss für dieses Beispiel bereits geöffnet sein)
            object excel = Marshal.GetActiveObject("Excel.Application");

            // Aktuelles Tabellenblatt abfragen
            object sheet=excel.GetType().InvokeMember("ActiveSheet",BindingFlags.GetProperty,null,excel,new object[0]);

            // Inhalt von Zelle A1 lesen und auf die Konsole schreiben (Das auslesen einer Zelle, lässt sich, wie Du siehst, mit zwei Zeilen erledigen)
            object rangeA1=sheet.GetType().InvokeMember("Range",BindingFlags.GetProperty | BindingFlags.OptionalParamBinding,null,sheet,new object[2] {"A1",Missing.Value});
            Console.WriteLine("Inhalt von A1: " + Convert.ToString(rangeA1.GetType().InvokeMember("Value",BindingFlags.GetProperty,null,rangeA1,new object[0])));

            // Warten bis der Benutzer Enter drückt
            Console.ReadLine();

            // COM-Verweise freigeben
            Marshal.ReleaseComObject(rangeA1);
            Marshal.ReleaseComObject(sheet);
            Marshal.ReleaseComObject(excel);
        }
    }
}

Was die Installation Deiner PIAs betrifft, wirst Du den Fehler erst mal etwas eingrenzen müssen. "Klappt aus irgendeinem Grund nicht" reicht nicht, damit ich Dir weiterhelfen kann. Wenn Du den Link aus dem FAQ-Beitrag verwendest, um die PIAs runterzuladen, ist das eine EXE-Datei, die die Interop Assemblies automatisch installiert. Da kann man nicht viel falsch machen.

Den COM-Verweis "Microsoft Excel 11.0 Object Library" zufügen, sollte auch ohne Fehler gehen.

Verstehen tust Du das nach dem Beispiel jetzt auch nicht besser, oder? Ohne COM-Grundlagen klappts nicht mit der Excel-Programmierung. Man muss sich eben etwas einarbeiten.

L
82 Beiträge seit 2006
vor 17 Jahren

Ich als absoluter C# Laie habe wohl ähnliche Probleme wie Torsten. Wenn ich mir obigen Codebeispiel anschaue, frage ich mich warum etwas das in VB6.0 so super super einfach ist unter C# so deutlich anspruchsvoller ist.

Kann mit vielen Zeilen des obigen Beispielprogrammes so garnichts anfangen. Wieso haben die Entwickler von C# nicht eine ähnlich konfortable Zugriffsmöglichkeit auf Excel entwickelt, wie sie unter VB6.0 zur Verfügung steht?

Das obige Codebeispiel vermittelt mir ein wenig das Gefühl, dass ich mit Visual C# nicht ernsthaft eine Excel Programmierung in Erwägung ziehen sollte. Denn wenn das einlesen einer einzigen Zelle schon so aufwendig ist, wie sieht es dann zB mit erstellen von Charts uä aus???

Freue mich natürlich über mutmachende Nachrichten, dass alles in Wahrheit nicht so schwer ist und nur zu Beginn halt ein wenig gewöhnungsbedürftig.

Gruß

3.728 Beiträge seit 2005
vor 17 Jahren
Komfort

Natürlich kannst Du es auch so haben, wie in VB6. Du bindest einfach den COM-Verweis auf die "Microsoft Excel 11.0 Object Library" ein. Dann hast Du das selbe Objektmodell wie unter VB6.

Ich mache das in meinem Beispiel den Zugriff über Reflection (Späte Bindung). Das hat folgende Gründe:*Ich habe zu Hause nur Excel 2000 aber die meisten Fragesteller hier im Forum Excel 2003 *Mein Beispiel kann man einfach per Code und Paste in ein Visual Studio Projekt stecken und es läuft *Ich möchte den Leuten Reflection Nahe bringen, da man damit in einem gewissen Rahmen unabhängig von der Office-Version programmieren kann.

Reflection ist nicht schwer. In VB6 würdest Du z.B. mit folgender Zeile das aktuelle Tabellenblatt abfragen:

Dim sheet As Excel.Worksheet
Set sheet=objExcel.ActiveSheet

Unter Verwendung des COM-Verweises auf Excel sieht der Code in C# so aus:


Excel.Worksheet sheet;
sheet=(Excel.Worksheet)excel.ActiveSheet;

Mit Reflection in C# sieht das so aus:


object sheet=excel.GetType().InvokeMember("ActiveSheet",BindingFlags.GetProperty,null,excel,new object[0]);

Alle drei Varianten tun genau das selbe mit den selben Excel-Klassen.

Die InvokeMember-Methode liest den Wert der Eigenschaft (BindingFlags.GetProperty) "ActiveSheet" des Objekts excel (Was unter der Haube in Excel.Application-Objekt ist) und übergibt keine Parameter (new object[0]), da man Eigenschaften auch keine Parameter übergeben muss.

Es ist also das selbe Objektmodell. Alles Funktioniert gleich. Nur dass man keine Intellisense in Visual Studio hat.

Hier ein Schulungsvideo zu Reflection: http://www.microsoft.com/germany/msdn/nettv/folge2.mspx

L
82 Beiträge seit 2006
vor 17 Jahren

Habe hier momentan "leider" auch nur die Office 2000 Version. Heißt das, dass ich zunächst die "einfache" Variante über das Excel Object 11.0 nicht verwenden kann?

Kriegen ab November Office 2003. Lohnt es überhaupt sich jetzt noch mit Office 2000 auseinanderzusetzen oder sollte ich lieber meinen Visual C# Start dann auf November verschieben?

3.728 Beiträge seit 2005
vor 17 Jahren
Excel 2000

Dann bindest Du eben "Microsoft Excel 9.0 Object Library" ein. Dann geht das alles auch mit Excel 2000. Es gibt allerdings keine spezillen PIAs für Excel 2000. Das bedeutet, dass Du an mehreren Stellen nur "object" zurück bekommst anstatt z.B. "Worksheet". Dann musst Du eben einen Type-Cast machen.

L
82 Beiträge seit 2006
vor 17 Jahren

Hmmm, kann leider nur 5.0 oder 9.0 auswählen. Habe jetzt mal mit einem kurzen Codestück angefangen und kriege schon bei der ersten Zeile:
Excel.Application ExApp = new Excel.Application();

eine mit nicht verständliche Fehlermeldung:
SecurityException wurde nicht behandelt.

Sytem.Security.Permissions.SecurityPermission

Das ganze in einem Fehlerfenster welches auf diese Zeile zeigt.

Gibt es da ein Problem mit den Systemeinstellungen?

Gruß

3.728 Beiträge seit 2005
vor 17 Jahren

Sorry, meinte 9.0. Copy & Paste Fehler.

Nimm die 9.0er Library, die ist richtig.

Wie lautet die genaue Message der SecurityException?

L
82 Beiträge seit 2006
vor 17 Jahren

Also wie gesagt... da geht ein Fenster auf. Das Fenster hat den Titel:
SecurityException wurde nicht behandelt.

Unten drunter steht:
System.Security.Permissions.SecurityPermission

und da drutner:
Hinweise zur Fehlerbehebung

Wenn ich die dann aber anklicke, kommt auch nur eine Meldung ala:
Nichts gefunden... Sie haben ausgewählt keine Online Hilfe (wie kann ich das
umstellen?).

Dann habe ich eben noch auf Details anzeigen geklickt. Dann geht ein neues Fenster auf:
+System.Security.SecurityException

Wenn ich auf das + klicke, kommt ein Riesenbatzen an Infos. Weiß aber jetzt nicht was "die genaue Fehlermeldung" ist.

Gruß

L
82 Beiträge seit 2006
vor 17 Jahren

Hmm, hilft das weiter?

System.Security.SecurityException wurde nicht behandelt.
Message="System.Security.Permissions.SecurityPermission"
Source="ConsoleApplication1"
StackTrace:
bei ConsoleApplication1.Program.Main(String[] args)
bei System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.runTryCode(Object userData)
bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()

3.728 Beiträge seit 2005
vor 17 Jahren
Berechtigungen

Deine Anwendung bzw. dein Benutzerkonto hat keine Berechtigung, COM-Objekte zu erzeugen. Du solltest folgendes prüfen:
*In welchen Sicherheitsgruppen ist der Benutzer, unter dem Deine Anwendung ausgeführt wird (z.B. Administratoren und Benutzer)? *Wird Deine Anwendung nicht von einer lokalen Festplatte ausgeführt (sondern z.B. von einer Netzwerkfreigabe aus)? *Greift Deine Anwendung auf Dateien zu, auf die das aktuelle Benutzerkonto möglicherweise keine NTFS-Zugriffsrechte hat? *Hat Deine Anwendung einen "Strong Name" (Mit snk-Datei signiert)? *In welcher CAS-Codegruppe ist Deine Anwendung bzw. welchen Berechtigungssatz hat diese Gruppe?

Funktioniert mein Reflection Beispiel von weiter oben, wenn Du es per Copy & Paste in ein neues, leeres Konsolenprojekt kopierst und startest?

D
63 Beiträge seit 2006
vor 17 Jahren

Hallo,
ne Frage, wie bekomme ich es hin eine gesamte excel datei auszulesen inkl alller sheets?

225 Beiträge seit 2006
vor 17 Jahren

Hi,

für alle verzweifelten C#/Programmier-Neulinge. Bitte nicht weglaufen vor den OLE-Objekten. Wenn ihr wirklich nur Daten lesen/schreiben wollte gehts auch einfacher. Über ADO.


private OleDbConnection con = new OleDbConnection();
private DataTable dt;
OleDbDataAdapter da = new OleDbDataAdapter();
OleDbCommand cmd = new OleDbCommand();

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source="+ path +";" +
"Extended Properties=Excel 8.0";
con.Open();

cmd.Connection = con;
cmd.CommandText = "SELECT * FROM [Tabelle1$];"
da.SelectCommand = cmd;
da.Fill(dt);

Damit gehts auch. Dann habt ihr die komplette Excel Tabelle in eurem DataTable.

Wenn ihr jedoch so Spielereien wie "eine neue Tabelle erstellen" machen wollt müsst ihr wieder auf OLE zurückgreifen.

Edit:
Naja. Sind 5 Zeilen geworden 😉

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

3.728 Beiträge seit 2005
vor 17 Jahren
DataTable in Excel schreiben
1.378 Beiträge seit 2006
vor 17 Jahren

Ist es eigentlich etwas "schlechtes", die Interop Libs zu verwenden, wenn hier dauernd auf alternativen hingewiesen wird?

225 Beiträge seit 2006
vor 17 Jahren

Auf die Gefahr hin, dass ich wieder geköpft werde ^^

Du kannst auch viel einfacher mit


da.Update(dt);

die Daten wieder in Excel speichern.

Allerdings hab ich so den Eindruck, dass die Update() des DataAdapter etwas verpöhnt ist.
Weiss leider nichts genaues drüber. Ich benutze ihn jedenfalls und hatte eigentlich noch nie Probleme mit ihm.

Wer genaueres weiss warum die .Update Methode Nachteile liefet oder unsauber sein sollte bitte bei mir melden.
Würde mich sehr dafür interessieren.

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

3.728 Beiträge seit 2005
vor 17 Jahren

@Puppetmaster: Warum sollte Dich jemand köpfen, wenn Du einen DataAdapter verwendest? Der ist absolut Klasse. Ich verwende fast ausschließlich DataAdapter zum persisitieren von Änderungen.

@xxxprod:

Original von xxxprod
Ist es eigentlich etwas "schlechtes", die Interop Libs zu verwenden, wenn hier dauernd auf alternativen hingewiesen wird?

Keinesfalls. Die Interop-Assemblies ermöglichen COM-Automatisierung. Das bedeutet "fernsteuern" einer COM-Anwendung (z.B. Excel). Wenn es darum geht bestimmte Excel-Funktionen aufzurufen oder Excel ein paar neue Symbolleistenknöpfe zu verpassen ist das toll.

Es ist allerdings nicht toll, wenn Du z.B. 200 Zeilen aus einer Excel Tabelle lesen willst. Nicht dass das nicht mit COM-Interop ginge, aber es ist gut 50 Mal langsamer, als ein OLEDB-Zugriff. Der Geschwindigkeitsvorteil ist also ein schlagendes Argument.

Wenn die Datenmengen extrem groß sind (Tausende Datensätze) sollte man sich allerdings überlegn, ob Excel die richtige Anwendung dafür ist. Excel ist keine Datenbank.

Noch mal zur Entscheidungshilfe:

Wenn Du Excel-Daten schnell lesen und/oder schreiben willst, nimmst Du OLEDB.

Wenn Du Excel fernsteuern oder erweitern willst, aber keine großen Datenmengen aus Excel gelesen werden müssen, nimmst Du COM-Interop.

Gelöschter Account
vor 17 Jahren

kann man eigendlich beides nehmen?
z.B.
zur fernsteuerung (menue basteln usw..) com interopt aber um die daten zu lesen und zu bearbeiten oledb

und das alles in einer einzigen anwendung.

eine schoene möglichkeit um mit excel zu arbeiten und da drinnen rumzupfuschen ist da ncoh ein addin zu programmieren, was in vs2005 eine (relativ) superleichte sache ist. und so wie ich das gerade verstanden habe kann man auch anwendungsübergreifend (mein programm macht was in einem offenem oder geschlossenem excel workbook) arbeiten.

oft ist der grund dieser massiven einsätze von excel, das in großen firmen die höheren positionen total begeistert sind von den vielen farben und den tabellen die diese applikation darstellen kann. nun wollen sie immer mehr daran bearbeitet haben und auch zwischen den exceldateien daten in und herschaukeln usw.

leider lassen sich diese personen auch nicht so leicht von alternativen überzeugen, egal wie groß die datenmengen sind die diese tabellen beinhalten (und die sind manchmal am rande ihrer kapazität).

225 Beiträge seit 2006
vor 17 Jahren

kann man eigendlich beides nehmen?
z.B.
zur fernsteuerung (menue basteln usw..) com interopt aber um die daten zu lesen und zu bearbeiten oledb

und das alles in einer einzigen anwendung.

Natürlich kann man das. So ist es ja auch gedacht.

oft ist der grund dieser massiven einsätze von excel, das in großen firmen die höheren positionen total begeistert sind von den vielen farben und den tabellen die diese applikation darstellen kann.

Habe jetzt keine wirklichen Erfahrungen damit. Bin noch Schüler 😄.
Würde mich aber schon stark wundern, wenn Leute in Führungspositionen sich von hübschen Farben großartig beeindrucken lassen.
Da kommt es doch eher auf Funktionalität an (ok. Farbliche Markierungen sind ja irgendwo auch eine sehr wichtige Funktionalität, da man so Sachen oftmals viel klarer darstellen kann).

Aber prinzipiell ist Excel auch eine sehr tolle Sache. Man kann damit eigentlich wirklich ALLES machen, wenn es um Tabellenkalkulation geht (gerade weil es auch die Möglichkeit gibt eigene Scripts zu schreiben).

Natürlich ist Excel keine DB. Aber mal ehrlich. Es kann doch niemand so blöd sein, dass wenn er (als Laie) keine Ahnung von Informatik hat und ihm dann ein fachkompetenter Computerexperte sagt: "DAT SOLLTEST DU SEIN LASSEN!!!, dass er das dann in den Wind schlägt.

Oder ist das bei euch so?

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

Gelöschter Account
vor 17 Jahren

naja dann solltest du mal hier ne weile arbeiten.. ^^

zudem ensteht sowas nciht von heute auf morgen sondern eher so:
fängt klein an... kein problem... excel das mittel der wahl
es werden zusatzfunktionen benötigt... kein problem ein wenig vba hilft weiter
es werden zusatzinformationen eingefügt..ok das sollte reichen
es werden zusatinformationen benötigt..gut wir erreichen langsam die kapazität
es werden zusatzfunktionen benötigt... jetzt wirds langsam richtig groß..
es werden sheetübergreifende funktionen benötigt.. ok ok ok...
es werden noch mehr informationen benötigt... aaaaaaaaargggg
es werden noch mehr funktionen benötigt (also ist schon langsam im vba-editor unansehnlich mit den vieeeelen modulen...)
es werden zusatzinformationen benötigt...
.
.
.
.
.

das ganze passiert in zeiträumen von jahren... ergo hat keiner mehr eine ahung wie der quelltext genau aussieht und jedesmal muss man sich da reinlesen und langsam wirds sehr sehr komplex. zumal ein kompletter umstieg auf eine andere applikation schon extrem schwer währe...

(das ist jetzt zwar der extremste fall aber er existiert und das schlimmste daran ist das jedesmal nur quick and dirty lösungen implementiert wurden und das ist dann echt fatal weil es dann an jeder ecke und kante rumbuggt sobald man da eingreift)

3.728 Beiträge seit 2005
vor 17 Jahren

Original von Puppetmaster
Es kann doch niemand so blöd sein, dass wenn er (als Laie) keine Ahnung von Informatik hat und ihm dann ein fachkompetenter Computerexperte sagt: "DAT SOLLTEST DU SEIN LASSEN!!!, dass er das dann in den Wind schlägt.

Doch das gibt es sogar sehr häufig. Entweder wird so argumentiert: "Für Excel sind bereits Lizenzen vorhanden und die Mitarbeiten kennen sich damit aus!" oder so: "Aber wir wollen es trotzdem in Excel haben!".

VSTO ist die Rettung. Die eigenen Windows.Forms und Windows.Forms-Controls laufen einfach in Excel ab und alle Excel-Fanatiker sind zufrieden. Das ist dann, als müssten sie nachts zum pinkeln nicht mehr aufstehen (Einfach in der warmen, vertrauten Umgebung alles laufen lassen).

225 Beiträge seit 2006
vor 17 Jahren

Das ist dann, als müssten sie nachts zum pinkeln nicht mehr aufstehen (Einfach in der warmen, vertrauten Umgebung alles laufen lassen).

Ein sehr schöner Vergleich ^^.

Hab ich noch nichts von gehört (VSTO). Hört sich aber doch schon mal gut an.

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

A
15 Beiträge seit 2007
vor 17 Jahren
Noch ein Problem mit String-Daten

Hallo,
hab auch noch eine Frage:
importiere derzeit aus Excel via ADO.NET (OleDbDataAdapter wie weiter oben beschrieben) eine Tabelle.
Die soll beim Import in die lokale DataTable nur Spalten vom Typ String haben.
Es soll also beim Abfragen ein evtl. Zahlen-Wert in String konvertiert werden.
Wenn in einer Excel-Spalte nun aber Zahlen als auch Stringwerte stehen (die zwar Zahlen sind, aber als String in der Excel-Tabelle gespeichert sind) , wird die lokale DataTable nur mit den Werten gefüllt, die dem Typ der Spalte ersten Row im Excel-Sheet entsprechen. Alles andere bleibt leer.
Ich brauch die Daten aber so.

Hat jemand hier Erfahrungen gemacht?

Danke

225 Beiträge seit 2006
vor 17 Jahren

öhm. Ich bin nicht sicher ob ich dich richtig verstanden habe.

Aber prinzipiell sollten alle Columns aus Excel importiert werden, unabhängig vom Datentyp.

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

A
15 Beiträge seit 2007
vor 17 Jahren

Nun ja, ich hab mich wohl nicht korrekt ausgedrückt.
Ich kann sehr wohl alle Columns abfragen.
Aber nachdem die Methode Fill() des OleDbDataAdapters ausgeführt wird,
ist es so, dass Daten einzelner Columns aus einer Row fehlen.

Beispiel:
Eine Excel-Spalte enthält normalerweise Zahlen in Spalte E (auch so formatiert).
Die ersten 10 Zeilen sind normal mit Zahlen befüllt.
Zeile 11 enthält in Spalte E ebenfalls eine Zahl, diese ist jedoch als Text formatiert (grünes Dreieck in Excel).
Dieser Wert wird beim Befüllen der Datatable NICHT gelesen.

Ich habe es auch mit einem DataReader versucht. Ebenfalls kein Wert.

Ich hoffe, die Beschreibung ist besser so.

Gruß
Andreas

225 Beiträge seit 2006
vor 17 Jahren

Ja. Jetzt hab ich dich verstanden.

Was Du probiert widerspricht jedem Datenbankmodell.
Jede Column/Spalte muss durchgängig den gleichen Datentyp haben. Selbst wenn Du irgendwie eine Lösung finden würdest währe es nur ein "workaround" und mit Sicherheit sehr unsauber.

Am besten probierst Du es auf einem komplett anderem Weg. Du könntest z.B eine Spalte für die Zahlen und eine für die Zahlen als Text anlegen.

Nur so nebenbei. Warum willst Du überhaupt die Zahlen einmal als Text und einmal als numerische Werte speichern?

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

A
15 Beiträge seit 2007
vor 17 Jahren
Spalten lesen

Hallo,

ich will die Spalten nicht in verschiedenen Formaten speichern.
Alle Spalten sollten von Excel importiert werden in eine lokale Tabelle.
Alle Spalten sind in der lokalen Tabelle als varchar-Spalten definiert.

Das Problem ist, die Excel-Tabelle mit den "unterschiedlichen Daten"
kommt von extern daher und ich kann meinen Usern nicht zumuten,
zuerst in der Excel-Tabelle die Spalten zu korrigieren,
bevor die Tabelle über das Programm importiert wird.
Deshalb versuche ich beim Import erst mal ALLES war daher kommt als
String zu lesen, damit ich das dann auch in die DB schreiben kann.
Ein Convert vor dem Schreiben wäre dann kein Problem mehr.

Hier mal mein Code zur Ansicht:


try
            {
                conExcel.Open();

                daExcel.Fill(dtExcel);
                conExcel.Close();
                

                //Progressbar für die Länge initialisieren.
                rowsCountExcelPreCount = (int)dtExcel.Rows.Count;
                proFuellen.Maximum = rowsCountExcelPreCount;
                proFuellen.Step = 1;
                

                dtTelefon = new DataTable("dtTelefon");
                ds.Tables.Add(dtTelefon);

                daTelefon.Fill(dtTelefon);
                
                dtTelefon.AcceptChanges();

                conData.Open();
                
                foreach (DataRow row in dtExcel.Rows)
                {
                    
                    //strData = "";
                    String strColumnName;
                    string strColumnValue;
                    DataRow newRow = dtTelefon.NewRow();
                    newRow.BeginEdit();

                    foreach (DataColumn col in dtTelefon.Columns)
                    {
                        
                        strColumnName = col.ToString();
                        strColumnValue = Convert.ToString(row[col.ToString()]);
                        
                        if (row[strColumnName].ToString().Length > 0) // Prüfen, ob das Feld gefüllt ist
                            newRow[strColumnName] = strColumnValue;
                        else
                        {
                            switch(strColumnName.ToLower())
                            {
                                
                                case "id":
                                    anzahlNewPersonalId++;
                                    if (anzahlNewPersonalId == 1)
                                    {
                                        aktuellePersonalId = Convert.ToInt32(GetNewPersonalID());
                                    }
                                    else
                                    {
                                        aktuellePersonalId -= 1;
                                    }
                                    newRow[col.ToString()] = aktuellePersonalId.ToString();
                                    break;
                                case "name":
                                    newRow[col.ToString()] = "";
                                    break;
                                case "abteilung":
                                    newRow[col.ToString()] = "_NA";
                                    break;
                                case "abteilungsbezeichnung":
                                    newRow[col.ToString()] = "keine Zuordnung";
                                    break;

                                default:
                                    newRow[col.ToString()] = "";
                                    break;
                            }

                        }
                        
                    }
                    newRow.EndEdit();
                   // Einfügen des neuen Datensatzes in die lokale Tabelle                    
                   SubmitAddedTelefon(cmdInsertTelefon, newRow);
                    rowsCountExcel += 1;
                    
                }

                
                // Änderungen an die Datenbank zurückschreiben
                daTelefon.Update(dtTelefon);

            }
            
            catch (Exception ex) ....

225 Beiträge seit 2006
vor 17 Jahren

Da wirst Du mit ODBC nicht weiterkommen.

Dir wird es wohl nicht erspart bleiben dich etwas mit COM zu beschäftigen.

Hier ein guter Thread Link

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

|
24 Beiträge seit 2007
vor 16 Jahren

Hallo Leute,

Bin neu hier im Forum und will euch hier auch mal alle begrüssen.

Hab im Grunde genommen fast das gleiche Problem wie oben schon beschrieben. Hab dann auch folgenden Script kopiert und bei mir eingefügt:


        OleDbConnection con = new OleDbConnection();
        DataTable dt = new DataTable();
        OleDbDataAdapter da = new OleDbDataAdapter();
        OleDbCommand cmd = new OleDbCommand();

        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
        "Data Source=" +  Server.MapPath("Profile") + "\\Profile.xls;" +
        "Extended Properties=Excel 8.0";
        con.Open();

        cmd.Connection = con;
        cmd.CommandText = "SELECT * FROM ???;";
        da.SelectCommand = cmd;
        da.Fill(dt);

        con.Close();

Es sei noch gesagt dass ich sehr neu bin auf dem Gebiet.

Folgendes Problem:
Ich lade mit Hilfe eines Upload-Scripts in ASP.NET eine xls-Datei auf den Server. Diese xls-Datei enthällt 2 Sheets. Und zwar weiß ich den Namen der Sheets nicht. Nun will ich aber über ASP.NET alle Daten aus dem 2. Sheet in eine DataTable schmeissen, dort ein wenig bearbeiten und eine neue xls-Datei mit den bearbeiteten Daten der DataTable erstellen.

Das sind nun viele Probleme auf einmal 😉. Hoffe es kann mir jemand helfen dass ich wenigstens die Daten aus dem 2. Sheet in ne DataTable bekommen. Umgekehrt müsste ich schon in den FAQs herausfinden.

Vielen Dank schon mal im Voraus

|
24 Beiträge seit 2007
vor 16 Jahren

Hat sich erledigt.

S
126 Beiträge seit 2007
vor 16 Jahren
ExcelFilename rauslesen

Hallo,

meine Frage passt genau zu diesem Thread, deswegen werd ich sie gleich hier stellen:

Ich lese eine Excel datei genauso, wie Rainbird es beschrieben hat, jedoch nehm ich das Excel file, dass gerade geöffnet ist.

Jetzt ist meine Frage: wie krieg ich den Dateinamen des Excel files?

hat jemand ne idee?

3.728 Beiträge seit 2005
vor 16 Jahren
Beschrieben

Meinst Du jetzt Zugriff über COM oder OLEDB?

S
126 Beiträge seit 2007
vor 16 Jahren

über COM

hier mal mein quellcode:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Xml;
using System.IO;

namespace Standardkataloge
{
    class program
    {

        private static createXML xml;

        public program()
        {
            xml = new createXML();
        }

        public static bool E = false;
        public static bool G = false;
        public static bool H = false;
        public static bool C = false;
        public static bool S = false;
        public static bool T = false;
        public static bool R = false;

        public static int code = 100;

        public static string[] array = new string[30];
        public static string[] englishArray = new string[30];
        public static string[] number = new string[30];
        public static string[] department = new string[5];
        public static string[] name = new string[5];
        public static string[] date = new string[3];
        public static char[] datelongC1 = new char[3];
        public static char[] datelongD1 = new char[3];

        private static object excel;
        private static object sheet;

        public static void Date(bool isDate)
        {
            //Readout Date
            object rangeC1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "C1", Missing.Value });
            object rangeD1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "D1", Missing.Value });

            date[0] = Convert.ToString(rangeC1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeC1, new object[0]));
            date[1] = Convert.ToString(rangeD1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeD1, new object[0]));

            Marshal.ReleaseComObject(rangeC1);
            Marshal.ReleaseComObject(rangeD1);

        }

        public static void Name(bool isName)
        {
            //Readout short-Name and long-Name from A1 and B1
            object rangeA1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A1", Missing.Value });
            object rangeB1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B1", Missing.Value });

            name[0] = Convert.ToString(rangeA1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA1, new object[0]));
            name[1] = Convert.ToString(rangeB1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB1, new object[0]));

            Marshal.ReleaseComObject(rangeA1);
            Marshal.ReleaseComObject(rangeB1);
        }

        public static void Department(bool isDep)
        {
            //Readout Cell D1, E1, F1 and compare it together in with Cell the Department is
            object rangeD1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "D1", Missing.Value });
            object rangeE1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "E1", Missing.Value });
            object rangeF1 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "F1", Missing.Value });

            department[0] = Convert.ToString(rangeD1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeD1, new object[0]));
            department[1] = Convert.ToString(rangeE1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeE1, new object[0]));
            department[2] = Convert.ToString(rangeF1.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeF1, new object[0]));

            Marshal.ReleaseComObject(rangeD1);
            Marshal.ReleaseComObject(rangeE1);
            Marshal.ReleaseComObject(rangeF1);
        }

        public static void Numbers(bool isNumber)
        {
            //Readout Numbers From the first Column
            object rangeA3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A3", Missing.Value });
            object rangeA5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A5", Missing.Value });
            object rangeA7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A7", Missing.Value });
            object rangeA9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A9", Missing.Value });
            object rangeA11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A11", Missing.Value });
            object rangeA13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A13", Missing.Value });
            object rangeA15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A15", Missing.Value });
            object rangeA17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A17", Missing.Value });
            object rangeA19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A19", Missing.Value });
            object rangeA21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A21", Missing.Value });
            object rangeA23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A23", Missing.Value });
            object rangeA25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A25", Missing.Value });
            object rangeA27 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A27", Missing.Value });
            object rangeA29 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "A29", Missing.Value });

            number[0] = Convert.ToString(rangeA3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA3, new object[0]));
            number[1] = Convert.ToString(rangeA5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA5, new object[0]));
            number[2] = Convert.ToString(rangeA7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA7, new object[0]));
            number[3] = Convert.ToString(rangeA9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA9, new object[0]));
            number[4] = Convert.ToString(rangeA11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA11, new object[0]));
            number[5] = Convert.ToString(rangeA13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA13, new object[0]));
            number[6] = Convert.ToString(rangeA15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA15, new object[0]));
            number[7] = Convert.ToString(rangeA17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA17, new object[0]));
            number[8] = Convert.ToString(rangeA19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA19, new object[0]));
            number[9] = Convert.ToString(rangeA21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA21, new object[0]));
            number[10] = Convert.ToString(rangeA23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA23, new object[0]));
            number[11] = Convert.ToString(rangeA25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA25, new object[0]));
            number[12] = Convert.ToString(rangeA27.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeA27, new object[0]));
            number[13] = Convert.ToString(rangeA29.GetType().InvokeMember("value", BindingFlags.GetProperty, null, rangeA29, new object[0]));

            Marshal.ReleaseComObject(rangeA3);
            Marshal.ReleaseComObject(rangeA5);
            Marshal.ReleaseComObject(rangeA7);
            Marshal.ReleaseComObject(rangeA9);
            Marshal.ReleaseComObject(rangeA11);
            Marshal.ReleaseComObject(rangeA13);
            Marshal.ReleaseComObject(rangeA15);
            Marshal.ReleaseComObject(rangeA17);
            Marshal.ReleaseComObject(rangeA19);
            Marshal.ReleaseComObject(rangeA21);
            Marshal.ReleaseComObject(rangeA23);
            Marshal.ReleaseComObject(rangeA25);
            Marshal.ReleaseComObject(rangeA27);
            Marshal.ReleaseComObject(rangeA29);
         }


        public static void Ersatz(bool isErsatz)
        {
            //Readout English Column
            object rangeB3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B3", Missing.Value });
            object rangeB5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B5", Missing.Value });
            object rangeB7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B7", Missing.Value });
            object rangeB9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B9", Missing.Value });
            object rangeB11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B11", Missing.Value });
            object rangeB13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B13", Missing.Value });
            object rangeB15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B15", Missing.Value });
            object rangeB17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B17", Missing.Value });
            object rangeB19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B19", Missing.Value });
            object rangeB21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B21", Missing.Value });
            object rangeB23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B23", Missing.Value });
            object rangeB25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B25", Missing.Value });

            englishArray[0] = Convert.ToString(rangeB3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB3, new object[0]));
            englishArray[1] = Convert.ToString(rangeB5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB5, new object[0]));
            englishArray[2] = Convert.ToString(rangeB7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB7, new object[0]));
            englishArray[3] = Convert.ToString(rangeB9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB9, new object[0]));
            englishArray[4] = Convert.ToString(rangeB11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB11, new object[0]));
            englishArray[5] = Convert.ToString(rangeB13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB13, new object[0]));
            englishArray[6] = Convert.ToString(rangeB15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB15, new object[0]));
            englishArray[7] = Convert.ToString(rangeB17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB17, new object[0]));
            englishArray[8] = Convert.ToString(rangeB19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB19, new object[0]));
            englishArray[9] = Convert.ToString(rangeB21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB21, new object[0]));
            englishArray[10] = Convert.ToString(rangeB23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB23, new object[0]));
            englishArray[11] = Convert.ToString(rangeB25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB25, new object[0]));

            Marshal.ReleaseComObject(rangeB3);
            Marshal.ReleaseComObject(rangeB5);
            Marshal.ReleaseComObject(rangeB7);
            Marshal.ReleaseComObject(rangeB9);
            Marshal.ReleaseComObject(rangeB11);
            Marshal.ReleaseComObject(rangeB13);
            Marshal.ReleaseComObject(rangeB15);
            Marshal.ReleaseComObject(rangeB17);
            Marshal.ReleaseComObject(rangeB19);
            Marshal.ReleaseComObject(rangeB21);
            Marshal.ReleaseComObject(rangeB23);
            Marshal.ReleaseComObject(rangeB25);
        }


        public void ReadE(bool isEnglish)
        {
            //Readout English Column
            object rangeB3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B3", Missing.Value });
            object rangeB5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B5", Missing.Value });
            object rangeB7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B7", Missing.Value });
            object rangeB9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B9", Missing.Value });
            object rangeB11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B11", Missing.Value });
            object rangeB13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B13", Missing.Value });
            object rangeB15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B15", Missing.Value });
            object rangeB17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B17", Missing.Value });
            object rangeB19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B19", Missing.Value });
            object rangeB21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B21", Missing.Value });
            object rangeB23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B23", Missing.Value });
            object rangeB25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "B25", Missing.Value });

            englishArray[0] = Convert.ToString(rangeB3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB3, new object[0]));
            englishArray[1] = Convert.ToString(rangeB5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB5, new object[0]));
            englishArray[2] = Convert.ToString(rangeB7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB7, new object[0]));
            englishArray[3] = Convert.ToString(rangeB9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB9, new object[0]));
            englishArray[4] = Convert.ToString(rangeB11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB11, new object[0]));
            englishArray[5] = Convert.ToString(rangeB13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB13, new object[0]));
            englishArray[6] = Convert.ToString(rangeB15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB15, new object[0]));
            englishArray[7] = Convert.ToString(rangeB17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB17, new object[0]));
            englishArray[8] = Convert.ToString(rangeB19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB19, new object[0]));
            englishArray[9] = Convert.ToString(rangeB21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB21, new object[0]));
            englishArray[10] = Convert.ToString(rangeB23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB23, new object[0]));
            englishArray[11] = Convert.ToString(rangeB25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeB25, new object[0]));

            Marshal.ReleaseComObject(rangeB3);
            Marshal.ReleaseComObject(rangeB5);
            Marshal.ReleaseComObject(rangeB7);
            Marshal.ReleaseComObject(rangeB9);
            Marshal.ReleaseComObject(rangeB11);
            Marshal.ReleaseComObject(rangeB13);
            Marshal.ReleaseComObject(rangeB15);
            Marshal.ReleaseComObject(rangeB17);
            Marshal.ReleaseComObject(rangeB19);
            Marshal.ReleaseComObject(rangeB21);
            Marshal.ReleaseComObject(rangeB23);
            Marshal.ReleaseComObject(rangeB25);

            xml.WriteE(true);
        }

        public void ReadG(bool isGerman)
        {
            //Readout German Column
            object rangeG3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G3", Missing.Value });
            object rangeG5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G5", Missing.Value });
            object rangeG7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G7", Missing.Value });
            object rangeG9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G9", Missing.Value });
            object rangeG11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G11", Missing.Value });
            object rangeG13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G13", Missing.Value });
            object rangeG15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G15", Missing.Value });
            object rangeG17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G17", Missing.Value });
            object rangeG19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G19", Missing.Value });
            object rangeG21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G21", Missing.Value });
            object rangeG23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G23", Missing.Value });
            object rangeG25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "G25", Missing.Value });


            array[0] = Convert.ToString(rangeG3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG3, new object[0]));
            array[1] = Convert.ToString(rangeG5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG5, new object[0]));
            array[2] = Convert.ToString(rangeG7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG7, new object[0]));
            array[3] = Convert.ToString(rangeG9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG9, new object[0]));
            array[4] = Convert.ToString(rangeG11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG11, new object[0]));
            array[5] = Convert.ToString(rangeG13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG13, new object[0]));
            array[6] = Convert.ToString(rangeG15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG15, new object[0]));
            array[7] = Convert.ToString(rangeG17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG17, new object[0]));
            array[8] = Convert.ToString(rangeG19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG19, new object[0]));
            array[9] = Convert.ToString(rangeG21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG21, new object[0]));
            array[10] = Convert.ToString(rangeG23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG23, new object[0]));
            array[11] = Convert.ToString(rangeG25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeG25, new object[0]));

            Marshal.ReleaseComObject(rangeG3);
            Marshal.ReleaseComObject(rangeG5);
            Marshal.ReleaseComObject(rangeG7);
            Marshal.ReleaseComObject(rangeG9);
            Marshal.ReleaseComObject(rangeG11);
            Marshal.ReleaseComObject(rangeG13);
            Marshal.ReleaseComObject(rangeG15);
            Marshal.ReleaseComObject(rangeG17);
            Marshal.ReleaseComObject(rangeG19);
            Marshal.ReleaseComObject(rangeG21);
            Marshal.ReleaseComObject(rangeG23);
            Marshal.ReleaseComObject(rangeG25);

            xml.WriteG(true);
        }

        public void ReadH(bool isHungarian)
        {
            //Readout Hungarian Column
            object rangeI3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I3", Missing.Value });
            object rangeI5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I5", Missing.Value });
            object rangeI7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I7", Missing.Value });
            object rangeI9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I9", Missing.Value });
            object rangeI11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I11", Missing.Value });
            object rangeI13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I13", Missing.Value });
            object rangeI15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I15", Missing.Value });
            object rangeI17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I17", Missing.Value });
            object rangeI19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I19", Missing.Value });
            object rangeI21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I21", Missing.Value });
            object rangeI23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I23", Missing.Value });
            object rangeI25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "I25", Missing.Value });

            array[0] = Convert.ToString(rangeI3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI3, new object[0]));
            array[1] = Convert.ToString(rangeI5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI5, new object[0]));
            array[2] = Convert.ToString(rangeI7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI7, new object[0]));
            array[3] = Convert.ToString(rangeI9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI9, new object[0]));
            array[4] = Convert.ToString(rangeI11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI11, new object[0]));
            array[5] = Convert.ToString(rangeI13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI13, new object[0]));
            array[6] = Convert.ToString(rangeI15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI15, new object[0]));
            array[7] = Convert.ToString(rangeI17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI17, new object[0]));
            array[8] = Convert.ToString(rangeI19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI19, new object[0]));
            array[9] = Convert.ToString(rangeI21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI21, new object[0]));
            array[10] = Convert.ToString(rangeI23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI23, new object[0]));
            array[11] = Convert.ToString(rangeI25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeI25, new object[0]));

            Marshal.ReleaseComObject(rangeI3);
            Marshal.ReleaseComObject(rangeI5);
            Marshal.ReleaseComObject(rangeI7);
            Marshal.ReleaseComObject(rangeI9);
            Marshal.ReleaseComObject(rangeI11);
            Marshal.ReleaseComObject(rangeI13);
            Marshal.ReleaseComObject(rangeI15);
            Marshal.ReleaseComObject(rangeI17);
            Marshal.ReleaseComObject(rangeI19);
            Marshal.ReleaseComObject(rangeI21);
            Marshal.ReleaseComObject(rangeI23);
            Marshal.ReleaseComObject(rangeI25);

            xml.WriteH(true);
        }

        public void ReadC(bool isChinese)
        {
            //Readout Chinese Column
            object rangeK3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K3", Missing.Value });
            object rangeK5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K5", Missing.Value });
            object rangeK7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K7", Missing.Value });
            object rangeK9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K9", Missing.Value });
            object rangeK11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K11", Missing.Value });
            object rangeK13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K13", Missing.Value });
            object rangeK15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K15", Missing.Value });
            object rangeK17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K17", Missing.Value });
            object rangeK19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K19", Missing.Value });
            object rangeK21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K21", Missing.Value });
            object rangeK23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K23", Missing.Value });
            object rangeK25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "K25", Missing.Value });

            array[0] = Convert.ToString(rangeK3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK3, new object[0]));
            array[1] = Convert.ToString(rangeK5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK5, new object[0]));
            array[2] = Convert.ToString(rangeK7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK7, new object[0]));
            array[3] = Convert.ToString(rangeK9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK9, new object[0]));
            array[4] = Convert.ToString(rangeK11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK11, new object[0]));
            array[5] = Convert.ToString(rangeK13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK13, new object[0]));
            array[6] = Convert.ToString(rangeK15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK15, new object[0]));
            array[7] = Convert.ToString(rangeK17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK17, new object[0]));
            array[8] = Convert.ToString(rangeK19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK19, new object[0]));
            array[9] = Convert.ToString(rangeK21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK21, new object[0]));
            array[10] = Convert.ToString(rangeK23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK23, new object[0]));
            array[11] = Convert.ToString(rangeK25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeK25, new object[0]));

            Marshal.ReleaseComObject(rangeK3);
            Marshal.ReleaseComObject(rangeK5);
            Marshal.ReleaseComObject(rangeK7);
            Marshal.ReleaseComObject(rangeK9);
            Marshal.ReleaseComObject(rangeK11);
            Marshal.ReleaseComObject(rangeK13);
            Marshal.ReleaseComObject(rangeK15);
            Marshal.ReleaseComObject(rangeK17);
            Marshal.ReleaseComObject(rangeK19);
            Marshal.ReleaseComObject(rangeK21);
            Marshal.ReleaseComObject(rangeK23);
            Marshal.ReleaseComObject(rangeK25);

            xml.WriteC(true);
        }

        public void ReadS(bool isSpain)
        {
            //Readout Spanish Column
            object rangeM3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M3", Missing.Value });
            object rangeM5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M5", Missing.Value });
            object rangeM7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M7", Missing.Value });
            object rangeM9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M9", Missing.Value });
            object rangeM11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M11", Missing.Value });
            object rangeM13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M13", Missing.Value });
            object rangeM15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M15", Missing.Value });
            object rangeM17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M17", Missing.Value });
            object rangeM19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M19", Missing.Value });
            object rangeM21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M21", Missing.Value });
            object rangeM23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M23", Missing.Value });
            object rangeM25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "M25", Missing.Value });

            array[0] = Convert.ToString(rangeM3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM3, new object[0]));
            array[1] = Convert.ToString(rangeM5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM5, new object[0]));
            array[2] = Convert.ToString(rangeM7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM7, new object[0]));
            array[3] = Convert.ToString(rangeM9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM9, new object[0]));
            array[4] = Convert.ToString(rangeM11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM11, new object[0]));
            array[5] = Convert.ToString(rangeM13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM13, new object[0]));
            array[6] = Convert.ToString(rangeM15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM15, new object[0]));
            array[7] = Convert.ToString(rangeM17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM17, new object[0]));
            array[8] = Convert.ToString(rangeM19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM19, new object[0]));
            array[9] = Convert.ToString(rangeM21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM21, new object[0]));
            array[10] = Convert.ToString(rangeM23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM23, new object[0]));
            array[11] = Convert.ToString(rangeM25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeM25, new object[0]));

            Marshal.ReleaseComObject(rangeM3);
            Marshal.ReleaseComObject(rangeM5);
            Marshal.ReleaseComObject(rangeM7);
            Marshal.ReleaseComObject(rangeM9);
            Marshal.ReleaseComObject(rangeM11);
            Marshal.ReleaseComObject(rangeM13);
            Marshal.ReleaseComObject(rangeM15);
            Marshal.ReleaseComObject(rangeM17);
            Marshal.ReleaseComObject(rangeM19);
            Marshal.ReleaseComObject(rangeM21);
            Marshal.ReleaseComObject(rangeM23);
            Marshal.ReleaseComObject(rangeM25);

            xml.WriteS(true);
        }

        public void ReadT(bool isTagalog)
        {
            //Readout Tagalog Column
            object rangeO3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O3", Missing.Value });
            object rangeO5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O5", Missing.Value });
            object rangeO7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O7", Missing.Value });
            object rangeO9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O9", Missing.Value });
            object rangeO11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O11", Missing.Value });
            object rangeO13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O13", Missing.Value });
            object rangeO15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O15", Missing.Value });
            object rangeO17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O17", Missing.Value });
            object rangeO19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O19", Missing.Value });
            object rangeO21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O21", Missing.Value });
            object rangeO23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O23", Missing.Value });
            object rangeO25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "O25", Missing.Value });

            array[0] = Convert.ToString(rangeO3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO3, new object[0]));
            array[1] = Convert.ToString(rangeO5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO5, new object[0]));
            array[2] = Convert.ToString(rangeO7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO7, new object[0]));
            array[3] = Convert.ToString(rangeO9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO9, new object[0]));
            array[4] = Convert.ToString(rangeO11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO11, new object[0]));
            array[5] = Convert.ToString(rangeO13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO13, new object[0]));
            array[6] = Convert.ToString(rangeO15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO15, new object[0]));
            array[7] = Convert.ToString(rangeO17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO17, new object[0]));
            array[8] = Convert.ToString(rangeO19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO19, new object[0]));
            array[9] = Convert.ToString(rangeO21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO21, new object[0]));
            array[10] = Convert.ToString(rangeO23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO23, new object[0]));
            array[11] = Convert.ToString(rangeO25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeO25, new object[0]));

            Marshal.ReleaseComObject(rangeO3);
            Marshal.ReleaseComObject(rangeO5);
            Marshal.ReleaseComObject(rangeO7);
            Marshal.ReleaseComObject(rangeO9);
            Marshal.ReleaseComObject(rangeO11);
            Marshal.ReleaseComObject(rangeO13);
            Marshal.ReleaseComObject(rangeO15);
            Marshal.ReleaseComObject(rangeO17);
            Marshal.ReleaseComObject(rangeO19);
            Marshal.ReleaseComObject(rangeO21);
            Marshal.ReleaseComObject(rangeO23);
            Marshal.ReleaseComObject(rangeO25);

            xml.WriteT(true);
        }

        public void ReadR(bool isRomania)
        {
            //Readout Romanian Column
            object rangeQ3 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q3", Missing.Value });
            object rangeQ5 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q5", Missing.Value });
            object rangeQ7 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q7", Missing.Value });
            object rangeQ9 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q9", Missing.Value });
            object rangeQ11 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q11", Missing.Value });
            object rangeQ13 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q13", Missing.Value });
            object rangeQ15 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q15", Missing.Value });
            object rangeQ17 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q17", Missing.Value });
            object rangeQ19 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q19", Missing.Value });
            object rangeQ21 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q21", Missing.Value });
            object rangeQ23 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q23", Missing.Value });
            object rangeQ25 = sheet.GetType().InvokeMember("Range", BindingFlags.GetProperty | BindingFlags.OptionalParamBinding, null, sheet, new object[2] { "Q25", Missing.Value });

            array[0] = Convert.ToString(rangeQ3.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ3, new object[0]));
            array[1] = Convert.ToString(rangeQ5.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ5, new object[0]));
            array[2] = Convert.ToString(rangeQ7.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ7, new object[0]));
            array[3] = Convert.ToString(rangeQ9.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ9, new object[0]));
            array[4] = Convert.ToString(rangeQ11.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ11, new object[0]));
            array[5] = Convert.ToString(rangeQ13.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ13, new object[0]));
            array[6] = Convert.ToString(rangeQ15.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ15, new object[0]));
            array[7] = Convert.ToString(rangeQ17.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ17, new object[0]));
            array[8] = Convert.ToString(rangeQ19.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ19, new object[0]));
            array[9] = Convert.ToString(rangeQ21.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ21, new object[0]));
            array[10] = Convert.ToString(rangeQ23.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ23, new object[0]));
            array[11] = Convert.ToString(rangeQ25.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeQ25, new object[0]));

            Marshal.ReleaseComObject(rangeQ3);
            Marshal.ReleaseComObject(rangeQ5);
            Marshal.ReleaseComObject(rangeQ7);
            Marshal.ReleaseComObject(rangeQ9);
            Marshal.ReleaseComObject(rangeQ11);
            Marshal.ReleaseComObject(rangeQ13);
            Marshal.ReleaseComObject(rangeQ15);
            Marshal.ReleaseComObject(rangeQ17);
            Marshal.ReleaseComObject(rangeQ19);
            Marshal.ReleaseComObject(rangeQ21);
            Marshal.ReleaseComObject(rangeQ23);
            Marshal.ReleaseComObject(rangeQ25);

            xml.WriteR(true);
        }

        [STAThread]
        public static void Main(String[] args)
        {
            excel = Marshal.GetActiveObject("Excel.Application");
            sheet = excel.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, excel, new object[0]);
            

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new hauptoberflaeche());

            Marshal.ReleaseComObject(sheet);
            Marshal.ReleaseComObject(excel);

        }
    }
}
3.728 Beiträge seit 2005
vor 16 Jahren
Workbook.FullName

Solche einfachen Dinge findest Du immer zu 99% im Objektkatalog von Excel. Den Objektkatalog bekommst Du, wenn Du Excel öffnest, dann [Alt] + [F11] und anschließend [F2] drückst. Für den Entwickler von Excel-Lösungen mittels COM-Zugriff ist dieses Objektkatalog das wichtigste Tool überhaupt! Wenn Du eine Methode markierst und [F1] drückst, zeigt Dir Excel eine schöne Hilfe mit tollen Beispielen in VBA an.

S
126 Beiträge seit 2007
vor 16 Jahren

Ja das hab ich auch gefunden, aber wie mach ich das jetzt?

3.728 Beiträge seit 2005
vor 16 Jahren
ActiveWorkbook

Das Workbook bekommst Du vom Excel.Application-Objekt. Und zwar über die Eigenschaft ActiveWorkbook. Dann hast Du ein Workbook-Objekt und kannst die FullName-Eigenschaft auslesen.

S
126 Beiträge seit 2007
vor 16 Jahren

Sorry, dass ich euch nochmal belästigen muss, aber ich krieg das einfach nicht hin.


private static object excel;
private static object sheet;
private static object workbook;

excel = Marshal.GetActiveObject("Excel.Application");
sheet = excel.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, excel, new object[0]);

workbook = Marshal.GetActiveObject("Excel.Application.ActiveWorkbook");

stimmt das denn so überhaupt?

5 Beiträge seit 2007
vor 16 Jahren

Hi,

wie man es mit deinem Marshall-Objekt macht, weiß ich leider nicht, aber vielleicht hilft dir das weiter:


((Microsoft.Office.Interop.Excel.Application)excel).ActiveWorkbook.Fullname

Damit solltest du eigentlich an den Namen rankommen.

Ich habe aber auch noch eine Frage in die Richtung:

Ich greife über ein Addin mit Interop auf das aktive Excel zu.
Nun möchte ich, dass bei Klick auf Button (welcher schon vorhanden ist und auch funktioniert), der Text des aktiven Blattes ausgegeben wird.

Mit


((Microsoft.Office.Interop.Excel._Worksheet)ExcelDatei.ActiveWorkbook.ActiveSheet).get_Range("A1", Missing.Value).Text

komme ich leider ja nur an eine Zelle. Gibt es die Möglichkeit auf das komplette Blatt zuzugreifen, oder muss ich da spezielle Wege gehen und einzeln durchsteppen. 🙁

MfG

RealKev

My software never has bugs. It just develops random features...
Die Zensur ist die Jüngere von zwei schändlichen Schwestern. Die Ältere heißt Inquisition

S
126 Beiträge seit 2007
vor 16 Jahren

Hi RealKev!!!!

VIELEN VIELEN DANK, es hat funktioniert!
Er gibt mir jetzt den Dateinamen aus.

VIELEN VIELEN DANK nochmal!!!