如何使用 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);
}
}
向所有阅读本文的人问好,我正在努力成为一名 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);
}
}