Benutzer mit den meisten Antworten
[Excel-Export] Hyperlink auf gleiche Mappe, anderes Blatt?

Frage
-
Hallo zusammen,
wie schon in der Überschrift erwähnt, verstehe ich die Hyperlink-Eigenschaft nicht. (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=DE-DE&k=k%28MICROSOFT.OFFICE.INTEROP.EXCEL._WORKSHEET.HYPERLINKS%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29;k%28DevLang-CSHARP%29&rd=true)
Wenn ich im Excel ein Hyperlink auf ein anderes Blatt in der gleichen Mappe erzeugen möchte, funktioniert das bei mir nicht.
Ich sehe zwar, wie der Hyperlink aussehen sollte, jedoch befinden sich keine Referenzen hinter dem Link.
Beispiel:
Tabelle1:
A B C D
1|1 a 70 70
2|2 b 80 80
3|3 c 90 90
Tabelle2:
A B C
1|70 d
2|80 e
3|90 f
Spalten: A => Index; B=> Name; C=>Verweis-Nummer ;D = Hyperlink
Aufgabe: In Tabelle1 soll in der Hyperlink-Spalte(D1) durch einen SVerweis nach der Verweis-Nummer(C1) aus der gleichen Zeile in der Tabelle2 (A:A (ganze Spalte)) gesucht werden.
Findet er diese Nummer (C1 in A:A), soll ein Hyperlink in der Hyperlink-Spalte erzeugt werden (D1).
In Excel sähe D1 so aus:
=HYPERLINK("#'Tabelle2'!A"&VERGLICH(C1;'Tabelle2'!A:A;0);
SVERWEIS(C1;'Tabelle2'!A:A;1;FALSCH))
Wie schreibe ich dies jetzt in C#?
Microsoft.Office.Interop.Excel.Worksheet excelWorkSheet = new Microsoft.Office.Interop.Excel.Worksheet();
Microsoft.Office.Interop.Excel.Range rangeToHoldHyperlink = excelWorkSheet.get_Range("A" + rowIndex, Type.Missing);
string hyperlinkTargetAddress = "\"#'" + excelWorkSheet.Name + "'!" + "A" + "\"&"
+ "VERGLEICH(" + "A" + rowIndex + ";'" + excelWorkSheet.Name + "'!" + matrix + ";0)";
excelWorkSheet.Hyperlinks.Add(rangeToHoldHyperlink, hyperlinkTargetAddress, Type.Missing, Type.Missing, "SVERWEIS(" + dataRow["X"].ToString() + ";" + excelWorkSheet.Name + "'!" + matrix + ";1;FALSCH))");??? => So funktioniert es wie beschrieben (also nicht).
Bin über jede Hilfe dankbar :)
Antworten
-
Hallo Honey-Heart,
Man muss sich entscheiden, ob man eine Formel, oder einen Hyperlink einfügen möchte. Im ersten Fall, weist man der Range.Formula-Eigenschaft einen entsprechenden Formel-String zu (Achtung Stolperfalle: engl. Nomenklatur notwendig!). Im zweiten Fall setzt man einfach die im voraus ermittelten Werte für die Parameter ein:
using System; using System.Reflection; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; // getestet mit Excel 2010 namespace HyperlinksDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonCreateWorkbook_Click(object sender, EventArgs e) { Excel.Application excelApp; Excel._Workbook workbook; Excel._Worksheet sheet1; Excel._Worksheet sheet2; try { //Exel starten excelApp = new Excel.Application(); excelApp.Visible = true; //Arbeitsmappe erstellen workbook = (Excel._Workbook)(excelApp.Workbooks.Add(Missing.Value)); sheet1 = (Excel._Worksheet)workbook.Sheets[1]; sheet2 = (Excel._Worksheet)workbook.Sheets[2]; //Tabelle 2 - Daten eingeben sheet2.Cells[1, 1] = 70; sheet2.Cells[1, 2] = "d"; sheet2.Cells[2, 1] = 80; sheet2.Cells[2, 2] = "e"; sheet2.Cells[3, 1] = 90; sheet2.Cells[3, 2] = "f"; //Tabelle 1 - Daten eingeben //Variante 1: Über Formelzuweisung sheet1.Cells[1, 1] = 1; sheet1.Cells[1, 2] = "a"; sheet1.Cells[1, 3] = 70; sheet1.get_Range("D1").Formula = "=HYPERLINK(\"#'Tabelle2'!A\" & MATCH(C1,'Tabelle2'!A:A,0),VLOOKUP(C1,'Tabelle2'!A:A,1,FALSE))"; sheet1.Cells[2, 1] = 2; sheet1.Cells[2, 2] = "b"; sheet1.Cells[2, 3] = 80; sheet1.get_Range("D2").Formula = "=HYPERLINK(\"#'Tabelle2'!A\" & MATCH(C2,'Tabelle2'!A:A,0),VLOOKUP(C2,'Tabelle2'!A:A,1,FALSE))"; sheet1.Cells[3, 1] = 3; sheet1.Cells[3, 2] = "c"; sheet1.Cells[3, 3] = 90; //Variante 2: Über Hyperlink-Objekt sheet1.Cells[3, 4] = null; Excel.Range hyperlinkAnchor = sheet1.get_Range("D3", Missing.Value); string hyperlinkAddress = "#Tabelle2!A3"; string hyperlinkDisplay = "90"; Excel.Hyperlink hyperlink = sheet1.Hyperlinks.Add(hyperlinkAnchor, hyperlinkAddress, Missing.Value, Missing.Value, hyperlinkDisplay); excelApp.Visible = true; excelApp.UserControl = true; } catch (Exception ex) { String errorMessage; errorMessage = "Fehler: "; errorMessage = String.Concat(errorMessage, ex.Message); errorMessage = String.Concat(errorMessage, " Zeile: "); errorMessage = String.Concat(errorMessage, ex.Source); MessageBox.Show(errorMessage, "Fehler"); } } } }
Gruß
Marcel- Als Antwort markiert Honey-Heart Dienstag, 17. Januar 2012 14:12
Alle Antworten
-
Hallo Honey-Heart,
Man muss sich entscheiden, ob man eine Formel, oder einen Hyperlink einfügen möchte. Im ersten Fall, weist man der Range.Formula-Eigenschaft einen entsprechenden Formel-String zu (Achtung Stolperfalle: engl. Nomenklatur notwendig!). Im zweiten Fall setzt man einfach die im voraus ermittelten Werte für die Parameter ein:
using System; using System.Reflection; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; // getestet mit Excel 2010 namespace HyperlinksDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonCreateWorkbook_Click(object sender, EventArgs e) { Excel.Application excelApp; Excel._Workbook workbook; Excel._Worksheet sheet1; Excel._Worksheet sheet2; try { //Exel starten excelApp = new Excel.Application(); excelApp.Visible = true; //Arbeitsmappe erstellen workbook = (Excel._Workbook)(excelApp.Workbooks.Add(Missing.Value)); sheet1 = (Excel._Worksheet)workbook.Sheets[1]; sheet2 = (Excel._Worksheet)workbook.Sheets[2]; //Tabelle 2 - Daten eingeben sheet2.Cells[1, 1] = 70; sheet2.Cells[1, 2] = "d"; sheet2.Cells[2, 1] = 80; sheet2.Cells[2, 2] = "e"; sheet2.Cells[3, 1] = 90; sheet2.Cells[3, 2] = "f"; //Tabelle 1 - Daten eingeben //Variante 1: Über Formelzuweisung sheet1.Cells[1, 1] = 1; sheet1.Cells[1, 2] = "a"; sheet1.Cells[1, 3] = 70; sheet1.get_Range("D1").Formula = "=HYPERLINK(\"#'Tabelle2'!A\" & MATCH(C1,'Tabelle2'!A:A,0),VLOOKUP(C1,'Tabelle2'!A:A,1,FALSE))"; sheet1.Cells[2, 1] = 2; sheet1.Cells[2, 2] = "b"; sheet1.Cells[2, 3] = 80; sheet1.get_Range("D2").Formula = "=HYPERLINK(\"#'Tabelle2'!A\" & MATCH(C2,'Tabelle2'!A:A,0),VLOOKUP(C2,'Tabelle2'!A:A,1,FALSE))"; sheet1.Cells[3, 1] = 3; sheet1.Cells[3, 2] = "c"; sheet1.Cells[3, 3] = 90; //Variante 2: Über Hyperlink-Objekt sheet1.Cells[3, 4] = null; Excel.Range hyperlinkAnchor = sheet1.get_Range("D3", Missing.Value); string hyperlinkAddress = "#Tabelle2!A3"; string hyperlinkDisplay = "90"; Excel.Hyperlink hyperlink = sheet1.Hyperlinks.Add(hyperlinkAnchor, hyperlinkAddress, Missing.Value, Missing.Value, hyperlinkDisplay); excelApp.Visible = true; excelApp.UserControl = true; } catch (Exception ex) { String errorMessage; errorMessage = "Fehler: "; errorMessage = String.Concat(errorMessage, ex.Message); errorMessage = String.Concat(errorMessage, " Zeile: "); errorMessage = String.Concat(errorMessage, ex.Source); MessageBox.Show(errorMessage, "Fehler"); } } } }
Gruß
Marcel- Als Antwort markiert Honey-Heart Dienstag, 17. Januar 2012 14:12
-
Danke, das ist die richtige Lösung!
Hatte heute bemerkt, dass ich zusätzlich noch ein Excel-Syntax-Fehler (in der Funktion) hatte. Als ich den heute "eliminiert" hatte, ist mir klar geworden, dass es unmöglich scheint (bzw ist!) eine Funktion in der Hyperlink-Methode miteinzubinden.
Und da kommst du gerade richtig :)
Kenne mich noch nicht mit der Bib
Microsoft.Office.Interop.Excel
aus :)
Danke noch einmal! (Auch für die schnelle Antwort) :)