2016-04-22 34 views
0

Ich möchte alle Lesezeichen im Dokument durchlaufen und setzen Sie Text für jedes Lesezeichen. Name aus Datagridview Zellen Werte, die bereits geladen ist. Ich stecke hier in dieser Schleife fest. Bitte, irgendwelche Vorschläge?C# docx Lesezeichen Schleife

using (Novacode.DocX document = DocX.Load(template)) 
{ 
    foreach (Novacode.Bookmark bookmark in document.Bookmarks) 
    { 
     //MessageBox.Show("\tFound bookmarks {0}", bookmark.Name); 
     //var bookmarks = bookmark.Name; 

     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[0].Value.ToString()); 

     int i = document.Bookmarks.Count; 

     var bookmarks = document.Bookmarks[i].Name; 

     document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[0].Value.ToString()); 
     document.Bookmarks[0].SetText(dataGridViewRow.Cells[1].Value.ToString()); 
     document.Bookmarks[1].SetText(dataGridViewRow.Cells[2].Value.ToString()); 
     document.Bookmarks[2].SetText(dataGridViewRow.Cells[3].Value.ToString()); 
     document.Bookmarks[3].SetText(dataGridViewRow.Cells[4].Value.ToString()); 

     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[2].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[3].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[4].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[5].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[6].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[7].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[8].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[9].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[10].Value.ToString()); 
     //document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[11].Value.ToString()); 
    }     
    document.SaveAs(path2); 
} 
+0

Wollen Sie sagen, dass Sie wissen, wie man die Eigenschaften einstellt, aber nicht weiß, wie man es in einer Schleife macht? – Alex

+0

place 'int i = document.Bookmarks.Count' äußere Schleife. –

+0

@Alex, ja das ist richtig. Ich möchte die Eigenschaft .Name für alle Lesezeichen im Dokument mit den Werten von datagridview festlegen. Zum Beispiel wird das zuerst gefundene Lesezeichen einen Wert von dataGridViewRow.Cells [0] erhalten, das zweite wird von dataGridViewRow.Cells [1] usw. erhalten, aber ich stecke fest. – dilesko

Antwort

0

Wenn ich Sie richtig verstehe, das ist, was Sie mit der Schleife zu erreichen versuchen:

using (Novacode.DocX document = DocX.Load(template)) 
{ 
int i = 0; 

foreach (Novacode.Bookmark bookmark in document.Bookmarks) 
{ 
    var bookmarks = document.Bookmarks[i].Name; 

    document.Bookmarks[bookmark.Name].SetText(dataGridViewRow.Cells[i+1].Value.ToString()); 

    i++; 
}     
document.SaveAs(path2); 
} 

Was wir hier deklariert wird eine Variable i getan haben, die außerhalb der Schleife ist, aber wir Inkrementiere seinen Wert mit jeder foreach-Iteration. Alternativ können Sie die Schleife neu zu schreiben und eine for Schleife verwenden, statt:

for(int i=0; i< document.Bookmarks.Count) 
{ 
     //change the code here accordingly 
} 

Lassen Sie mich wissen, ob das hilft. Danke.

+0

tnx Mann, es funktioniert aber, wenn es um das letzte Lesezeichen geht, bindet es die letzten zwei Zellenwerte. Ich denke, das liegt an [i + 1], und wenn ich nur [i] lege, bindet es die vorherige Spalte. Was ist zu tun? – dilesko

+0

@dilesko so funktioniert es für alles außer dem letzten Lesezeichen? – Alex

+0

yep, wenn die Zählung "i" das letzte Lesezeichen erreicht, wird der Wert aus den Zellen von datagridview, z. B. Zellen [4], und der Wert aus den nächsten Zellen [5] angezeigt. Also im Grunde innerhalb des erstellten Dokuments auf Lesezeichen Ort ist Zellen [4] .Wert + Zellen [5] .Wert, anstatt nur Zellen [4] .Wert. Verstehst du mich? :) – dilesko