1.总体说明:操作主要涉及两个对象Document及DocumentBuilder

Document主要用来获取文档中的节点,DocumentBuilder主要用于实现文档内容的写入

            doc_Operate = new Document(blankTemplatePth);
doc_template = new Document(ToCopytemplatePth);
builder_template = new DocumentBuilder(doc_template);
builder_operate = new DocumentBuilder(doc_Operate);

2.内容写入,样式设置

            builder_operate.ParagraphFormat.Style = doc_Operate.Styles["标题"];
builder_operate.Writeln("XXX报告");
builder_operate.ParagraphFormat.Style = doc_Operate.Styles["正文"];
builder_operate.Writeln("(征求意见稿)");

3.关于分节,分节之后,需要将当前插入光标移动至新插入的Section中,否则容易出错

            builder_operate.InsertBreak(BreakType.SectionBreakNewPage);
Section lstSection2 = doc_Operate.LastSection;
int idx2 = doc_Operate.Sections.IndexOf(lstSection2);
builder_operate.MoveToSection(idx2);
builder_operate.MoveToDocumentEnd();

4.复制模板文档中的表格,插入到当前文档中

        //获取Table对象
        Table tbN=doc.ImportNode(tb, true, ImportFormatMode.KeepSourceFormatting) as Table;
doc.LastSection.Body.AppendChild(tbN);
Paragraph p = new Paragraph(doc);
tbN.ParentNode.AppendChild(p); //添加paragraph,以打断表格

5.当前表格插入新行

Row rN = table_N.Rows[].Clone(true) as Row;
table_N.InsertAfter(rN, table_N.LastRow);

6.单元格插入图片

builder_operate.MoveToCell(tableindex, , , );
Aspose.Words.Drawing.Shape spa = builder_operate.InsertImage(jietuA);

此处插入图片时,容易出现异常,提示tableindex超出索引,TableIndex是通过indexOf对象获取到的.

查阅大量资料发现,如果一个word文档中出现了多个Section,需要采用本篇第3小节的内容,移动当前的光标

7.设置单元格内容

public static void setCellText(this Cell cell, string txt)
{
Run run;
if (cell.FirstParagraph.Runs.Count == )
{
run = new Run(cell.Document);
}
else
{
run = (Run)cell.FirstParagraph.Runs[].Clone(true);
}
run.Text = txt;
for (int i = ; i < cell.Paragraphs.Count; i++)
{
Node np=cell.GetChild(NodeType.Paragraph, i, false);
cell.RemoveChild(np);
} cell.FirstParagraph.RemoveAllChildren();
cell.EnsureMinimum();
if(cell.Paragraphs.Count!=)
cell.Paragraphs[].AppendChild(run);
}

8.合并单元格

public static void HorizontallyMergeCells(Cell c1, Cell c2,bool SaveAllVal=false)
{
c1.CellFormat.HorizontalMerge = CellMerge.First; //Move all content from next cell to previous
if (SaveAllVal)
{
foreach (Node child in c2.ChildNodes)
c1.AppendChild(child);
} c2.CellFormat.HorizontalMerge = CellMerge.Previous;
} public static void VerticallyMergeCells(Cell c1, Cell c2,bool SaveAllVal)
{
c1.CellFormat.VerticalMerge = CellMerge.First; //Move all content from bottom cell to top
if (SaveAllVal)
{
foreach (Node child in c2.ChildNodes)
c1.AppendChild(child);
} c2.CellFormat.VerticalMerge = CellMerge.Previous;
} public static void MergeCell(this Table tb, int startrowid, int endrowid, int startColId, int endColId)
{
for (int i = startrowid; i <= endrowid; i++)
{
for (int j = startColId+; j <= endColId; j++)
{
//每行进行横向合并
HorizontallyMergeCells(tb.Rows[i].Cells[startColId], tb.Rows[i].Cells[j]);
}
} //首行进行纵向合并
for (int i = startrowid+; i <= endrowid; i++)
{
VerticallyMergeCells(tb.Rows[startrowid].Cells[startColId], tb.Rows[i].Cells[startColId], false);
}
}

