返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 2046|回复: 0

[转载] 【转载】Unity中对Excel的操作(使用EPPlus)

[复制链接]
发表于 2023-11-30 18:22:25 | 显示全部楼层 |阅读模式
本帖最后由 da11 于 2023-11-30 18:40 编辑

Unity中对Excel的操作(使用EPPlus)


一、导入EPPlus

1.首先在Unity中导入EPPlus和测试的Excel(测试读取需要使用)




2.创建脚本,引入命名空间
using UnityEngine;
using UnityEditor;
using OfficeOpenXml;
using System.IO;


二、读取测试的Excel表格







1. 获取Excel信息文件
        string filePath = Application.dataPath + "/目标名称.xlsx";//这里是文件路径

        //获取Excel文件的信息
        FileInfo fileInfo = new FileInfo(filePath);

2.打开Excel文件信息,打开表格
        //通过Excel文件信息,打开表格
        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))
        //using是用来强行资源释放(前括号是打开,后括号是关闭)
        {

        }

3.需要打开此Excel的哪张表格
        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))
        {
            //取得Excel文件中的第N张表
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
        }

4.读取数据

        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))
        {
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
            for (int i = 2; i < worksheet.Dimension.End.Row; i++)
            //End.Row获得当前表格的最大行数
            {
                Debug.Log("目标名称:" + worksheet.Cells[i, 1].Value.ToString() + " // 设备名称:" + worksheet.Cells[i, 2].Value.ToString() + " // 地址:" + worksheet.Cells[i, 3].Value.ToString());
                //Cells是个二维数组,第一个参数是读取第几行,第二个参数是读取第几列需要ToString出数据
            }
        }

5.输出结果





6.完整代码


using UnityEngine;
using UnityEditor;
using OfficeOpenXml;
using System.IO;

/// <summary> Read文件 </summary>
public class ReadExcel
{

    [MenuItem("数据持久化/1.Excel/1.ReadExcel")]
    public static void InputExcel()
    {
        string filePath = Application.dataPath + "/00.Excel文件夹/Read.xlsx";

        ///获取Excel文件的信息
        FileInfo fileInfo = new FileInfo(filePath);

        ///通过Excel文件信息,打开表格
        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))//using是用来强行资源释放(前括号是打开,后括号是关闭)
        {
            //取得Excel文件中的第N张表
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];
            for (int i = 2; i < worksheet.Dimension.End.Row; i++)//End.Row获得当前表格的最大行数
            {
                Debug.Log("目标名称:" + worksheet.Cells[i, 1].Value.ToString() +
                    " // 设备名称:" + worksheet.Cells[i, 2].Value.ToString() +
                    " // 地址:" + worksheet.Cells[i, 3].Value.ToString());
                //Cells是个二维数组,第一个参数是读取第几行,第二个参数是读取第几列需要ToString出数据
            }
        }
    }
}




三、写入Excel



1.一二步和读取一样

2.写入数据
        ///通过Excel文件信息,打开表格
        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))//using是用来强行资源释放(前括号是打开,后括号是关闭)
        {
            //取得Excel文件中的第N张表
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets["Sheet1"];
            for (int i = 2; i <= 12; i++)
            {
                //直接向每个表格赋值则是写入
                worksheet.Cells[i, 1].Value = "目标名称" + " " + (i - 1);
                worksheet.Cells[i, 2].Value = "设备地址" + " " + (i - 1);
                worksheet.Cells[i, 3].Value = "地址" + " " + (i - 1);
            }
            excelPackage.Save();//写入后保存表格
        }


3.写入后表格





4.完整代码


using UnityEngine;
using UnityEditor;
using OfficeOpenXml;
using System.IO;

public class WriteExcel
{

    [MenuItem("数据持久化/1.Excel/2.WriteExcel")]
    public static void ChangeExcel()
    {
        string filePath = Application.dataPath + "/00.Excel文件夹/Write.xlsx";

        ///获取Excel文件的信息
        FileInfo fileInfo = new FileInfo(filePath);

        ///通过Excel文件信息,打开表格
        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))//using是用来强行资源释放(前括号是打开,后括号是关闭)
        {
            //取得Excel文件中表格叫Sheet1的表格
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets["Sheet1"];
            for (int i = 2; i <= 12; i++)
            {
                //直接向每个表格赋值则是写入
                worksheet.Cells[i, 1].Value = "目标名称" + " " + (i - 1);
                worksheet.Cells[i, 2].Value = "设备地址" + " " + (i - 1);
                worksheet.Cells[i, 3].Value = "地址" + " " + (i - 1);
            }
            excelPackage.Save();//写入后保存表格
        }
    }

}



