unity读写本地excel_2024.4.22

news/2024/10/19 23:45:16/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OfficeOpenXml;
using System.IO;
using Excel;
using System.Data;
using System;
/// <summary>
/// https://blog.csdn.net/Xz616/article/details/128893023
/// Unity3D操作数据之Excel表操作(创建、读取、写入、修改)
/// 北斗课题 VR 设备统计功能开发——每次程序打开关闭记录对应时间到本地电子表格
/// 列:打开年,月,日,时间,关闭年,月,日,时间
/// </summary>
public class ExcelOperation : MonoBehaviour
{// [SerializeField]string strExcelSavePath = "";[SerializeField]string strFilename = "北斗VR设备统计.xlsx";// Start is called before the first frame updatevoid Start(){//strExcelSavePath = Application.streamingAssetsPath;}/// <summary>/// 增/// Application.dataPath   :           E:/UnityProject_V2020.3.47f3c1/BDProject/Assets/// Application.streamingAssetsPath    :/UnityProject_V2020.3.47f3c1/BDProject/Assets/StreamingAssets/// </summary>public void CreatExcel(){//文件地址FileInfo newFile = new FileInfo(strExcelSavePath + "/test.xlsx");//如果文件存在删除重建if (newFile.Exists){newFile.Delete();newFile = new FileInfo(strExcelSavePath + "/test.xlsx");}//数据操作//如果只想创建文件不写入表头,数据操作步骤可以省略using (ExcelPackage package = new ExcelPackage(newFile)){//初次创建增加数据操作(重点在于这条操作语句不同)ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test");//添加对应列名worksheet.Cells[1, 1].Value = "列名1";worksheet.Cells[1, 2].Value = "列名2";worksheet.Cells[1, 3].Value = "列名3";//保存package.Save();print("创建成功");}}/// <summary>/// 存/// </summary>public void WriteExcel(){//文件地址FileInfo newFile = new FileInfo(strExcelSavePath + "/test.xlsx");//数据操作using (ExcelPackage package = new ExcelPackage(newFile)){//增加数据操作(重点在于这条操作语句与初次创建添加数据不同)ExcelWorksheet worksheet = package.Workbook.Worksheets["test"];//添加第二行数据worksheet.Cells[2, 1].Value = "名称1";worksheet.Cells[2, 2].Value = "价格1";worksheet.Cells[2, 3].Value = "销量1";//添加第三行数据worksheet.Cells[3, 1].Value = "名称2";worksheet.Cells[3, 2].Value = "价格2";worksheet.Cells[4, 3].Value = "销量2";//保存package.Save();print("写入数据成功");}}/// <summary>/// 已知已有行数,添加一行新数据,供外部调用/// dt为开始时间/// </summary>public void AddStartTimeToExcel(){if (!isSaveExcel){ //文件地址FileInfo newFile = new FileInfo(strExcelSavePath + "/" + strFilename);//数据操作using (ExcelPackage package = new ExcelPackage(newFile)){//增加数据操作(重点在于这条操作语句与初次创建添加数据不同)ExcelWorksheet worksheet = package.Workbook.Worksheets["设备统计"];//添加第curRows(原行数当现索引用)行数据  Cells[x,y]//x,y都是从1开始数的curRows++;worksheet.Cells[curRows, 1].Value = (curRows - 1).ToString();worksheet.Cells[curRows, 2].Value = DateTime.Now.Year;worksheet.Cells[curRows, 3].Value = DateTime.Now.Month;worksheet.Cells[curRows, 4].Value = DateTime.Now.Day;worksheet.Cells[curRows, 5].Value = DateTime.Now.ToString("HH:mm:ss");//保存package.Save();isSaveExcel = true;print("写入开始时间到excel");}}}/// <summary>/// 给系统一登录新增的那一行数据的最后一列新增内容——存储结束时间/// </summary>public void AddEndTimeToExcel(){if (isSaveExcel){ //文件地址FileInfo newFile = new FileInfo(strExcelSavePath + "/" + strFilename);//数据操作using (ExcelPackage package = new ExcelPackage(newFile)){//增加数据操作(重点在于这条操作语句与初次创建添加数据不同)ExcelWorksheet worksheet = package.Workbook.Worksheets["设备统计"];//添加第curRows(原行数当现索引用)行数据  Cells[x,y]//x,y都是从1开始数的// curRows = curRows++;// worksheet.Cells[curRows, 1].Value = (curRows - 1).ToString();worksheet.Cells[curRows, 6].Value = DateTime.Now.Year;worksheet.Cells[curRows, 7].Value = DateTime.Now.Month;worksheet.Cells[curRows, 8].Value = DateTime.Now.Day;worksheet.Cells[curRows, 9].Value = DateTime.Now.ToString("HH:mm:ss");//保存package.Save();isSaveExcel = false;print("写入结束时间到excel");}}}/*/// <summary>/// 删改 from csdn/// </summary>public void ChangeExcel(){//文件地址FileInfo newFile = new FileInfo(strExcelSavePath + "/test.xlsx");//数据操作using (ExcelPackage package = new ExcelPackage(newFile)){ExcelWorksheet worksheet = package.Workbook.Worksheets["test"];//追加worksheet.Cells[4, 1].Value = "名称3";worksheet.Cells[4, 2].Value = "价格3";worksheet.Cells[4, 3].Value = "销量3";//删除某一列(参数:列的序号)worksheet.DeleteColumn(1);//删除某一行(参数:行的序号)worksheet.DeleteRow(1);//修改(和添加一样)worksheet.Cells[4, 1].Value = "修改名称";worksheet.Cells[4, 2].Value = "修改价格";worksheet.Cells[4, 3].Value = "修改销量";//保存package.Save();print("删改数据成功");}}*//// <summary>/// 第一次存开始时间的时候不变此值,存结束时间的时候变/// </summary>bool isSaveExcel = false;/// <summary>/// 系统刚打开查询表格看看表格中总行数,也就是即将添加的行的索引/// </summary>int curRows = 0;/// <summary>/// 系统刚打开查询表格看看表格中总行数,也就是即将添加的行的索引/// </summary>int curColumns = 0;/* /// <summary>/// 查 from csdn/// </summary>public void ReadExecel(){//加载文件FileStream fileStream = File.Open(strExcelSavePath + "/test.xlsx", FileMode.Open, FileAccess.Read);IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);DataSet result = excelDataReader.AsDataSet();// 获取表格有多少列int columns = result.Tables[0].Columns.Count;// 获取表格有多少行 int rows = curRows = result.Tables[0].Rows.Count;Debug.Log("共有:" + columns + "列 " + rows + "行");//第一行为表头,不读取。没有表头从0开始(获取数据)for (int i = 0; i < rows; i++){for (int j = 0; j < columns; j++){// 获取表格中指定行指定列的数据 string value = result.Tables[0].Rows[i][j].ToString();Debug.Log(value);}}fileStream.Close();print("查询数据成功");}*//// <summary>/// 读取本地excel,为了填充变量 curRows,获取当前行数/// </summary>/// <param name="fileName">含文件后缀:北斗VR设备统计.xlsx</param>public void ReadExecel(){//加载文件FileStream fileStream = File.Open(strExcelSavePath + "/" + strFilename, FileMode.Open, FileAccess.Read);IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);DataSet result = excelDataReader.AsDataSet();// 获取表格有多少列int columns = curColumns = result.Tables[0].Columns.Count;// 获取表格有多少行 int rows = curRows = result.Tables[0].Rows.Count;Debug.Log("共有:" + columns + "列 " + rows + "行");/* //第一行为表头,不读取。没有表头从0开始(获取数据)for (int i = 0; i < rows; i++){for (int j = 0; j < columns; j++){// 获取表格中指定行指定列的数据 string value = result.Tables[0].Rows[i][j].ToString();Debug.Log(value);}}*/fileStream.Close();//print("查询数据成功,行数:" + curRows);}// Update is called once per framevoid Update(){/*if (Input.GetKeyUp(KeyCode.U)){print(Application.streamingAssetsPath);CreatExcel();}if (Input.GetKeyUp(KeyCode.I)){WriteExcel();}*//*if (Input.GetKeyUp(KeyCode.O)){ReadExecel();AddStartTimeToExcel();}if (Input.GetKeyUp(KeyCode.P)){AddEndTimeToExcel();}*/}/// <summary>/// DontDestroyOnLoad(GameObject);//让此物体在场景销毁的时候不进行销毁,但是有几点需要注意//再次返回到此物体所在场景的时候,这个脚本所在的物体也会进行初始化,执行Awake(),Start()方法,所以要设计成单例的://注意看注释/// </summary>private static ExcelOperation _instance;   // 单例public ExcelOperation GameManagerInstance{get { return _instance; }}void Awake(){if (_instance != null){//这里一定要是销毁this.gameObjectDestroy(this.gameObject);return;}//这句话只执行一次,第二次上面return了_instance = this;strExcelSavePath = Application.streamingAssetsPath;ReadExecel();AddStartTimeToExcel();DontDestroyOnLoad(gameObject);}private void OnApplicationQuit(){AddEndTimeToExcel();}
}