9.插入另一个Word文档

Document docShuoMing = new Document(summaryTemplatePth);
//docShuoMing.FirstSection.PageSetup.SectionStart = SectionStart.NewPage;
//docShuoMing.FirstSection.PageSetup.RestartPageNumbering = true;
doc_Operate.LastSection.AppendContent(docShuoMing.FirstSection);
//doc_Operate.AppendDocument(docShuoMing, ImportFormatMode.KeepSourceFormatting);
builder_operate.MoveToDocumentEnd();

10.插入页码

public static void InsertHeaderFooter(Section sect, HeaderFooterType headerType)
{
HeaderFooter header = sect.HeadersFooters[headerType]; if (header == null)
{
header = new HeaderFooter(sect.Document, headerType);
sect.HeadersFooters.Add(header);
}
} public static void CancelHeaderFotter(Section sect)
{
for (int i = sect.HeadersFooters.Count-; i >=; i--)
{
sect.HeadersFooters.RemoveAt(i);
}
}
/// <summary>
/// 插入页码
/// </summary>
/// <param name="builder_operate"></param>
/// <param name="sec"></param>
/// <param name="startNumber"></param>
public static void InsertYeMa(DocumentBuilder builder_operate,Section sec,NumberStyle ns=NumberStyle.Arabic,int startNumber=)
{
//添加页码
ASPWHelper.InsertHeaderFooter(sec, HeaderFooterType.HeaderPrimary);
builder_operate.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
//设置开始页码
builder_operate.PageSetup.PageStartingNumber = startNumber;
builder_operate.PageSetup.PageNumberStyle = ns;
//页码在每个section会重新开始
builder_operate.PageSetup.RestartPageNumbering = true;
//页码位置
builder_operate.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder_operate.InsertField("PAGE", "");
builder_operate.MoveToDocumentEnd();
}

11.移除最后的分页符

public static void RemoveLastPageBreak(Document doc)
{
NodeCollection runs = doc.LastSection.GetChildNodes(NodeType.Run, true); for (int i = runs.Count - ; i >= ; i--)
{
Run run = (Run)runs[i];
if (run.Text.IndexOf(ControlChar.PageBreakChar) >= )
{
run.Text = run.Text.Remove(run.Text.IndexOf(ControlChar.PageBreakChar), );
break;
}
}
}

12.插入目录

/// <summary>
/// 插入目录
/// </summary>
/// <param name="bulider_blank"></param>
public static void InsertTOC(DocumentBuilder bulider_blank)
{
//设置"目录"格式
bulider_blank.ParagraphFormat.Alignment = ParagraphAlignment.Center;
bulider_blank.Bold = true;
bulider_blank.Font.Name = "SONG";
bulider_blank.Writeln("目录");
bulider_blank.ParagraphFormat.ClearFormatting();//清除所有样式
bulider_blank.InsertTableOfContents("\\o\"1-3\"\\h\\z\\u");
bulider_blank.InsertBreak(BreakType.SectionBreakNewPage);
}

获取某一Section的页数

public static int getLastSectionPageCount(Document doc)
{
int idx = doc.Sections.IndexOf(doc.LastSection);
Document tmp = doc.Clone();
for (int i = tmp.Sections.Count - ; i >= ; i--)
{
if (i != idx)
{
tmp.Sections.RemoveAt(i);
}
}
return tmp.PageCount;
}

