Unity导出Word实验报告

前言

在Unity中使用NPOI库文件对Word文档进行修改,在Word内生成表格,插入图片等...

导出Word效果

导出方法

 写入Word文字部分比较简单,表格内容可以通过创建二维数组来存入,要注意的点就是保存路径了,一般是可以默认保存桌面,我这里是因为我的桌面迁移到了E盘,大家做的时候可以根据自己需求修改

  private string pathName;

   string[,] data = new string[2, 5]
    {
            {"姓名:", " ", "班级","  ","实验成绩"},
            {"学号", "123456", "日期","  "," "}
    };
    public string dataName;
    public string dataClass;
    public string dataGrade;
    public string dataTimer;

    string[,] gradeData = new string[5, 3]
    {
            {"得分项","满分" ,"得分"},
            {"第一项","10" ,"5"},
            {"第二项","10" ,"6"},
            {"第三项","10" ,"7"},
            {"总计","30" ,"7"}
    };
    private int topic1 = 3;
    private int topic2 = 4;
    private int topic3 = 5;
    private int topic4;

    int count = 1;

    private string wordPath;
    private void Awake()
    {
        wordPath = "E:\\桌面文件\\生成Word测试文件\\实验报告.docx";
    }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            CreateWordAndWrite();
            OpenWord();
        }
    }
    public void CreateWordAndWrite()
    {   
        while (File.Exists(wordPath))
        {
            wordPath = $"E:\\桌面文件\\生成Word测试文件\\实验报告{count}.docx";
            count++;
        }
        XWPFDocument document = new XWPFDocument();
        FileStream file = new FileStream(wordPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);//创建Word

        #region 标题部分
        XWPFParagraph titlePar = document.CreateParagraph();
        titlePar.Alignment = ParagraphAlignment.CENTER;
        XWPFRun titleR = titlePar.CreateRun();
        SetFont(titleR, "000000", "虚拟仿真实验报告", "黑体", 21, true, false);//设置标题
        #endregion

        #region 创建表格
        XWPFParagraph p = document.CreateParagraph(); // 创建新的段落
        XWPFTable table = document.CreateTable(2, 5); // 创建一个3行3列的表格   
        table.Width = 5000;


        dataName = "李四";
        dataGrade = "84";
        dataClass = "二年级";
        dataTimer = DateTime.Now.ToString();
        Debug.Log(dataTimer);
        AssignValue(dataName, dataClass, dataTimer, dataGrade);
        Debug.Log(data[0, 1]);

        for (int row = 0; row < 2; row++)
        {
            table.GetRow(row).Height = 600;
            for (int col = 0; col < 5; col++)
            {
                XWPFTableCell cell = table.GetRow(row).GetCell(col); // 获取表格单元格  
                cell.SetText(data[row, col]);
            }
        }
        #endregion

        #region  小标题   1
        XWPFParagraph par1 = document.CreateParagraph();
        XWPFRun parR1 = par1.CreateRun();
        SetFont(parR1, "000000", "一、实验目的 ", "微软雅黑", 14, false, false);
        #endregion

        #region 小标题内容部分
        XWPFParagraph par2 = document.CreateParagraph();
        par2.IndentationFirstLine = 300;
        XWPFRun parR2 = par2.CreateRun();
        SetFont(parR2, "000000", "实验目的1.XXXXXXXXXXXXXXXXXXXXXXXXXX", "微软雅黑", 10, false, false);

        XWPFParagraph par3 = document.CreateParagraph();
        XWPFRun parR3 = par3.CreateRun();
        par3.IndentationFirstLine = 300;
        SetFont(parR3, "000000", "实验目的2.XXXXXXXXXXXXXXXXXXXXXXXXXX", "微软雅黑", 10, false, false);

        XWPFParagraph par4 = document.CreateParagraph();
        XWPFRun parR4 = par4.CreateRun();
        par4.IndentationFirstLine = 300;
        SetFont(parR4, "000000", "实验目的2.XXXXXXXXXXXXXXXXXXXXXXXXXX", "微软雅黑", 10, false, false);
        #endregion

        #region  图片标题部分  2
        XWPFParagraph par5 = document.CreateParagraph();
        XWPFRun parR5 = par5.CreateRun();
        SetFont(parR1, "000000", "一、实验结果 ", "微软雅黑", 14, false, false);
        #endregion

        #region 插入图片  
        string imgPath = Application.streamingAssetsPath + "/Fuben2.png";
        XWPFParagraph par6 = document.CreateParagraph();

        XWPFRun run = par6.CreateRun();
        int pictureType = (int)PictureType.PNG;
        int pictureWidth = 400;
        int pictureHeight = 300;
        run.AddPicture(new FileStream(imgPath, FileMode.Open), pictureType, "Fuben2", Units.ToEMU(pictureWidth), Units.ToEMU(pictureHeight));
        #endregion

        #region  实验得分表格部分标题  3
        XWPFParagraph par9 = document.CreateParagraph();
        XWPFRun parR9 = par9.CreateRun();
        SetFont(parR1, "000000", "三、实验得分 ", "微软雅黑", 14, false, false);


        XWPFParagraph p2 = document.CreateParagraph(); // 创建新的段落
        XWPFTable table2 = document.CreateTable(5, 3); // 创建一个5行3列的表格   
        table2.Width = 3000;

        gradeData[1, 2] = topic1.ToString();
        gradeData[2, 2] = topic2.ToString();
        gradeData[3, 2] = topic3.ToString();

        topic4 = topic1 + topic2 + topic3;
        gradeData[4, 2] = topic4.ToString();
        for (int row = 0; row < 5; row++)
        {
            table2.GetRow(row).Height = 300;
            for (int col = 0; col < 3; col++)
            {
                XWPFTableCell cell = table2.GetRow(row).GetCell(col); // 获取表格单元格  
                cell.SetText(gradeData[row, col]);
            }
        }
        #endregion

        #region  评语部分标题  4
        XWPFParagraph par10 = document.CreateParagraph();
        XWPFRun parR10 = par10.CreateRun();
        SetFont(parR10, "000000", "四、评语 ", "微软雅黑", 14, false, false);
        #endregion

        #region  评阅人部分
        XWPFParagraph par11 = document.CreateParagraph();
        par11.Alignment = ParagraphAlignment.RIGHT;//右对齐
        XWPFRun parR11 = par11.CreateRun();
        SetFont(parR11, "000000", "评阅教师:__________", "微软雅黑", 14, false, false);
        #endregion

        document.Write(file); //保存内容
        file.Close();
    }
    //写入后根据路径打开Word
    public void OpenWord()
    {
        System.Diagnostics.Process.Start(wordPath);
    }

    string[,] AssignValue(string name, string clas, string time, string grade)
    {
        data[0, 1] = name;
        data[0, 3] = clas;
        data[1, 3] = time;
        data[1, 4] = grade;
        Debug.Log(data[0, 1]);
        return data;
    }

    public static void SetFont(XWPFRun run, string color, string text, string font, int size, bool isOverBold, bool isItalic)
    {
        run.SetColor(color);
        run.SetText(text);
        run.FontFamily = font;
        run.FontSize = size;
        run.IsBold = isOverBold;
        run.IsItalic = isItalic;
    }

