如何使用 office.interop.word 库在 c# 中向 table 插入标题

how to insert a caption to a table in c# with office.interop.word library

向所有阅读本文的人问好,我正在努力成为一名 C# 开发人员。分配给我的第一个项目是编写一个 word 文档报告自动化(并将其扩展到主应用程序)我从 Microsoft 文档中找到 office.interop.word 库文档相当令人生畏。

所以有一个 CaptionLabels Interface 并且它有一个 Add 方法但我不知道如何 将创建的标题分配给指定的 Table,这是我的代码:

using Word = Microsoft.Office.Interop.Word;
            object oMissing = System.Reflection.Missing.Value;
            object oEndOfDoc = "\endofdoc"; /* \endofdoc is a predefined bookmark */

            //Start Word and create a new document.
            Word._Application oWord;
            Word._Document oDoc;
            oWord = new Word.Application();
            oWord.Visible = true;
            Object oTemplate = "C:\Users\a_shiGenerate word document report\acidproTemplateDocx.docx";
            oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
            ref oMissing, ref oMissing);
          //some code in between here

            oWord.CaptionLabels.Add("some caption");
            object caption = oWord.CaptionLabels["some caption"];
            oWord.Selection.InsertCaption(ref caption, ref oMissing, ref oMissing, ref Tables[3], ref oMissing);
            /* in the line above Tables[3] is an unaccepted value but how to add this caption to this (any) particular table */
            oDoc.Tables.Add(wrdRng, 5, 10, ref oMissing, ref oMissing);
            oDoc.Paragraphs.SpaceBefore = 0.0f;
            oDoc.PageSetup.LeftMargin = 25.0f;
            oDoc.PageSetup.RightMargin = 29.0f;
            oDoc.Tables[3].Columns[2].Cells.PreferredWidth = 100;
            oDoc.Tables[3].Columns[1].Cells.PreferredWidth = 100;
            oDoc.Tables[3].Cell(1, 1).Range.Text = "hello";
            oDoc.Tables[3].Cell(1, 2).Range.Text = "arman";
            oDoc.Tables[3].Cell(1, 3).Range.Text = "this";
            oDoc.Tables[3].Cell(1, 4).Range.Text = "is  Image";
            oDoc.Tables[3].Cell(1, 1).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
            oDoc.Tables[3].Cell(1, 1).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

            oDoc.Tables[3].Cell(1, 1).Range.Font.Bold = 1;
            oDoc.Tables[3].Cell(1, 2).Range.Font.Bold = 1;
            oDoc.Tables[3].Cell(1, 3).Range.Font.Bold = 1;
            oDoc.Tables[3].Cell(1, 4).Range.Font.Bold = 1;
            oDoc.Tables[3].Range.Font.Size = 10;
            oDoc.Tables[3].Rows.Height = 2.0f;

那么如何为某个 table 分配字幕?

任何 help/tips/howtos 关于使用此库的信息将不胜感激(已搜索整个网络,但未找到有用的参考资料)。

好吧,仍然在猜测,因为您仍然没有定义 Tables…在我的测试中…该代码会将“标题”作为文档中的第一段,而 table 作为文档中的最后一段。但是,“标题”似乎已分配并显示为文档中的第一段。我猜您可能想将标题向下移动到 table 所在的文档底部。

如果是这种情况,请尝试下面的代码...

// set the range to the end of the document
wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
wrdRng.InsertParagraphAfter();
wrdRng.InsertAfter("THE END.");
// insert the caption below “The End”…
oWord.CaptionLabels.Add("some caption");
object caption = oWord.CaptionLabels["some caption"];
wrdRng.InsertCaption(ref caption, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
// insert the table after the caption…
wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
wrdRng.InsertParagraphAfter();
oDoc.Tables.Add(wrdRng, 5, 10, ref oMissing, ref oMissing);

最后,我强烈建议您将所有与 Word Doc 一起使用的代码放入 try/catch/finally 语句中,以确保您的代码创建的所有 COM objects 得到正确处理。像……

try {
   // all the code that works with the Word doc
}
catch (Exception ex) {
  // message box error ex.Message
}
finally {
   if (oDoc != null) {
      oDoc.Save();
      oDoc.Close();
      Marshal.ReleaseComObject(oDoc);
    }

    if (oWord != null) {
      oWord.Quit();
      Marshal.ReleaseComObject(oWord);
    }
}