Unity读取、新建Excel表格

把dll资源解压后,全部导入到unity中的Plugins文件下面
资源放在标题下方,可以自行下载
使用教程


引入命名空间 using SimpleExcel;。这个命名空间下主要有两个类:WorkBook和Sheet。WorkBook用于对整个excel文件的操作,如创建、打开、保存,Sheet用于对工作表的操作,如在特定单元格中添加、修改数据,从数据源中批量导入等。可以参考以下的代码示例:
新建工作簿和工作表:

var workbook = new WorkBook();
var sheet = workbook.NewSheet("sheet1");
读取工作簿和工作表:

// 根据路径读取工作簿
var workbook = var workbook = new WorkBook(@"F:\projects\Repos\Panda.SimpleExcel\Test\bin\Debug\test.xlsx");

// 根据索引读取工作表
var sheet1 = workbook.GetSheet(0);

// 根据名称读取工作表
var sheet2 = workbook.GetSheet("Sheet2");
直接给单元格赋值:(单元格用Sheet.Rows[rowIndex][columnIndex]获取,并使用Value属性获取或修改它的内容)

sheet1.Rows[0][0].Value = "Hello";
Sheet类提供了直接从IEnumerable转换数据的功能。默认情况下,它会将类型T的所有字段名作为表头,将集合中的所有对象排列出来。例如,我们先创建一个类:

public class Person
{
    public string Name { get; set; }
    public string Sex { get; set; }
    public int Age { get; set; }
}
然后使用Sheet.ConvertFromQuery<T>将集合直接添加到工作表中

var list = new List<Person>();
for(int i = 0; i < 10; i++)
{
    var person = new Person()
    {
        Name = "测试" + i,
        Sex = i % 2 == 0 ? "男" : "女",
        Age = i
    };
    list.Add(person);
}
//将List对象添加到工作表中,第一个参数是集合对象,第二个参数是起始行数,默认为0
sheet1.ConvertFromQuery(list, 1);
同样,也可以直接使用linq语句将查询结果添加到工作表

//将linq语句转换成工作表数据
var p = from a in list where a.Sex == "男" select a;
sheet2.ConvertFromQuery(p);
保存工作簿:

workbook.Save(@"D:\projects\test.xls");
样式控制:可以通过特性来控制工作表的样式。使用Row特性可以控制行样式,使用Column特性可以控制列样式。

[Row(
    EvenRowColor = ExcelColor.Aqua,
    OddRowColor = ExcelColor.CornflowerBule,
    HeaderBackColor = ExcelColor.Maroon,
    HeaderFontColor = ExcelColor.White,
    HeaderHeight = 20,
    HeaderHorAlign = HorizontalAlign.Center,
    HeaderVerAlign = VerticalAlign.Center)]
public class Person
{
    [Column(
        BackColor = ExcelColor.Brown, 
        FontColor = ExcelColor.White, 
        FontSize = 14,
        FontFamily = "黑体",
        HorAlign = HorizontalAlign.Center,
        VerAlign = VerticalAlign.Center,
        Name = "姓名")]
    public string Name { get; set; }

    [Column(
        FontColor = ExcelColor.Red,
        HorAlign = HorizontalAlign.Left,
        VerAlign = VerticalAlign.Center,
        Name = "性别")]
    public string Sex { get; set; }

    public int Age { get; set; }
}

项目中运用示例,,读去一个思考题的excel,下图是表格格式
在这里插入图片描述

 public void GetQuestion(string name, Question  game)
 {
     #region  直接读取Excel 添加思考题
     Question question = game ;
     //获取到excel表
     var workbook = new WorkBook(Application.dataPath + "/Excel/思考题/" + name + ".xlsx");
     var sheet1 = workbook.GetSheet(0);//获取第一个工作表
     question.minNum = 1;
     //注:例如:表格中有4行数据,长度LastRowNum则是3,0是第一行,1是第二行,2是第三行,3是第四行
     //此处-1是因为思考题表格中第一行和第二行是提示,从第三行才是思考题。如当有四行数据时,思考题只有两道,但是Rows.LastRowNum=3,所以-1,等于2
     question.maxNum = sheet1.Rows.LastRowNum - 1;
     question.questionCount = sheet1.Rows.LastRowNum - 1;
     question.datas = new Question.QuestionItemData[sheet1.Rows.LastRowNum - 1];

     for (int i = 0; i < question.datas.Length; i++)
     {
         int t = i + 2;//此处+2 是因为要从表格的第三行开始读取表格数据
         question.datas[i].question = sheet1.Rows[t][0].Value;
         question.datas[i].answer = sheet1.Rows[t][1].Value; ;
         question.datas[i].selects = sheet1.Rows[t][2].Value.Split('|');
         question.datas[i].resultRight = sheet1.Rows[t][3].Value;
         question.datas[i].resultWrong = sheet1.Rows[t][4].Value;
         question.datas[i].sprite = Resources.Load<Sprite>("思考题图片/" + sheet1.Rows[t][5].Value);
         question.datas[i].point = sheet1.Rows[][6].Value;
         if (string.IsNullOrEmpty(sheet1.Rows[t][7].Value))
         {
             question.datas[i].pointValue = 0;
         }
         else
         {
             question.datas[i].pointValue = float.Parse(sheet1.Rows[i + 2][7].Value);
         }
     }
     #endregion
 }
### 如何在Unity中处理Excel文件 #### 使用C#内置功能读取和写入Excel文件 虽然C#本身提供了操作CSV文件的能力,但对于.xlsx格式的Excel文件,默认情况下并不支持直接读写。因此通常建议使用第三方库来简化这一过程。 #### 利用第三方库NPOI进行Excel文件的操作 对于希望在Unity项目里高效地完成Excel数据交互的任务来说,可以考虑引入[NPOI](https://github.com/nissl-lab/npoi),这是一个强大的.NET平台上的开源Office文档解析组件[^1]。 ##### 安装NPOI库到Unity工程 为了能够在Unity环境中利用NPOI的功能,开发者可以通过NuGet Package Manager安装最新版本的NPOI包,或者手动下载DLL并将其放置于项目的`Assets/Plugins`目录下以便引用。 ##### 编写脚本实现基本的数据读取与保存逻辑 下面给出一段简单的示例代码用于展示如何通过NPOI加载现有工作簿以及创建新的工作表: ```csharp using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public class ExcelHandler : MonoBehaviour { private void Start() { string filePath = Path.Combine(Application.dataPath, "example.xlsx"); // 创建一个新的XSSFWorkbook实例 IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("Sample Sheet"); // 向单元格内填充值 IRow row = sheet.CreateRow(0); row.createCell(0).SetCellValue("Hello"); row.createCell(1).SetCellValue("World!"); // 将修改后的workbook对象写出至磁盘文件 FileStream fs = File.OpenWrite(filePath); workbook.Write(fs); fs.Close(); Debug.Log($"Saved excel file at {filePath}"); } } ``` 这段程序展示了怎样新建一个名为“Sample Sheet”的表格页,并向其中的第一行分别输入两个字符串值:“Hello” 和 “World!” 。最后会把整个工作簿的内容序列化成二进制流的形式存储起来形成实际可见的工作薄文件。 当涉及到更复杂的场景比如批量导入导出大量记录时,则可能还需要进一步学习有关于遍历多级嵌套结构、设置样式属性等方面的知识点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值