前言
在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库版本,有需要可以下载。