当前位置:   article > 正文

unity读写本地excel_2024.4.22_unity officeopenxml

unity officeopenxml

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using OfficeOpenXml;
  5. using System.IO;
  6. using Excel;
  7. using System.Data;
  8. using System;
  9. /// <summary>
  10. /// https://blog.csdn.net/Xz616/article/details/128893023
  11. /// Unity3D操作数据之Excel表操作(创建、读取、写入、修改)
  12. /// 北斗课题 VR 设备统计功能开发——每次程序打开关闭记录对应时间到本地电子表格
  13. /// 列:打开年,月,日,时间,关闭年,月,日,时间
  14. /// </summary>
  15. public class ExcelOperation : MonoBehaviour
  16. {
  17. // [SerializeField]
  18. string strExcelSavePath = "";
  19. [SerializeField]
  20. string strFilename = "北斗VR设备统计.xlsx";
  21. // Start is called before the first frame update
  22. void Start()
  23. {
  24. //strExcelSavePath = Application.streamingAssetsPath;
  25. }
  26. /// <summary>
  27. ///
  28. /// Application.dataPath : E:/UnityProject_V2020.3.47f3c1/BDProject/Assets
  29. /// Application.streamingAssetsPath :/UnityProject_V2020.3.47f3c1/BDProject/Assets/StreamingAssets
  30. /// </summary>
  31. public void CreatExcel()
  32. {
  33. //文件地址
  34. FileInfo newFile = new FileInfo(strExcelSavePath + "/test.xlsx");
  35. //如果文件存在删除重建
  36. if (newFile.Exists)
  37. {
  38. newFile.Delete();
  39. newFile = new FileInfo(strExcelSavePath + "/test.xlsx");
  40. }
  41. //数据操作//如果只想创建文件不写入表头,数据操作步骤可以省略
  42. using (ExcelPackage package = new ExcelPackage(newFile))
  43. {
  44. //初次创建增加数据操作(重点在于这条操作语句不同)
  45. ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test");
  46. //添加对应列名
  47. worksheet.Cells[1, 1].Value = "列名1";
  48. worksheet.Cells[1, 2].Value = "列名2";
  49. worksheet.Cells[1, 3].Value = "列名3";
  50. //保存
  51. package.Save();
  52. print("创建成功");
  53. }
  54. }
  55. /// <summary>
  56. ///
  57. /// </summary>
  58. public void WriteExcel()
  59. {
  60. //文件地址
  61. FileInfo newFile = new FileInfo(strExcelSavePath + "/test.xlsx");
  62. //数据操作
  63. using (ExcelPackage package = new ExcelPackage(newFile))
  64. {
  65. //增加数据操作(重点在于这条操作语句与初次创建添加数据不同)
  66. ExcelWorksheet worksheet = package.Workbook.Worksheets["test"];
  67. //添加第二行数据
  68. worksheet.Cells[2, 1].Value = "名称1";
  69. worksheet.Cells[2, 2].Value = "价格1";
  70. worksheet.Cells[2, 3].Value = "销量1";
  71. //添加第三行数据
  72. worksheet.Cells[3, 1].Value = "名称2";
  73. worksheet.Cells[3, 2].Value = "价格2";
  74. worksheet.Cells[4, 3].Value = "销量2";
  75. //保存
  76. package.Save();
  77. print("写入数据成功");
  78. }
  79. }
  80. /// <summary>
  81. /// 已知已有行数,添加一行新数据,供外部调用
  82. /// dt为开始时间
  83. /// </summary>
  84. public void AddStartTimeToExcel()
  85. {
  86. if (!isSaveExcel)
  87. { //文件地址
  88. FileInfo newFile = new FileInfo(strExcelSavePath + "/" + strFilename);
  89. //数据操作
  90. using (ExcelPackage package = new ExcelPackage(newFile))
  91. {
  92. //增加数据操作(重点在于这条操作语句与初次创建添加数据不同)
  93. ExcelWorksheet worksheet = package.Workbook.Worksheets["设备统计"];
  94. //添加第curRows(原行数当现索引用)行数据 Cells[x,y]//x,y都是从1开始数的
  95. curRows++;
  96. worksheet.Cells[curRows, 1].Value = (curRows - 1).ToString();
  97. worksheet.Cells[curRows, 2].Value = DateTime.Now.Year;
  98. worksheet.Cells[curRows, 3].Value = DateTime.Now.Month;
  99. worksheet.Cells[curRows, 4].Value = DateTime.Now.Day;
  100. worksheet.Cells[curRows, 5].Value = DateTime.Now.ToString("HH:mm:ss");
  101. //保存
  102. package.Save();
  103. isSaveExcel = true;
  104. print("写入开始时间到excel");
  105. }
  106. }
  107. }
  108. /// <summary>
  109. /// 给系统一登录新增的那一行数据的最后一列新增内容——存储结束时间
  110. /// </summary>
  111. public void AddEndTimeToExcel()
  112. {
  113. if (isSaveExcel)
  114. { //文件地址
  115. FileInfo newFile = new FileInfo(strExcelSavePath + "/" + strFilename);
  116. //数据操作
  117. using (ExcelPackage package = new ExcelPackage(newFile))
  118. {
  119. //增加数据操作(重点在于这条操作语句与初次创建添加数据不同)
  120. ExcelWorksheet worksheet = package.Workbook.Worksheets["设备统计"];
  121. //添加第curRows(原行数当现索引用)行数据 Cells[x,y]//x,y都是从1开始数的
  122. // curRows = curRows++;
  123. // worksheet.Cells[curRows, 1].Value = (curRows - 1).ToString();
  124. worksheet.Cells[curRows, 6].Value = DateTime.Now.Year;
  125. worksheet.Cells[curRows, 7].Value = DateTime.Now.Month;
  126. worksheet.Cells[curRows, 8].Value = DateTime.Now.Day;
  127. worksheet.Cells[curRows, 9].Value = DateTime.Now.ToString("HH:mm:ss");
  128. //保存
  129. package.Save();
  130. isSaveExcel = false;
  131. print("写入结束时间到excel");
  132. }
  133. }
  134. }
  135. /*/// <summary>
  136. /// 删改 from csdn
  137. /// </summary>
  138. public void ChangeExcel()
  139. {
  140. //文件地址
  141. FileInfo newFile = new FileInfo(strExcelSavePath + "/test.xlsx");
  142. //数据操作
  143. using (ExcelPackage package = new ExcelPackage(newFile))
  144. {
  145. ExcelWorksheet worksheet = package.Workbook.Worksheets["test"];
  146. //追加
  147. worksheet.Cells[4, 1].Value = "名称3";
  148. worksheet.Cells[4, 2].Value = "价格3";
  149. worksheet.Cells[4, 3].Value = "销量3";
  150. //删除某一列(参数:列的序号)
  151. worksheet.DeleteColumn(1);
  152. //删除某一行(参数:行的序号)
  153. worksheet.DeleteRow(1);
  154. //修改(和添加一样)
  155. worksheet.Cells[4, 1].Value = "修改名称";
  156. worksheet.Cells[4, 2].Value = "修改价格";
  157. worksheet.Cells[4, 3].Value = "修改销量";
  158. //保存
  159. package.Save();
  160. print("删改数据成功");
  161. }
  162. }*/
  163. /// <summary>
  164. /// 第一次存开始时间的时候不变此值,存结束时间的时候变
  165. /// </summary>
  166. bool isSaveExcel = false;
  167. /// <summary>
  168. /// 系统刚打开查询表格看看表格中总行数,也就是即将添加的行的索引
  169. /// </summary>
  170. int curRows = 0;
  171. /// <summary>
  172. /// 系统刚打开查询表格看看表格中总行数,也就是即将添加的行的索引
  173. /// </summary>
  174. int curColumns = 0;
  175. /* /// <summary>
  176. /// 查 from csdn
  177. /// </summary>
  178. public void ReadExecel()
  179. {
  180. //加载文件
  181. FileStream fileStream = File.Open(strExcelSavePath + "/test.xlsx", FileMode.Open, FileAccess.Read);
  182. IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
  183. DataSet result = excelDataReader.AsDataSet();
  184. // 获取表格有多少列
  185. int columns = result.Tables[0].Columns.Count;
  186. // 获取表格有多少行
  187. int rows = curRows = result.Tables[0].Rows.Count;
  188. Debug.Log("共有:" + columns + "列 " + rows + "行");
  189. //第一行为表头,不读取。没有表头从0开始(获取数据)
  190. for (int i = 0; i < rows; i++)
  191. {
  192. for (int j = 0; j < columns; j++)
  193. {
  194. // 获取表格中指定行指定列的数据
  195. string value = result.Tables[0].Rows[i][j].ToString();
  196. Debug.Log(value);
  197. }
  198. }
  199. fileStream.Close();
  200. print("查询数据成功");
  201. }*/
  202. /// <summary>
  203. /// 读取本地excel,为了填充变量 curRows,获取当前行数
  204. /// </summary>
  205. /// <param name="fileName">含文件后缀:北斗VR设备统计.xlsx</param>
  206. public void ReadExecel()
  207. {
  208. //加载文件
  209. FileStream fileStream = File.Open(strExcelSavePath + "/" + strFilename, FileMode.Open, FileAccess.Read);
  210. IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
  211. DataSet result = excelDataReader.AsDataSet();
  212. // 获取表格有多少列
  213. int columns = curColumns = result.Tables[0].Columns.Count;
  214. // 获取表格有多少行
  215. int rows = curRows = result.Tables[0].Rows.Count;
  216. Debug.Log("共有:" + columns + "列 " + rows + "行");
  217. /* //第一行为表头,不读取。没有表头从0开始(获取数据)
  218. for (int i = 0; i < rows; i++)
  219. {
  220. for (int j = 0; j < columns; j++)
  221. {
  222. // 获取表格中指定行指定列的数据
  223. string value = result.Tables[0].Rows[i][j].ToString();
  224. Debug.Log(value);
  225. }
  226. }*/
  227. fileStream.Close();
  228. //print("查询数据成功,行数:" + curRows);
  229. }
  230. // Update is called once per frame
  231. void Update()
  232. {
  233. /*if (Input.GetKeyUp(KeyCode.U))
  234. {
  235. print(Application.streamingAssetsPath);
  236. CreatExcel();
  237. }
  238. if (Input.GetKeyUp(KeyCode.I))
  239. {
  240. WriteExcel();
  241. }*/
  242. /*if (Input.GetKeyUp(KeyCode.O))
  243. {
  244. ReadExecel();
  245. AddStartTimeToExcel();
  246. }
  247. if (Input.GetKeyUp(KeyCode.P))
  248. {
  249. AddEndTimeToExcel();
  250. }*/
  251. }
  252. /// <summary>
  253. /// DontDestroyOnLoad(GameObject);
  254. //让此物体在场景销毁的时候不进行销毁,但是有几点需要注意
  255. //再次返回到此物体所在场景的时候,这个脚本所在的物体也会进行初始化,执行Awake(),Start()方法,所以要设计成单例的:
  256. //注意看注释
  257. /// </summary>
  258. private static ExcelOperation _instance; // 单例
  259. public ExcelOperation GameManagerInstance
  260. {
  261. get { return _instance; }
  262. }
  263. void Awake()
  264. {
  265. if (_instance != null)
  266. {
  267. //这里一定要是销毁this.gameObject
  268. Destroy(this.gameObject);
  269. return;
  270. }
  271. //这句话只执行一次,第二次上面return了
  272. _instance = this;
  273. strExcelSavePath = Application.streamingAssetsPath;
  274. ReadExecel();
  275. AddStartTimeToExcel();
  276. DontDestroyOnLoad(gameObject);
  277. }
  278. private void OnApplicationQuit()
  279. {
  280. AddEndTimeToExcel();
  281. }
  282. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/661798
推荐阅读
相关标签
  

闽ICP备14008679号