unity创建docx文档并输出

前言

项目如果有需要生成数据报告,或者修改文档的需求,则可以引入NPOI库进行处理。网上的库很多,但是有的不兼容unity,我这里使用的是2018,库可以在这里下载,点击跳转

引入并使用NPOI

下载库文件后,将其放入Plugin文件夹下,设置API兼容级别为 .Net4.x

这里我还加入了两个I18N的dll文件,主要是因为我导出之后出现了编码错误的问题,是因为导出的包中没有I18N这两个dll文件。
在这里插入图片描述

使用NPOI

整体流程就是:创建文档 —>创建段落—>设置格式—> 写入内容—> 生成文档

  		//创建文档
  		filePath = Application.streamingAssetsPath;
        path = Path.Combine(filePath, fileName);
        if (!File.Exists(path))
        {
    
    
            FileStream stream = File.Create(path);
            stream.Close();
        } 		
        
		XWPFDocument doc = new XWPFDocument();
		//创建段落
        XWPFParagraph paragraph = doc.CreateParagraph();
		//设置格式
        paragraph.Alignment = ParagraphAlignment.CENTER;
        XWPFRun run = paragraph.CreateRun();
        run.FontSize = 26;
        run.SetColor("000000");
        run.FontFamily = "黑体";
        run.IsBold = true;
        //写入内容
        run.SetText("内容");
        try
        {
    
    
        	//生成文档
            FileStream fs = new FileStream(path, FileMode.Create);
            doc.Write(fs);
            fs.Close();
            fs.Dispose();
            //打开生成位置
            Process.Start("explorer.exe", filePath.Replace("/", "\\"));
        }
        catch (Exception e)
        {
    
    
            if (e.GetType() == typeof(IOException))
            {
    
    
                Debug.Log("创建失败,同名文件被打开!");
            }
        }

具体案例

using NPOI.XWPF.UserModel;
using System;
using System.Diagnostics;
using System.IO;
using UnityEngine;
using Debug = UnityEngine.Debug;

public class CreatWord : MonoBehaviour
{
    
    
    /// <summary>
    /// 文件路径
    /// </summary>
    private string filePath;

    /// <summary>
    /// 文件名称
    /// </summary>
    private string fileName = "钢铁是怎样炼成的.docx";

    private string path;

    private void Start()
    {
    
    
        filePath = Application.streamingAssetsPath;
        path = Path.Combine(filePath, fileName);
        if (!File.Exists(path))
        {
    
    
            FileStream stream = File.Create(path);
            stream.Close();
        }
    }


    /// <summary>
    /// 创建
    /// </summary>
    private void Create()
    {
    
    
        XWPFDocument doc = new XWPFDocument();

        XWPFParagraph paragraph = doc.CreateParagraph();

        paragraph.Alignment = ParagraphAlignment.CENTER;
        XWPFRun run = paragraph.CreateRun();
        run.FontSize = 26;
        run.SetColor("000000");
        run.FontFamily = "黑体";
        run.IsBold = true;
        run.SetText(context[0]);


        paragraph = doc.CreateParagraph();
        paragraph.Alignment = ParagraphAlignment.LEFT;
        run = paragraph.CreateRun();
        run.FontSize = 16;
        run.SetColor("000000");
        run.FontFamily = "仿宋";
        run.SetText(context[1]);


        paragraph = doc.CreateParagraph();
        paragraph.Alignment = ParagraphAlignment.LEFT;
        run = paragraph.CreateRun();
        run.FontSize = 16;
        run.SetColor("000000");
        run.FontFamily = "宋体";
        run.IsBold = true;
        run.SetText(context[2]);


        paragraph = doc.CreateParagraph();
        paragraph.Alignment = ParagraphAlignment.LEFT;
        run = paragraph.CreateRun();
        run.FontSize = 16;
        run.SetColor("000000");
        run.FontFamily = "黑体";
        run.IsItalic = true;
        run.SetText(context[3]);

        try
        {
    
    
            FileStream fs = new FileStream(path, FileMode.Create);
            doc.Write(fs);
            fs.Close();
            fs.Dispose();
            Process.Start("explorer.exe", filePath.Replace("/", "\\"));
        }
        catch (Exception e)
        {
    
    
            if (e.GetType() == typeof(IOException))
            {
    
    
                Debug.Log("创建失败,同名文件被打开!");
            }
        }

       
    }


    private string[] context = new string[] {
    
    
        "钢铁是怎样炼成的",

        "    教室里寂静无声,大家都耷拉着脑袋。谁也不知道,保尔·柯察金为什么被赶出学校。只有保尔的好朋友谢廖沙·勃鲁扎克明白事情的缘由。" +
        "他们六个考试不及格的学生去神父家补考,在厨房里等候神父的时候,他亲眼看见保尔掏出一撮烟末儿,撒在神父家准备做复活节蛋糕的面团上。",

        "    被赶出来的保尔坐在校门口最下面的一层台阶上。他想,母亲在税务官家当厨娘,每天从早忙到晚,对他又那么关心,这下回家该怎么跟母亲说呢?",

        "    泪水哽住了保尔的喉咙。",

        "    “现在我该怎么办呢?全怪这该死的神父。可为什么我要撒烟末呢?都是谢廖沙怂恿我干的。他说:‘来,咱们给这可恶的老畜生撒一把。’这不,真的撒上去了。" +
        "现在谢廖沙啥事也没有,而我呢,却很可能要被开除。”",

        "    保尔和瓦西里神父早就结了仇。有一天,他和米什卡·列夫丘科夫打架,老师罚他“不准回家吃饭”。" +
        "为了不让他独自在空荡荡的教室里淘气,便把他带到高年级的教室。保尔在后面的凳子上坐了下来。",
    };
}

生成效果
在这里插入图片描述

其他设置

如果想要页眉、页脚、水印等,unity中使用的dll库是没有这个功能的;可以创建一个模板文档,使用先读取文档,再写入内容的方式实现。

猜你喜欢

转载自blog.csdn.net/qq_27050589/article/details/128049320