http://www.ppmy.cn/news/1438390.html

相关文章

Python3.11修改并运行oneforall

遇到的问题 使用python3.11默认无法运行oneforall脚本&#xff0c;出现如下报错 # 解决方案 修改 /usr/local/lib/python3.11/dist-packages/exrex.py exrex.py具体文件路径报错中会显示 vim /usr/local/lib/python3.11/dist-packages/exrex.py# 修改前 from re import sre…

在 TypeScript 中declare module 关键字用法

在 TypeScript 中&#xff0c;declare module 关键字用于声明模块的类型信息&#xff0c;这种声明通常出现在声明文件&#xff08;通常是 .d.ts 文件&#xff09;中。这对于当你需要为现有的 JavaScript 库或模块提供类型信息时非常有用&#xff0c;尤其是对于没有提供自己的类…

g 对象:Flask 应用中的“临时口袋”

文章目录 g对象的理解Flask 中的 g 对象g 对象的特点:使用 g 对象: 示例 g对象的理解 想象一下&#xff0c;你在逛超市。你需要一个购物篮来装你挑选的商品。这个购物篮就像 Flask 应用中的 g 对象&#xff0c;它是一个临时存放东西的地方&#xff0c;方便你在购物过程中随时取…

【设计模式】11、flyweight 享元模式

