导出Datagridview到Word文档

本文关键字:文档 Word Datagridview 导出 | 更新日期: 2023-09-27 18:12:42

我使用以下代码从DatagGridview导出选定行到Word文档。代码正在工作,但有一个问题。它首先导出最后一行,我无法找出一种方法来使它按顺序导出。例如,如果我选择行[0,1,2,3],它将导出行[3],而不是[2]和[1]。知道是什么问题吗?

public void WordDoc(string getfilename)
        {

            object FileName = getfilename;

            //Create word Application Object
            Word.Application word = new Word.Application();
            //Create word document Object
            Word.Document doc = null;
            //Create word Missing Object
            object missing = System.Type.Missing;
            object readOnly = false;
            object isVisible = false;
            // make visible Word application
            word.Visible = true;
            try
            {
                doc = word.Documents.Open(ref FileName, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing);
                doc.Activate();    
foreach (DataGridViewRow rows in dataGridView1.SelectedRows)
                        {
                        string item1 = rows.Cells[0].Value.ToString();
                                string item2 = rows.Cells[2].Value.ToString();
                                string item3 = rows.Cells[3].Value.ToString();
                                string item4 = rows.Cells[4].Value.ToString();
                                string item5 = rows.Cells[5].Value.ToString();
                                string item6 = rows.Cells[6].Value.ToString();
                                string item7 = rows.Cells[7].Value.ToString();
                                string item8 = rows.Cells[8].Value.ToString();
                                string item9 = rows.Cells[9].Value.ToString();
                                string item10 = rows.Cells[10].Value.ToString();
                                string item11 = rows.Cells[11].Value.ToString();
                                string item12 = rows.Cells[12].Value.ToString();
                                this.FindAndReplace(word, "!0!", item1);
                                this.FindAndReplace(word, "!1!", item2);
                                this.FindAndReplace(word, "!2!", item3);
                                this.FindAndReplace(word, "!3!", item4);
                                this.FindAndReplace(word, "!4!", item5);
                                this.FindAndReplace(word, "!5!", item6);
                                this.FindAndReplace(word, "!6!", item7);
                                this.FindAndReplace(word, "!7!", item8);
                                this.FindAndReplace(word, "!8!", item9);
                                this.FindAndReplace(word, "!9!", item10);
                                this.FindAndReplace(word, "!10!", item11);
                                this.FindAndReplace(word, "!11!", item12);
                        }
}
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message);
            }
        }

            private void FindAndReplace(Word.Application word, object findText, object replaceText)
            {
                word.Selection.Find.ClearFormatting();
                object matchCase = true;
                object matchWholeWord = true;
                object matchWildCards = false;
                object matchSoundsLike = false;
                object matchAllWordForms = false;
                object forward = true;
                object format = true;
                object matchKashida = false;
                object matchDiacritics = false;
                object matchAlefHamza = false;
                object matchControl = false;
                object read_only = false;
                object visible = true;
                object replace = 1;
                object wrap = 2;
                word.Selection.Find.Execute(ref findText, ref matchCase,
                ref matchWholeWord, ref matchWildCards, ref matchSoundsLike,
                ref matchAllWordForms, ref forward, ref wrap, ref format,
                ref replaceText, ref replace, ref matchKashida,
                ref matchDiacritics,
                ref matchAlefHamza, ref matchControl);
        }       

导出Datagridview到Word文档

我认为这个Linq应该可以工作(你需要在"。cs"文件的顶部添加using System.Linq;):

var orderedRows = from DataGridViewRow row in dataGridView1.SelectedRows
                  orderby row.Index
                  select row;
foreach (DataGridViewRow row in orderedRows)
    ...

[EDIT]

这是使用Linq按照每行索引的顺序对返回的行进行排序。

关于Linq的介绍,请参阅本文档

但简单地说,它的工作原理是这样的:

首先,实现DataGridView。SelectedRows按用户选择的顺序返回行。

为了使它们按正确的顺序排列,我们需要按每一行的.Index属性对它们进行排序。

上面的Linq是这样做的:

"取dataGridView1中的所有行。SelectedRows并按每一行的Index属性排序,然后按该顺序返回所有行。

但这太复杂了,不能在这里完全讨论;你必须阅读我发布的Linq的介绍!