Unity创建和修改本地Word文档

之前做项目基本都是在本地读读数据,最多搞个截图就行了,最近客户突然提出要将实验报告(UGUI,包括图片、按钮、输入框、文字等),这就有点懵,好在经过一段时间的研究,可以在Unity内通过NPOI类库(没听说的可以找度娘问一下)创建和修改Word文档,OK,进入正题吧!

一、导入NPOI类库文件

我直接把所需要的dll文件全都打包出来了,在官网下的比较麻烦,不怕麻烦的童靴可以自己去官网逛一下学习学习,以下附上链接,可直接在百度网盘下载(提取码:kkkk)。
https://pan.baidu.com/s/1fE9hmm62ms_KgPj5HffEVA

别忘了类库文件一定要放在Plugins文件夹里面才能在C#中引用哦,在引用后发现报错,这里需要把Unity的Scripting Runtime Version改成 .NET 4.6 的(我是用Unity 2017.2.0 测试的)
在这里插入图片描述
在这里插入图片描述

二、创建Word文档

先来引用以下吧

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NPOI.XWPF.UserModel;
using System.IO;
using System;

定义好文件路径、文件名称,在这里我用一个Path准备缝合路径

    /// <summary>
    /// 文件路径
    /// </summary>
    private const string filePath = @"C:/Users/Administrator/Desktop";

    /// <summary>
    /// 文件名称
    /// </summary>
    private string fileName = "david.docx";

    private string path;
    
    /// <summary>
    /// word文档
    /// </summary>
    private XWPFDocument doc = new XWPFDocument();
    
    private void Start()
    {
    
    
        //缝合路径
        path = Path.Combine(filePath, fileName);
    }

开始写入文档并保存在本地,这里涉及到字体大小、字体颜色、段落内容。

    /// <summary>
    /// 创建段落
    /// </summary>
    /// <param name="_alignment">对齐方式</param>
    /// <param name="_fontSize">字体大小</param>
    /// <param name="_color">字体颜色(16进制)</param>
    /// <param name="_content">内容</param>
    private void CreateParagraph(ParagraphAlignment _alignment, int _fontSize,
        string _color, string _content)
    {
    
    
        XWPFParagraph paragraph = doc.CreateParagraph();
        paragraph.Alignment = _alignment;
        XWPFRun run = paragraph.CreateRun();
        run.FontSize = _fontSize;
        run.SetColor(_color);
        run.FontFamily = "宋体";
        run.SetText(_content);
        FileStream fs = new FileStream(path, FileMode.Create);
        doc.Write(fs);
        fs.Close();
        fs.Dispose();
        Debug.Log("写入成功");
    }

OK,现在回到Unity后把该脚本随便挂到一个游戏物体身上,引用这个方法,运行游戏会发现在指定路径下创建了一个Word文档(并且有我们写入的内容哦)。
在这里插入图片描述在这里插入图片描述

三、修改本地文档内容

个人感觉创建文件并没有什么卵用,举个例子,咱们做一个带有考核的项目,最终的实验报告文字和图片基本上都是固定的,需要改动的只有姓名、学号、成绩等等字段对不对,那么问题来了,如果所有的内容都是通过API手动创建的话(能够想到有多麻烦,文字居中、标题大小、创建表格等等等。。。)。因此修改文档内容才是最高效和简便的方法,直接进入主题。

首先,当然先搞一个Word文档了,PS:这里的路径一定要和Unity里面的路径保持一致。
在这里插入图片描述
这个{$test}就相当于一个字段,为了与其他文字或者符号区分,这里我只是为了方便测试,才用test代替,当然也可以用score、name等等名称,最关键的要来了。

    /// <summary>
    /// 读写文件
    /// </summary>
    private void ReadWriteFile()
    {
    
    
        path = Path.Combine(filePath, fileName);
        FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
        XWPFDocument doc = new XWPFDocument(fs);

        //遍历段落
        foreach (var para in doc.Paragraphs)
        {
    
    
            string oldText = para.ParagraphText;

            if (oldText == "")
            {
    
    
                continue;
            }
            //记录段落文本
            string tempText = para.ParagraphText;

            //查找标记并修改内容
            if (tempText.Contains("{$test}"))
            {
    
    
                tempText = tempText.Replace("{$test}", "我的测试");
            }

            //替换内容
            para.ReplaceText(oldText, tempText);
        }

        FileStream output = new FileStream(path, FileMode.Create);
        doc.Write(output);
        fs.Close();
        fs.Dispose();
        output.Close();
        output.Dispose();

        Debug.Log("修改文件");
    }

通过指定路径读取Word文档,然后遍历每个段落,可以看到,通过API可以获取文档内是否有我们自定义的字段,找到了可以直接替换成我们需要改成的内容,最后在进行输出,文件就得到更新了,是不是很简单。
在这里插入图片描述
OK,内容最终得到了完美的修改,是不是很方便呢,实验报告生成后直接打印出来就可以看到考核的成绩了。

猜你喜欢

转载自blog.csdn.net/weixin_38484443/article/details/102486057