结语

我这里操作word是使用了NPOI的库文件,刚开始用的时候还遇到了NPOI和ICSharpCode.SharpZipLib库不兼容的问题,这里粘贴一下我用到NPOI库版本,有需要可以下载。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Unity是一款强大的游戏开发引擎,虽然它的主要用途是创建优秀的游戏,但也可以在一定程度上进行办公文档的导出。要将Unity中的内容导出Word文档,可以采用以下方法。 首先,在Unity中创建一个游戏场景或界面,将要导出的文档内容以合适的方式展示出来,例如使用UI元素显示文本、图片等。 其次,可以使用Unity的插件来处理Word文档的生成和导出。有一些开源的插件可以在Unity Asset Store中找到和下载。这些插件提供了创建、编辑和导出Word文档的功能,可以通过简单的编程来操作。 使用这些插件,可以将Unity中的文本、图片和其他信息按照预先定义的格式插入到Word文档中。可以设置字体、字号、对齐方式等样式,使得导出的文档符合需求。 另外,可以使用C#编程语言来自定义导出过程,根据需要添加更多的功能。例如,可以通过代码来自动填充一些固定文本,添加表格等。 使用上述方法,可以将Unity中的内容导出Word文档。但需要注意的是,由于Unity不是专为文档处理设计的软件,因此存在一定的限制和局限性。在导出过程中可能会遇到一些格式上的挑战,需要仔细调整和解决。此外,插件的质量和稳定性也可能影响导出结果的准确性。因此,在选择插件时要注意评估其功能和用户评价。 总之,虽然Unity的主要目的不是用于文档处理,但通过使用插件和编写代码,我们仍然可以借助Unity将内容导出Word文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立刀人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值