简体   繁体   English

如何使用C#.NET合并在MS Word中创建的表的单元格?

[英]How to merge cells of a table created in MS Word using C#.NET?

I need to print a table to the Word document using C# code. 我需要使用C#代码将表打印到Word文档。 I am facing issues with the alignment of text in the cells. 我正面临着细胞中文本对齐的问题。

My code is as follows: 我的代码如下:

private void CreateTableInDoc()
    {
        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);

        int i = 0;
        int j = 0;
        Microsoft.Office.Interop.Word.Table objTable;
        Microsoft.Office.Interop.Word.Range wrdRng = objDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

        string strText;
        objTable = objDoc.Tables.Add(wrdRng, 1, 1, ref oMissing, ref oMissing);
        objTable.Range.ParagraphFormat.SpaceAfter = 7;
        strText = "ABC Company";
        objTable.Rows[1].Range.Text = strText;
        strText = "";
        objTable.Rows[1].Range.Font.Bold = 1;
        objTable.Rows[1].Range.Font.Size = 24;
        objTable.Rows[1].Range.Font.Position = 1;
        objTable.Rows[1].Range.Font.Name = "Times New Roman";

        Microsoft.Office.Interop.Word.Table objNewTable;
        objNewTable = objDoc.Tables.Add(wrdRng, 3, 2, ref oMissing, ref oMissing);
        objNewTable.Rows[1].Range.Font.Name = "Times New Roman";
        objNewTable.Rows[1].Range.Font.Bold = 1;
        objNewTable.Rows[1].Range.Font.Italic = 1;
        objNewTable.Rows[1].Range.Font.Size = 14;
        objNewTable.Cell(1, 1).Range.Text = "Item Name";
        objNewTable.Cell(1, 2).Range.Text = "Price";

        for (i = 2; i <= 3; i++)
        {
            objNewTable.Rows[i].Range.Font.Name = "Times New Roman";
            objNewTable.Rows[i].Range.Font.Bold = 0;
            objNewTable.Rows[i].Range.Font.Italic = 0;
            objNewTable.Rows[i].Range.Font.Size = 12;
            for (j = 1; j <= 2; j++)
            {
                if (j == 1)
                    objNewTable.Cell(i, j).Range.Text = "Item " + (i-1);
                else
                    objNewTable.Cell(i, j).Range.Text = "Price of " + (i-1);
            }
        }

        try
        {
            objTable.Borders.Shadow = true;
            objNewTable.Borders.Shadow = true;
        }
        catch
        {
        }
        this.Close();
    }

The output that I get is as follows: 我得到的输出如下: 在此输入图像描述

My expected output is as follows: 我的预期产量如下: 在此输入图像描述

You don't need to create another table for header. 您不需要为标头创建另一个表。 It can done by merging two cell for very first row and set the paragraph alignment for the cell individually. 它可以通过合并第一行的两个单元格并单独设置单元格的段落对齐来完成。 here is the code. 这是代码。

public void CreateTableInDoc()
{
    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);
    int i = 0;
    int j = 0;
    Microsoft.Office.Interop.Word.Table objTable;
    Microsoft.Office.Interop.Word.Range wrdRng = objDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

    string strText;
    objTable = objDoc.Tables.Add(wrdRng, 4, 2, ref oMissing, ref oMissing);
    objTable.Range.ParagraphFormat.SpaceAfter = 7;
    strText = "ABC Company";
    objTable.Rows[1].Range.Text = strText;
    objTable.Rows[1].Range.Font.Bold = 1;
    objTable.Rows[1].Range.Font.Size = 24;
    objTable.Rows[1].Range.Font.Position = 1;
    objTable.Rows[1].Range.Font.Name = "Times New Roman";
    objTable.Rows[1].Cells[1].Merge(objTable.Rows[1].Cells[2]);
    objTable.Cell(1,1).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

    objTable.Rows[2].Range.Font.Italic = 1;
    objTable.Rows[2].Range.Font.Size = 14;
    objTable.Cell(2, 1).Range.Text = "Item Name";
    objTable.Cell(2, 2).Range.Text = "Price";
    objTable.Cell(2, 1).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
    objTable.Cell(2, 2).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

    for (i = 3; i <= 4; i++)
    {
        objTable.Rows[i].Range.Font.Bold = 0;
        objTable.Rows[i].Range.Font.Italic = 0;
        objTable.Rows[i].Range.Font.Size = 12;
        for (j = 1; j <= 2; j++)
        {
            if (j == 1)
                objTable.Cell(i, j).Range.Text = "Item " + (i - 1);
            else
                objTable.Cell(i, j).Range.Text = "Price of " + (i - 1);
        }
    }

        try
        {
            objTable.Borders.Shadow = true;
            objTable.Borders.Shadow = true;
        }
        catch
        {
        }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM