unity读写本地excel_2024.4.22

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.mzph.cn/bicheng/3945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prometheus数据模型与查询语言:构建高效监控系统的关键

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Prometheus诞生史 二、Prometheus的数据模型与查询语…

中电金信:向“新”而行——探索融合架构的项目管理在保险行业的应用

近年来&#xff0c;险企在政策推动、市场牵引、自身发展、新技术应用日趋成熟等内外部因素的驱动下&#xff0c;积极投身到数字化转型的浪潮中。在拜访各类保险客户和合作项目的过程中&#xff0c;我们发现不少险企在数字化转型中或多或少都面临着战略如何落地、技术如何承接和…

wlan二层直连组网实验(ensp)

目录 1. VLAN 端口类型及参数设计2. IP 地址规划3. WLAN数据规划(1) DHCP服务器配置(2) AC 源接口地址、认证方式配置(3) AP 组的创建(4) 创建域管理模板、国家码认证(5) 创建安全模板(6) 创建SSID模板(7) 创建VAP模板(8) AP组绑定模板(9) 查看&#xff1a; 1. VLAN 端口类型及…

快手面试算法真题

按照html中的标签层数遍历节点名。 例如&#xff1a;html代码如下&#xff1a;(上面的数字表示层数) <!-- 1 --><div class"div1"><!-- 2 --><span class"span1"></span><!-- 2 --><p class"p1"><…

43. UE5 RPG 实现敌人血量显示条

在上一篇文章中&#xff0c;我们实现了火球术伤害功能&#xff0c;在火球击中敌方目标&#xff0c;可以降低敌人20的血量&#xff0c;这个值现在是固定的&#xff0c;后面我们会修改火球的伤害设置。接着&#xff0c;我们也测试了功能是实现的&#xff0c;但是在正常的游玩过程…

untiy avpro播放超过8K视频的解决方案

安转LAV Filters解码器&#xff0c;然后指定Avpro使用这个解码器播放即可 第一步 安装解码器 下载链接 第二步 AVPro设置 MediaPlayer脚本中一共两处

网络安全实训Day17and18

写在前面 第17和18天都讲的sql注入&#xff0c;故合并 ​​​​​​ 网络空间安全实训-渗透测试 Web渗透 定义 针对Web站点的渗透攻击&#xff0c;以获取网站控制权限为目的 Web渗透的特点 Web技术学习门槛低&#xff0c;更容易实现 Web的普及性决定了Web渗透更容易找到目…

C++之,static成员函数,友元函数以及内部类

个人主页&#xff1a;救赎小恶魔 欢迎大家来到小恶魔频道 好久不见&#xff0c;甚是想念 今天我们要深入讲述类与对象的初始化列表以及隐式类型转换 目录 引言&#xff1a; static成员函数 1. 概念 2.特性 友元 1.友元函数 2 友元类 内部类 匿名对象 引言&#xff…

杰发科技AC7840——ADC简介(1)_双路ADC同时使用

0. 简介 1. 特性 2. 双路ADC Sample里面没有双路的&#xff0c;以为那个规则组只有一个通道&#xff0c;看了外设寄存器才发现&#xff0c;原来他的通道是双路的。 注意1: ADC硬件引脚的配置 注意2: 规则组长度设置和 RSEQ序列号和CH通道号组合应该就对应了转换顺序&#xff0…

C语言Linux vim shell命令

无论是在插入模式或者是其他模式下对于文件的修改都是对于内存缓冲区进行修改&#xff0c;只有当点击w进行保存以后才会将数据写入到一个新的文件中的&#xff0c;将源文件删除&#xff0c;并且新文件改为文件的名字 1. actionmotion dG删到文件尾 ggdG先到开头再删除到末尾…

html+css+js+jquery实现在网页端将手动输入用户的信息转化成表格

1.实现的效果图 2.css代码 ​<style>*{background-color: antiquewhite;}#ss{font-size:20px;text-align: center;}#inputForm { margin-bottom: 20px; } #userTable { width: 100%; border-collapse: collapse; } #userTable th, #userTable td { border: 1px …

【uniapp/ucharts】采用 uniapp 框架的 h5 应用使用 ucharts(没有 uni_modules)

这种情况无法直接从 dcloud 平台上一键下载导入&#xff0c;所以应该在官网推荐的 git 仓库去单独下载&#xff1a; https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6/qiun-data-charts(%E9%9D%9Euni_modules) 下载的文件是如图所示的路径&…

攻防世界 easyphp

本题主要利用的知识点是php绕过 一、PHP代码分析 首先先看一下代码 我们需要利用get方式上传3个参数a,b,c&#xff0c;这3个分别需要满足不同的条件: a&#xff1a;设置a值&#xff1b;值大于6000000&#xff1b;长度不超过3&#xff1b; b&#xff1a;设置b值&#xff1b;MD…

【Qt】信号与槽

1 &#x1f351;信号和槽概述&#x1f351; 在 Qt 中&#xff0c;用户和控件的每次交互过程称为⼀个事件。⽐如 “⽤⼾点击按钮” 是⼀个事件&#xff0c;“⽤⼾关闭窗⼝” 也是⼀个事件。每个事件都会发出⼀个信号&#xff0c;例如⽤⼾点击按钮会发出 “按钮被点击” 的信号&…

websocket爬虫

人群看板需求分析 先找到策略中心具体的数据。对应数据库中的数据 看看接口是否需要被逆向 点开消费者细分&#xff0c;可以找到人群包&#xff08;人群名称&#xff09; 点击查看透视 label字段分类: 在这里插入图片描述 预测年龄&#xff1a;tagTitle 苹果id&#x…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面&#xff0c;同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具&#xff1a;uniapp开发小程序 1.3原型图 功能&#xff1a;.点击体验官带看跳转小程序的体验官带看页面 功能&#xff1a;点击立即咨询唤起小程序弹窗打电话 2.…

RPA机器人怎么操作知乎好物推荐自动点击【添加】商品按钮?

先看需要实现的效果&#xff08;启动机器人-点击收益&#xff08;打开商品卡片列表&#xff09;-点击添加&#xff08;自动添加商品卡片到文章&#xff09;&#xff09;&#xff1a; 学员提问&#xff1a; 知乎上点击好物推荐【添加】商品按钮&#xff0c;iframe的元素是动态的…

表情识别 | 卷积神经网络(CNN)人脸表情识别(Matlab)

表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09; 目录 表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab使用卷积神经网络(CNN)&#xff0c;进行人脸表情情绪识别…

数据结构(九)---并查集

目录 1.集合 2.集合的相关操作 (1)查(Find)&#xff1a; •Find操作的优化 (2)并(Union)&#xff1a; •Union操作的优化 1.集合 数据元素之间的逻辑关系可以为集合&#xff0c;树形关系&#xff0c;线性关系&#xff0c;图关系。对于集合而言&#xff0c;一个集合可以划…

【嵌入式AI部署神经网络】STM32CubeIDE上部署神经网络之指纹识别(Pytorch)——篇一|环境搭建与模型初步部署篇

前言:本篇主要讲解搭建所需环境,以及基于pytorch框架在stm32cubeide上部署神经网络,部署神经网络到STM32单片机,本篇实现初步部署模型,没有加入训练集与验证集,将在第二篇加入。篇二详细讲解STM32CubeIDE上部署神经网络之指纹识别(Pytorch)的数据准备和模型训练过程等,…