5

我需要使用 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();
    }

我得到的输出如下: 在此处输入图像描述

我的预期输出如下: 在此处输入图像描述

4

1 回答 1

6

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

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

}
于 2014-03-25T04:07:11.807 回答