Interop word动态表创建

时间:2017-12-04 11:53:01

标签: c# winforms

我需要将数据集表导出到Word。我尝试过使用Interop Word的解决方案。我在这里面临一个问题,

我需要将表格放在word文档中,并带有一系列空格,我的问题是我无法在数据集上的每个表格中创建一个新表格。

这是我的代码,

    private void Exporttoword_Click(object sender, EventArgs e)
    {
        try
        {
            DataSet Ds = objMB.ExeQueryStrRetDsBL("SP_PreviewSeries" + cbMatches.SelectedValue, 1);
            object oMissing = System.Reflection.Missing.Value;
            object oEndOfDoc = "\\endofdoc";
            Microsoft.Office.Interop.Word._Application objWord;
            Microsoft.Office.Interop.Word._Document objDoc;
            objWord = new Microsoft.Office.Interop.Word.Application();
            objWord.Visible = true;
            objDoc = objWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

            for (var w = 0; w < Ds.Tables.Count; w++)
            {
                Microsoft.Office.Interop.Word.Table objTable;

                Microsoft.Office.Interop.Word.Range wrdRng = objDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
                objTable = objDoc.Tables.Add(wrdRng, Convert.ToInt32(Ds.Tables[w].Rows.Count), Convert.ToInt32(Ds.Tables[w].Columns.Count), ref oMissing, ref oMissing);
                objTable.Range.ParagraphFormat.SpaceAfter = 3;
                for (var i = 0; i < Ds.Tables[w].Rows.Count; i++)
                    for (var j = 0; j < Ds.Tables[w].Columns.Count; j++)
                    {
                        objTable.Cell(i + 1, j + 1).Range.Text = Ds.Tables[w].Rows[i][j].ToString();
                        objTable.Cell(i + 1, j + 1).Range.Borders.Enable = 1;
                    }
                objTable.Rows[1].Range.Font.Bold = 1;
                objTable.Rows[1].Range.Font.Italic = 1;
            }
            this.Close();
            string fp = @"D:\Practice\test.docx";
            objDoc.SaveAs2(fp);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

1 个答案:

答案 0 :(得分:0)

您需要在for循环中声明一个类似Word的段落。

 Microsoft.Office.Interop.Word.Paragraph paragraph;

并在for循环结束时

 paragraph = objDoc.Paragraphs.Add();

此解决方案适用于我。试试这个。