在前一篇 透過 RichEditDocumentServer 在 Word檔 中加入「目錄索引」 中,
是加入預設的「目錄索引」,但是那個「目錄索引」格式可以自已調整嗎?
如果我們要將預設的「目錄索引」改成以 表格(Table)的方式來呈現是否可以呢? 如下,
所以我們需要取得「目錄索引」的內容,再將新增一個表格,放到檔案之中,最後再將原本的「目錄索引」移除就好了。
//using DevExpress.Office.Utils;
//using DevExpress.XtraRichEdit;
//using DevExpress.XtraRichEdit.API.Native;
//建立 RichEditDocumentServer
RichEditDocumentServer srv = new RichEditDocumentServer();
//讀進 word 檔案
srv.LoadDocument(@"d:\rm.docx");
//取得 Document
Document doc = srv.Document;
doc.BeginUpdate();
//先加入分頁, 因為要把目錄索引放在第1頁
Section newPageSession = doc.InsertSection(doc.Range.Start);
newPageSession.StartType = SectionStartType.NextPage;
//https://documentation.devexpress.com/#DocumentServer/CustomDocument15301
//在最前面加入 目錄索引
string tocCode = @"TOC \o 2-2";
Field todField = doc.Fields.Create(doc.Range.Start, tocCode);
//執行更新
todField.Update();
//取出 TOC 的內容
string tocContent = doc.GetText(todField.ResultRange);
//解析出幾個索引,用 \r\n 分隔
string[] tocs = tocContent.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
//https://www.devexpress.com/Support/Center/Example/Details/E3452
//加入 Table
int rowCount = tocs.Length + 1;
int columnCount = 3;
Table tableTOC = doc.Tables.Create(doc.Range.Start, rowCount, columnCount);
tableTOC.TableLayout = TableLayoutType.Fixed;
tableTOC.PreferredWidthType = WidthType.Fixed;
tableTOC.PreferredWidth = Units.InchesToDocumentsF(3f);
tableTOC.Rows[1].HeightType = HeightType.Exact;
tableTOC.Rows[1].Height = Units.InchesToDocumentsF(0.25f);
// 加入 Table Header
doc.InsertText(tableTOC[0, 0].Range.Start, "序號");
doc.InsertText(tableTOC[0, 1].Range.Start, "索引");
doc.InsertText(tableTOC[0, 2].Range.Start, "頁次");
for(int i=0;i< rowCount-1; i++)
{
//用 \t 分隔
string[] indexs = tocs[i].Split('\t');
//加入內容
doc.InsertText(tableTOC[i + 1, 0].Range.Start, i.ToString());
doc.InsertText(tableTOC[i + 1, 1].Range.Start, indexs[0]);
doc.InsertText(tableTOC[i + 1, 2].Range.Start, indexs[1]);
}
//將原本的 TOC 移掉
doc.Delete(todField.Range);
doc.EndUpdate();
//另存新檔 docx 是使用 OpenXml 哦!
doc.SaveDocument(@"d:\rm_x.docx", DocumentFormat.OpenXml);
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^