ASPOSE.Word 开发资料整理的更多相关文章

  1. Word 开发资料集合

    Word 对象模型概述  https://msdn.microsoft.com/zh-cn/library/kw65a0we.aspx DSOframer微软官方API的查阅方法  http://sh ...

  2. iOS app开发资料整理

    Objective C快速入门: http://blog.csdn.net/totogo2010/article/details/7632384 http://www.cocoachina.com/i ...

  3. android插件式开发资料整理

    1.DL : Apk动态载入框架 2.android中的动态载入机制

  4. iOS 开发学习资料整理(持续更新)

      “如果说我看得比别人远些,那是因为我站在巨人们的肩膀上.” ---牛顿   iOS及Mac开源项目和学习资料[超级全面] http://www.kancloud.cn/digest/ios-mac ...

  5. 【Android开发资料分享】自己整理的Android开发资料,非常全面

    学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...

  6. iOS 学习资料整理

    iOS学习资料整理 https://github.com/NunchakusHuang/trip-to-iOS 很好的个人博客 http://www.cnblogs.com/ygm900/ 开发笔记 ...

  7. 如何查找STM32开发资料

    Ⅰ.概述 该文写给那些处于初学ST芯片开发.英文不好而又想偷懒的人. 该文主要的目的是提醒大家:学习一门技术是需要舍得花功夫,捷径是你在起点与终点之间不断的探索,最终总结出来的一条适合自己的路. 下面 ...

  8. 推荐资料——最受网友力荐的30份HTML前端开发资料

    w3cmark最近会新增一个栏目,专注于搜集前端资源的下载,包括和前端相关的电子书.文档PPT.手册.视频教程等等.而下载的媒介是用微博的微盘,至于为什么选择微盘的,那是因为和微博关联起来,通过微盘上 ...

  9. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

随机推荐

  1. JaVa第二周学习总结

    第一周学习的时候上传图片用的是网站外链然后导致出现了极为尴尬的情形...然后我就把第一周的全改成本地上传了. 首先列出所做任务 1 安装IDEA 2学习二三章视频,课本 3调试代码,上传码云 4总结问 ...

  2. 【转载】c++指针的指针和指针的引用

    https://www.cnblogs.com/li-peng/p/4116349.html

  3. 设 $y_1(x), y_2(x)$ 是 $y''+p(x)y'+q(x)y=0$ 的两个解 ($p(x), q(x)$ 连续), 且 $y_1(x_0)=y_2(x_0)=0$, $y_1(x)\not\equiv 0$. 试证: $y_1(x)$, $y_2(x)$ 线性相关.

    设 $y_1(x), y_2(x)$ 是 $y''+p(x)y'+q(x)y=0$ 的两个解 ($p(x), q(x)$ 连续), 且 $y_1(x_0)=y_2(x_0)=0$, $y_1(x)\n ...

  4. 分享一个jsonp劫持造成的新浪某社区CSRF蠕虫

    最近jsonp很火,实话说已经是被玩烂了的,只是一直没有受到大家的重视.正好在上个月,我挖过一个由于jsonp造成的新浪某社区CSRF,当时是为了准备一篇文章,之后这篇文章也会拿出来分享. 因为新浪已 ...

  5. luogu 1731 搜索剪枝好题

    搜索剪枝这个东西真的是骗分利器,然鹅我这方面菜的不行,所以搜索数学dp三方面是真的应该好好训练一下 一本通的确该认真的刷嗯 #include<bits/stdc++.h> using na ...

  6. 记事本 HTML

    又学了一遍HTML,感觉轻松了好多,个人感觉HTML和画画差不多,只要有了想法,画出来其实并不难. 头部信息<head> 头部信息并不是给我们看的,而是给浏览器看的,当浏览器看到之后,才好 ...

  7. 分布式系列四: HTTP及HTTPS协议

    分布式系列四: HTTP及HTTPS协议 非常全面的一篇HTTP的文章: 关于HTTP协议,一篇就够了 还有一个帮助理解HTTPS的文章: 也许,这样理解HTTPS更容易 本文的一些描述摘自这篇文章 ...

  8. Qt 图像缩放显示

    1. QImage Image; Image.load(":/images/f1.png"); QPixmap pixmap = QPixmap::fromImage(Image) ...

  9. 51nod--1183 编辑距离(动态规划)

    题目: 1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指 ...

  10. 【原创】大数据基础之Hive(1)Hive SQL执行过程之代码流程

    hive 2.1 hive执行sql有两种方式: 执行hive命令,又细分为hive -e,hive -f,hive交互式: 执行beeline命令,beeline会连接远程thrift server ...