2016-04-22 9 views
0

ドキュメント内のすべてのブックマークを繰り返し、各ブックマークにテキストを設定したい。既にロードされている値のdatagridviewセルの名前。私はこのループでここにこだわっています。どうか、提案はありますか?C#docx bookmarks loop

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

プロパティを設定する方法は知っていますが、ループで行う方法はわかりませんか? – Alex

+0

ループの外側に 'int i = document.Bookmarks.Count'を配置します。 –

+0

@Alex、yes thats correct。私は、datagridviewの値を持つ文書内のすべてのブックマークの.Nameプロパティを設定したいと思います。たとえば、最初に見つかったブックマークはdataGridViewRow.Cells [0]から値を取得し、2番目はdataGridViewRow.Cells [1]などから取得しますが、スタックされています。 – dilesko

答えて

0

私が正しくあなたを理解していれば、これはあなたがループで達成しようとしているものです。

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); 
} 

は、私たちがここでやったことは、ループの外で変数iを宣言けどさforeachの繰り返しごとにその値を増やします。また、あなたはループを書き換えることができ、代わりにforループを使用します。

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

は、このことができますなら、私に教えてください。 ありがとうございます。

+0

tnx man、それは動作していますが、最後のブックマークになると、最後の2つのセル値がバインドされます。私はこれが[i + 1]のためだと思います、そして、私が[i]だけを置くと、前の列をバインドします。何をすべきか? – dilesko

+0

@dileskoので、最後のブックマーク以外はすべて正常に動作しますか? – Alex

+0

"i"カウントが最後のブックマークに達すると、datagridviewセルからの値、たとえばセル[4]がそこにあり、次のセル[5]からの値がそこにあります。基本的にブックマークの場所に作成された文書は、セル[4] .valueだけではなく、セル[4] .value + cells [5] .valueです。あなたは私を理解していますか? :) – dilesko