Hallo,
ich habe folgendes Problem, ich möchte die Arbeitsmappen einer Excel-Datei als "Items" in einem Listbox anzeigen lassen, und dann durch klicken auf die entsprechende Mappe die Datei bearbeiten können.
freue mich auf eure Antworten und Tipps.
public static void excel_auruf(string file)
{
Worksheet ws;
Microsoft.Office.Interop.Excel.Application excel = null;
string zellwert;
string datei = file;
Workbook wb = null;
try
{
// Excel starten
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Visible = false;
// Datei öpffnen
wb = excel.Workbooks.Open(
datei,
ExcelKonstanten.UpdateLinks.DontUpdate,
ExcelKonstanten.ReadOnly,
ExcelKonstanten.Format.Nothing,
"", // Passwort
"", // WriteResPasswort
ExcelKonstanten.IgnoreReadOnlyRecommended,
XlPlatform.xlWindows,
"", // Trennzeichen
ExcelKonstanten.Editable,
ExcelKonstanten.DontNotifiy,
ExcelKonstanten.Converter.Default,
ExcelKonstanten.DontAddToMru,
ExcelKonstanten.Local,
ExcelKonstanten.CorruptLoad.NormalLoad);
// Arbeitsblätter lesen
Sheets sheets = wb.Worksheets;
// ein Arbeitsblatt auswählen… diese zeiel funktioniert nur wenn ich bestimmte arbeitsmappe explizit entweder als [CENTER]zahl oder Name wähle!!!
Worksheet ws = (Worksheet)sheets.get_Item("x"); // x steht für eine beiliege zahl
also ich möchte irgend eine beliebige Excel Datei öffnen(das krieg ich noch hin) und das Programm soll automatische die Namen von Arbeitsmappen auslesen und diese Namen dann in eine Listbox ausgeben.
überigens danke für die schnelle antwotr!
Hallo,
wenn es nur darum geht die Mappennamen zu bekommen oder nur den Inhalt von Exceldateien auszulesen dann ist es besser mit OLEDB zu holen anstatt Excel selbst im Hintergrund zu starten. Schau mal hierein: http://www.codeproject.com/KB/aspnet/getsheetnames.aspx
**:::
Da muss ich vbprogger Recht geben...
Jedenfalls - um einzig und allein die Namen in der Listbox auszugeben könnte man deinen Code um folgenden Schnipsel ergänzen:
foreach (Worksheet sht in wb.Worksheets)
listBox1.Items.Add(sht.Name);
Bei deiner Zuweisung an die Variable ws (die du übrigens doppelt deklarierst):
Was möchtest du denn noch als Indexer verwenden um ein Item aus der Liste zu
bekommen ? (Verstehe das Problem leider nicht dass du hast...)
Wenn du nur die Namen in der ListBox hast könntest du z.B. auf "SelectedValueChanged" deiner ListBox reagieren und über
ListBox.SelectedValue.ToString() wieder den Tabellennamen für den Indexer bekommen.
Also
wb.Worksheets[listbox1.SelectedValue.ToString()]
Gruß
Achim
also vielen Dank Leute, da der Aufwand am geringsten war habe ich den Code so wie der Taipi88 vorgeschlagen hat, erweitert und jetzt funkts . 👍
aber macht euch keine Sorgen, da ich ja noch vieles mit dieser Datei anstellen will/werde, werden bestimmt noch weitere Fragen kommen!
vielen Dank!!