大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
Aspose.word是一款非常好用的用于word操作的dll,你可以无需安装MicrosoftOffice软件就能进行工作,在学习Aspose.word导出word之前,你最好了解一下Doc的树结构图,这有利于你更好的了解掌握,可以先看一下Aspose word编程指南了解一下。
一.首先我们先来介绍一下word文档的几个核心点:Document,DocumentBuilder;
Document是一个文档的核心节点,也是根节点。它是一个的文档起始,没有它,你就别想创建一个word文档了。通过Document,我们可以获得全局的text, bookmarks和form fields或者直属于各个Section。Document里维护了一个Section的collection,也就是它的子节点。可以copy,插入或者移除。Document可以在任意时候保存成文件或者流。甚至可以直接传给浏览器。
DocumentBuilder是一个用来操作Document的很强大的类。它提供了一系列的方法,方便你插入文本、段落、列表、表格、图片和其他内容。使用它有点类似于使用java的StringBuilder。
DOM的Node能办到的事,使用DocumentBuilder也一样能办到。而且比使用dom的方式操作document的代码要少。
DocumentBuilder内部维护了一个游标Cursor,它允许你指向任何你想指向的地方。我们通过调用DocumentBuilder.MoveToXXX这个方法来指向。比方说,DocumentBuilder.MoveToDocumentStart,DocumentBuilder.MoveToField。
MoveToXXX之后,你可以通过DocumentBuilder.InsertXXX在那里插入文字,图片,书签,域或者是其他元素。比方说, DocumentBuilder.InsertField, DocumentBuilder.InsertHtml。
二.接下来我们看下使用DocumentBuilder创建表格的几个步骤:
1.开始创建,通过DocumentBuilder.StartTable。
2.通过DocumentBuilder.InsertCell插入一个单元格。如果需要更改格式,使用DocumentBuilder.CellFormat。
3.在Cell里通过DocumentBuilder插入文本。
4.重复步骤2和3,插入多格内容。
5.通过调用DocumentBuilder.EndRow来结束当前一行。如果需要,你可以通过DocumentBuilder.RowFormat来指定一行的格式。
6.重复步骤2 – 5,插入多行内容。
7.调用DocumentBuilder.EndTable来结束一个表格编辑。
三.接下来上案例:
1.工具类 WordHelper:对Word文档的设置和操作:
using System.Collections;using System.Collections.Generic;using Aspose.Words;using System.Data;using System.Drawing;using Aspose.Words.Drawing;public class WordHelper { private Document doc; private DocumentBuilder docBuilder; public void OpenWithTemplate(string fileName) //不覆盖word里已有的Table { if (!string.IsNullOrEmpty(fileName)) { doc = new Document(fileName); docBuilder = new DocumentBuilder(doc); } } public void Open() //覆盖word里已有的Table { doc = new Document(); docBuilder = new DocumentBuilder(doc); } //public void Builder() //{ // docBuilder = new DocumentBuilder(doc); //} /// <summary> /// 保存文件 /// </summary> /// <param name="fileName"></param> public void SaveAs(string fileName) { doc.Save(fileName, SaveFormat.Doc); } /// <summary> /// 插入表格 /// </summary> /// <param name="data"></param> /// <param name="haveBorder"></param> /// <returns></returns> public bool InsertTable(DataTable data, bool haveBorder) { Aspose.Words.Tables.Table table = docBuilder.StartTable(); //开始画Table ParagraphAlignment paragraphAlignmentValue = docBuilder.ParagraphFormat.Alignment; docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center; for (int row = 0; row < data.Rows.Count; row++) { docBuilder.RowFormat.Height = 25; for (int col = 0; col < data.Columns.Count; col++) { docBuilder.InsertCell(); docBuilder.Font.Size = 10.5; docBuilder.Font.Name = "宋体"; docBuilder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐 docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;//水平居中对齐 docBuilder.CellFormat.Width = 100.0; docBuilder.CellFormat.PreferredWidth = Aspose.Words.Tables.PreferredWidth.FromPoints(50); if (haveBorder == true) { //设置外框样式 docBuilder.CellFormat.Borders.LineStyle = LineStyle.Single; //样式设置结束 } docBuilder.Write(data.Rows[row][col].ToString()); } docBuilder.EndRow(); } MergeCell(); //合并单元格 docBuilder.EndTable(); //TODO:插入图片 InsertImage(); docBuilder.ParagraphFormat.Alignment = paragraphAlignmentValue; table.Alignment = Aspose.Words.Tables.TableAlignment.Center; table.PreferredWidth = Aspose.Words.Tables.PreferredWidth.Auto; return true; } //设置书签 public void SetHeade(string strBookmarkName, string text) { if (doc.Range.Bookmarks[strBookmarkName] != null) { Bookmark mark = doc.Range.Bookmarks[strBookmarkName]; mark.Text = text; } } //插入书签 public void InsertBookMark(string BookMark) { docBuilder.StartBookmark(BookMark); docBuilder.EndBookmark(BookMark); } //到哪个书签 public void GotoBookMark(string strBookMarkName) { docBuilder.MoveToBookmark(strBookMarkName); } //清除书签 public void ClearBookMark() { doc.Range.Bookmarks.Clear(); } /// <summary> /// 合并单元格 /// </summary> public void MergeCell() { //21行4列 for (int i = 0; i < 21; i++) { if (i == 0 || i == 2 || i == 6 || i == 11 || i == 15) //单元格合并成一格 { for (int j = 1; j < 4; j++) { docBuilder.MoveToCell(0, i, j, 0); docBuilder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.Previous; } } else if (i == 5 || i == 10 || i == 14 || i >= 17) //单元格合并成两格 { for (int j = 2; j < 4; j++) { docBuilder.MoveToCell(0, i, j, 0); docBuilder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.Previous; } } } } //插入图片 public void InsertImage() { docBuilder.MoveToCell(0, 19, 1, 0); //移动到第20行第2列插入图片 InsertBookMark("BarCode"); GotoBookMark("BarCode"); var img = docBuilder.InsertImage(@"f:/1.jpg", RelativeHorizontalPosition.Margin, 1, RelativeVerticalPosition.Margin, 1, 100, 125, WrapType.Square); img.Width = 100; img.Height = 30; img.HorizontalAlignment = HorizontalAlignment.Center; }}
Jetbrains全家桶1年46,售后保障稳定 2.创建word,填充内容:
using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Data;using Aspose.Words;public class WordUse : MonoBehaviour{ private WordHelper wordHelper; private void Start() { wordHelper = new WordHelper(); wordHelper.Open(); } public void OnBtnClick() { if(wordHelper != null) { DataTable data = GetDataTable(); bool isOk = wordHelper.InsertTable(data, true); if(isOk) { wordHelper.SaveAs(@"e:/MyWord.doc"); } } } private DataTable GetDataTable() { DataTable data = new DataTable(); for(int i=0;i<4;i++) { DataColumn column = new DataColumn(); data.Columns.Add(column); } for(int i=0;i<21;i++) { DataRow row = data.NewRow(); data.Rows.Add(row); } if (data.Rows.Count > 0) { data.Rows[0][0] = "开头"; data.Rows[1][0] = "号码"; data.Rows[1][2] = "编号"; data.Rows[2][0] = "情况"; data.Rows[3][0] = "姓名"; data.Rows[3][2] = "爱好"; data.Rows[4][0] = "班级"; data.Rows[4][2] = "电话"; data.Rows[5][0] = "体育"; data.Rows[6][0] = "数学"; data.Rows[7][0] = "语文"; data.Rows[7][2] = "英语"; data.Rows[8][0] = "琅琊榜"; data.Rows[8][2] = "仙剑"; data.Rows[9][0] = "胡歌\r\n仙剑"; //换行 data.Rows[9][2] = "Other\r\n其他"; data.Rows[10][0] = "First\r\n测试"; data.Rows[11][0] = "计划"; data.Rows[12][0] = "NO\r\n覆合"; data.Rows[12][2] = "覆盖"; data.Rows[13][0] = "中线"; data.Rows[14][0] = "要求"; data.Rows[15][0] = "联系方式"; data.Rows[16][0] = "医生\r\n医院"; data.Rows[16][2] = "告辞"; data.Rows[17][0] = "Address\r\n地址"; data.Rows[18][0] = "Company Name\r\n公司"; data.Rows[19][0] = "码农\r\n代码"; data.Rows[20][0] = "Note\r\n谢谢"; } return data; }}
3.效果展示:
完成.
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226721.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...