在Unity中使用Epplus写Excel

Overview

本文旨在帮助你快速入门,该库发展多年内容庞大(官方文档写的极好:https://github.com/EPPlusSoftware/EPPlus/wiki),有些功能在Unity环境可能你永远都不会使用.

官方的一个Demo:

https://github.com/EPPlusSoftware/EPPlus.Samples.CSharp

如果你只有读的需求,可以阅读本文:

在Unity环境中读取Excel配置文件(入门)_unity读取excel文件-CSDN博客

这篇文章我使用的是ExcelReader库(可惜的是该库只能读取Excel),我依赖该库制作了一个编辑器工具,很方便.

Install

因为该库依赖较多,请先阅读本篇.

Nuget For Unity插件介绍-CSDN博客

Start writing code

cs 复制代码
using System;
using System.IO;
using OfficeOpenXml; //引用namespace
using UnityEngine;
 
public class EPPlusExample : MonoBehaviour
{
    void Start()
    {
        // 确保设置许可上下文
        //两个枚举Commercial/NonCommercial代表你商业/非商业用途使用
        //开始的时候随便设置一个,不会影响功能,但不设置会抛出异常
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
 
        // 创建 Excel 文件
        CreateExcelFile();
    }
 
    void CreateExcelFile()
    {
        // Excel 文件的路径
        string filePath = Path.Combine(Application.streamingAssetsPath, "Example.xlsx");
 
        // 使用构造函数在指定路径创建一个新的空白的workbook,
        // 如果还没有该Excel文件那么会创建,否则会打开
        // 注意:最后不要忘记调用一下Save()保存一下
        // 使用using确保正确释放资源,或者在合适的时机使用Dispose().
        using (var package = new ExcelPackage(filePath))
        {
            // 一个workbook必须有一张表,所以我们添加一张表
            var ws = package.Workbook.Worksheets.Add("Sheet1");
 
            //  var ws=package.Workbook.Worksheets["Sheet1"];使用索引器可以直接获得一个已存在的表
 
            // 写入表头
            ws.Cells[1, 1].Value = "日期";
            // ws.Cells["A1"].Value = "日期";也可以这样写,都代表第一列第一行
            ws.Cells[1, 2].Value = "价格";
            ws.Cells[1, 3].Value = "数量";
 
            // 写入数据
            ws.Cells[2, 1].Value = DateTime.Now.ToString("yyyy-MM-dd");
            ws.Cells[2, 2].Value = 100;
            ws.Cells[2, 3].Value = 5;
 
            ws.Cells[3, 1].Value = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
            ws.Cells[3, 2].Value = 150;
            ws.Cells[3, 3].Value = 3;
            package.Save();//Save方法代表保存原始文件,就是说你修改了那么保存一下
 
            // 使用Style可以访问大多数单元格的格式和样式。
            // ws.Cells[2, 1].Style.Font.Bold=true;
            
            // 保存到指定路径
            //FileInfo file = new FileInfo(filePath);
            //package.SaveAs(file);这可以理解为另存
            //如果最后选择另存,那么开头的构造函数不传入路径.
            //SaveAs也有很多重载,使用FileInfo对象或者直接使用字符串都可以
//---------------------下述规则是和区域性无关的,遵循 OOXML 标准-----------------------------------
            // (1) 单元格地址的写法
 
            // A1:C1:表示第一行从列 A 到列 C 的单元格。C3:表示单独的 C3 单元格。
            // 单元格地址在代码中用逗号(, )分隔,表示多个区域。
            // ws.Cells["A1:C1,C3"].Style.Font.Bold = true; 
 
            //(2) 数字格式
 
            // 数字格式中:
            // 使用点号(.)作为小数点。
            // 使用逗号(,)作为千位分隔符
            // ws.Cells["B2:B3"].Style.NumberFormat.Format = "#,##0.00";
            // 格式说明:
            // #,##0.00 表示整数部分有千位分隔符,小数部分保留两位。
            // 应用后,单元格的值显示为 1,234.56。
            
//             1. 格式的组成
//             "#,##0.00" 是一个数字格式字符串,它定义了如何在 Excel 中显示数字。它由两部分组成:
//
//             #,##:
//             表示数字的千位分隔符。
//             每隔三位用逗号(,)分隔,例如 1,000 或 1,000,000。
//             如果数字不足千位,不显示逗号。例如 123。
//
//             0.00:
//             0:表示数字的必须显示位数(如果数字没有对应的位数,会补零)。
//             例如:12 会显示为 12.00。
//             .00:表示保留两位小数。
//             即使输入的数字没有小数部分,也会补充显示小数部分。
//             例如:5 会显示为 5.00。
//             2. 分组与规则
//             (1) #,## 的具体含义
//             #:
//             表示可选数字位,如果对应的位置没有数字,不显示任何内容。
//             例如:数字 123 使用 #,## 格式会显示为 123,而 1234 会显示为 1,234。
//             (2) 0.00 的具体含义
//             0:
//             表示必须显示数字位,如果对应位置没有数字,则填充 0。
//             例如:
//             数字 5 使用 0.00 格式会显示为 5.00。
//             数字 0 会显示为 0.00。
//             .00:
//             表示显示两位小数位。如果数字本身有更多小数,会进行四舍五入。
//             例如:
//             数字 3.14159 使用 0.00 格式会显示为 3.14。
//             数字 2 会显示为 2.00。
            
            // (3) 公式
            
            // 在 EPPlus 中定义公式时:
            // 参数之间使用逗号(,)分隔,而不是分号(;)。
            // 公式中不需要添加等号(=),直接写公式的主体部分。
            // 譬如:
            // ws.Cells["C11"].Formula = "SUBTOTAL(9,\"C1:C10\")";
            // SUBTOTAL 是一个 Excel 内置函数,用于计算汇总值。
            // 参数解释:
            // 9 表示求和(SUM)。
            // "C1:C10" 是目标区域。
            // 公式在 Excel 中会被正确解析为 =SUBTOTAL(9,C1:C10)
 
           
 
#if UNITY_EDITOR
            UnityEditor.AssetDatabase.Refresh(); //编辑器下强制编译一下.刷出该Excel文件
#endif
        }
 
        Debug.Log($"Excel 文件已创建:{filePath}");
    }
}
相关推荐
南城花随雪。13 分钟前
Excel表文本函数、日期和时间函数
excel
虾球xz3 小时前
游戏引擎学习第18天
java·学习·游戏引擎
tealcwu11 小时前
【Unity基础】对比Unity中碰撞类与触发类交互机制
unity·游戏引擎·交互
这不比博人传燃?14 小时前
传奇996_22——自动挂机
游戏引擎
Funky_oaNiu16 小时前
如何使用EasyExcel生成多列表组合填充的复杂Excel示例
java·excel·easyexcel
夜白宋17 小时前
【EasyExcel等比例缩小导出图片】
java·excel
刽子手发艺18 小时前
Javamail发送Excel附件具体实现
java·后端·excel
杳戢1 天前
凹凸/高度贴图、法线贴图、视差贴图、置换贴图异同
unity·图形渲染·贴图·技术美术
飞起的猪1 天前
【虚幻引擎】UE5数字人开发实战教程
ue5·游戏引擎·虚幻