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.hqwc.cn/news/640914.html

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

相关文章

管理集群工具之LVS

管理集群工具之LVS 集群概念 将很多机器组织在一起&#xff0c;作为一个整体对外提供服务集群在扩展性、性能方面都可以做到很灵活集群分类 负载均衡集群&#xff1a;Load Balance高可用集群&#xff1a;High Availability高性能计算&#xff1a;High Performance Computing …

JS 分片任务的高阶函数封装

前言 在我们的实际业务开发场景中&#xff0c;有时候我们会遇到渲染大量元素的场景&#xff0c;往往这些操作会使页面卡顿&#xff0c;给用户带来非常不好的体验&#xff0c;这时候我们就需要给任务分片执行。 场景复现 我们看一段代码&#xff1a; <!DOCTYPE html> &l…

微软如何打造数字零售力航母系列科普02 --- 微软低代码应用平台加速企业创新 - 解放企业数字零售力

微软低代码应用平台推动企业创新- 解放企业数字零售力 微软在2023年GARTNER发布的魔力象限图中处于头部领先&#xff08;leader&#xff09;地位。 其LCAP产品是Microsoft Power Apps&#xff0c;扩展了AI Builder、Dataverse、Power Automate和Power Pages&#xff0c;这些都包…

[BT]BUUCTF刷题第20天(4.22)

第20天 Web [GWCTF 2019]我有一个数据库 打开网站发现乱码信息&#xff08;查看其他题解发现显示的是&#xff1a;我有一个数据库&#xff0c;但里面什么也没有~ 不信你找&#xff09; 但也不是明显信息&#xff0c;通过dirsearch扫描得到robots.txt&#xff0c;然后在里面得…

keil把c语言函数转成汇编

汇编可以让开发人员从根源上理解程序的运行逻辑&#xff0c;本文介绍如何在keil环境下如何把一个c文件中的某一个函数&#xff0c;转换为汇编函数&#xff0c;并编译运行。 右击某个c文件&#xff0c;选择Option for File。。。 图1 然后把下图中的Generate Assembler SRC Fi…

自动驾驶控制算法

本文内容来源是B站——忠厚老实的老王&#xff0c;侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦&#xff0c;将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念&#xff1a; 运动学方程 建立微分方程 主要是弄…

【bug】使用mmsegmentaion遇到的问题

利用mmsegmentaion跑自定义数据集时的bug处理&#xff08;使用bisenetV2&#xff09; 1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader{batch_size: 1, num_workers: 4}, val_cfg{type: ValLoop}, …

2024免费MAC苹果电脑系统优化软件CleanMyMac X

CleanMyMac X确实是一款专为Mac用户设计的清理和优化工具。它提供了一系列功能&#xff0c;旨在帮助用户释放磁盘空间、提升Mac的性能&#xff0c;并保护用户的隐私。 CleanMyMac X能够智能地扫描和识别Mac上的各种垃圾文件&#xff0c;如系统缓存、日志文件、无用的语言包等&…

【React】Day6

项目搭建 基于CRA创建项目 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start调整项目目录结构 -src-apis 项目接口函数-assets 项目资源文件&…

Rancher-Longhorn-新增磁盘以及卷创建原理和卷副本调度规则

一、添加磁盘-官网指引 重点在于&#xff1a; 1、比如你新增了一块盘&#xff0c;你需要做一下事情&#xff1a; 1、执行 lsblk 能找到你的盘。 2、然后执行 fdisk /dev/sdxx 分区你的盘。 3、然后对于分区部署文件系统&#xff0c; mkfs.xfs 4、然后执行 mount /dev/sdxxx 你…

从数据库中到处所有表的列、注释、类型、是否必填等信息

从数据库中到处所有中文表名、英文表名、所有列、注释、类型、长度、是否必填等信息&#xff0c;效果如下&#xff1a; 要实现上面的表格可以直接用SQL实现&#xff0c;实现SQL如下&#xff1a; #查询SQL select* FROMinformation_schema.COLUMNS as columns left join (sele…

华为机考入门python3--(17)牛客17- 坐标移动

分类&#xff1a;字符串 知识点&#xff1a; 正则匹配 re.match(pattern, move) 格式字符串&#xff0c;可以在字符串中直接引用变量 f"{x},{y}" 题目来自【牛客】 import re def is_valid_coordinate(move): # 使用正则表达式验证移动是否合法 # ^: …