文章目录 十一、flyweight11.1 pool 连接池11.1.1 pool_test.go11.1.2 pool.go11.1.3 conn.go 11.2 chess_board11.2.1 chess_test.go11.2.2 chess.go 十一、flyweight https://refactoringguru.cn/design-patterns/flyweight 大量重复的对象, 如果很消耗资源, 没必要每次都初…

学习Rust的第11天:模块系统

Rust的模块系统可以使用它来管理不断增长的项目&#xff0c;并跟踪 modules 存储在何处。 Rust的模块系统是将代码组织成逻辑片段的有效工具&#xff0c;因此可以实现代码维护和重用。模块支持分层组织、隐私管理和代码封装。Rust为开发人员提供了多功能和可扩展的方法来管理项…

Ansible安装基本原理及操作(初识)

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月23日15点18分 Ansible 是一款功能强大且易于使用的IT自动化工具&#xff0c;可用于配置管理、应用程序部署和云端管理。它使用无代理模式&#xff08;agentles…

关于MCU核心板的一些常见问题

BGA植球与焊接&#xff08;多涂焊油&#xff09;&#xff1a; 【BGA芯片是真麻烦&#xff0c;主要是植锡珠太麻烦了&#xff0c;拆一次就得重新植】https://www.bilibili.com/video/BV1vW4y1w7oNvd_source3cc3c07b09206097d0d8b0aefdf07958 / NC电容一般有两种含义&#xff1…

ubuntu中可以查看照片的程序

ubuntu中可以查看照片的程序 在Ubuntu中&#xff0c;您可以使用多种图片查看器来查看照片。以下是几个常用的图片查看器&#xff1a; GIMP GIMP是一个免费的开源图片编辑器&#xff0c;它也可以用来查看和打印图片。 安装命令&#xff1a; sudo apt-get update sudo apt-ge…