Aspose导出word

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;
    }

}
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.效果展示:


完成.






  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值