四.创建表格

1.一二步和读取一样
2.创建表格


using UnityEngine;
using UnityEditor;
using OfficeOpenXml;
using System.IO;

public class Creat
{
    [MenuItem("数据持久化/1.Excel/3.CreatExcel")]
    public static void ChangeExcel()
    {
        string filePath = Application.dataPath + "/00.Excel文件夹/Creat.xlsx";

        ///获取Excel文件的信息(文件中没有这个文件也不会报错)
        FileInfo fileInfo = new FileInfo(filePath);

        ///通过Excel文件信息,打开表格
        using (ExcelPackage excelPackage = new ExcelPackage(fileInfo))//在这里也没有创建Excel文件
        {
            //在新Excel文件中创建叫Sheet1的表格
            ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");
            worksheet.Cells[1, 1].Value = "目标名称";
            worksheet.Cells[1, 2].Value = "设备地址";
            worksheet.Cells[1, 3].Value = "地址";
            for (int i = 2; i <= 12; i++)
            {
                //直接向每个表格赋值则是写入
                worksheet.Cells[i, 1].Value = "目标名称" + " " + (i - 1);
                worksheet.Cells[i, 2].Value = "设备地址" + " " + (i - 1);
                worksheet.Cells[i, 3].Value = "地址" + " " + (i - 1);
            }
            excelPackage.Save();//写入后保存表格
        }
        //完成文件创建
    }
}


3.创建好的表格





五、常用API


1.对表格的操作
通过int索引取得Excel文件中的第N张表
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1]

通过string获得Excel的表格
ExcelWorksheet worksheet1 = excelPackage.Workbook.Worksheets["Sheet1"];

获得当前表格数目
int i = excelPackage.Workbook.Worksheets.Count;

添加一张表格
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet2");

给表格名称添加颜色(表头颜色换成绿色)
worksheet.TabColor = System.Drawing.Color.ForestGreen;




2.处理数据

获得表格中最大行和列
int row = worksheet.Dimension.End.Row;//行
int column = worksheet.Dimension.End.Column;//列

获得第x各格子中的内容
worksheet.Cells[1, 1].Value.ToString();//获得[1,1]位置的内容,可以写入(写入不加ToString)也可以读取

3.对Excel的操作

获得一个Excel文件
ExcelPackage excelPackage = new ExcelPackage(fileInfo);

保存修改后的Excel文件
excelPackage.Save();//保存
excelPackage.SaveAs();//另存为

六、提示

若修改表格,记得Save执行保存表格的操作
七、打包后的异常问题


在编辑器里运行正常,打包出来以后运行就崩溃,百思不得其解。后来终于找到答案了,这大概是unity操作excel时很常见的一个问题
解决方案:到unity编辑器所在路径中去找这个路径
\Editor\Data\MonoBleedingEdge\lib\mono\unityaot 或者 unityjit 文件夹
找到里边以”I18N“开头的这四个dll文件



复制到你的工程目录中的Plughs文件夹下即可
八、导出的单元格格式不是理想的格式


示例指定对应的单元格格式,比如设置为金额格式,小数点截取后两位
//指定第5列的单元格格式为金额格式,小数点截取后两位
sheet.Column(5).Style.Numberformat.Format = "¥#,##0.00";


还有一些常用的格式:
1) 文本:vnd.ms-excel.numberformat:@
2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd
3) 数字:vnd.ms-excel.numberformat:#,##0.00
4) 货币:vnd.ms-excel.numberformat:¥#,##0.00
5) 百分比:vnd.ms-excel.numberformat: #0.00%
这些格式你也可以自定义,比如年月你可以定义为:yy-mm等等。那么知道了这些格式,怎么去把这些格式添加到cell中呢?很简单,我们只需要把样式添加到对应的标签对(即闭合标签)即可


下面的EPPlus的GitHUb:
https://github.com/JanKallman/EPPlus



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
 楼主| 发表于 2023-11-30 18:26:08 | 显示全部楼层
所需插件:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表