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

时间:2013-08-29 07:55:00

标签: c# .net ms-word office-interop

我需要使用C#代码将表打印到Word文档。我正面临着细胞中文本对齐的问题。

我的代码如下:

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

我得到的输出如下: enter image description here

我的预期输出如下: enter image description here

1 个答案:

答案 0 :(得分:5)

您无需为标头创建另一个表。它可以通过合并第一行的两个单元格并单独设置单元格的段落对齐来完成。 这是代码。

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
        {
        }

}