Unity中利用NOPI读取Excel

  • ---0v0--- 前言
  • ---0_0--- NPOI的相关.dll网盘下载链接
  • 一、解析Excel的类
  • 二、测试代码

—0v0— 前言

 最近工作遇到解析.xls的需求,大致经过了以下几个阶段:1、使用windows系统自带的Excel.dll解析,以前用这个解析.xlsx文件没问题,但是不能解析.xls;2、用EPPlus.dll解析,结果能读取简单的几行几列数据,受限太大;3、最终NPOI解决了这个问题(期间遇到两个问题:a、.dll找不到 b、网上直接下的.dll不全,各种报错)4、在这里感谢NPOI作者!5、引用1)https://www.cnblogs.com/yhood/p/11525922.html C#获取文件的后缀,文件名和路径2)https://www.cnblogs.com/zqyw/p/7462030.html NPOI操作Excel(一)--NPOI基础

—0_0— NPOI的相关.dll网盘下载链接

 链接:https://pan.baidu.com/s/1TWf-dzeLsZRvSP_Bz8w4Rg  提取码:yz4t注:.NET 3.5用dotnet2里面的.dll,.NET 4.0用dotnet4里面的.dll,Unity里建Plugins文件夹,将.dll拷贝过去原始下载链接:https://archive.codeplex.com/?p=npoi (下载后把里面\releases\0\目录下的文件用7z解压或者加上.zip的后缀直接解压【我是将其改名成NPOI.7z】,这里感谢https://blog.csdn.net/wf824284257/article/details/77113691里评论的luoyvtianxiang)

一、解析Excel的类

/** Edit by XJH at 2020-05-12*/
using System.Collections.Generic;
using UnityEngine;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
using NPOI.XSSF.UserModel;/// <summary>
/// HSSFWorkbook 用于  .xls
/// XSSFWorkbook 用于  .xlsx
/// </summary>
public class NPOI2Excel{/// <summary>/// 加载Excel文件/// </summary>/// <param name="excelPath">文件路径</param>/// <returns></returns>public static IWorkbook LoadExcel(string excelPath){string suffixStr = Path.GetExtension(excelPath);switch (suffixStr){case ".xls":return ReadXLS(excelPath);case ".xlsx":return ReadXLSX(excelPath);default:break;}Debug.LogError("File isn't .xls or .xlsx");return null;}/// <summary>/// 加载Excel文件/// 获取某行某列的值/// </summary>/// <param name="excelPath">文件路径</param>/// <param name="sheetIndex">单元下标</param>/// <param name="rowNum">行下标</param>/// <param name="cellNum">列下标</param>/// <returns>单元格字符串</returns>public static string LoadExcel(string excelPath,int sheetIndex,int rowNum,int cellNum){return LoadExcel(excelPath).GetSheetAt(sheetIndex).GetRow(rowNum).GetCell(cellNum).ToString();}/// <summary>/// 加载Excel文件/// 获取某行某列的值/// </summary>/// <param name="excelPath">文件路径</param>/// <param name="sheetName">单元名称</param>/// <param name="rowNum">行下标</param>/// <param name="cellNum">列下标</param>/// <returns>单元格字符串</returns>public static string LoadExcel(string excelPath, string sheetName, int rowNum, int cellNum){return LoadExcel(excelPath).GetSheet(sheetName).GetRow(rowNum).GetCell(cellNum).ToString();}/// <summary>/// 加载Excel文件/// 所有数据/// </summary>/// <param name="excelPath">文件路径</param>/// <param name="sheetIndex">单元下标</param>/// <returns>数据</returns>public static List<string>[] LoadExcel(string excelPath, int sheetIndex){ISheet sheet = LoadExcel(excelPath).GetSheetAt(sheetIndex);List<string>[] fullData = new List<string>[sheet.LastRowNum - sheet.FirstRowNum];for (int i = sheet.FirstRowNum; i < sheet.LastRowNum; i++){List<string> rowData = new List<string>();for (int k = sheet.GetRow(i).FirstCellNum; k < sheet.GetRow(i).LastCellNum; k++){//直接GetCell(k).StringCellValue会报错://InvalidOperationException: Cannot get a text value from a numeric cell//因为Cell可能为其他类型,//**************************************//方法一:将类型转换为string//if (sheet.GetRow(i).GetCell(k) != null)//{//   sheet.GetRow(i).GetCell(k).SetCellType(CellType.String);//}//方法二:直接ToString()rowData.Add(sheet.GetRow(i).GetCell(k).ToString());}fullData[i] = rowData;}return fullData;}/// <summary>/// 加载Excel文件/// 所有数据/// </summary>/// <param name="excelPath">文件路径</param>/// <param name="sheetName">单元名称</param>/// <returns>数据</returns>public static List<string>[] LoadExcel(string excelPath, string sheetName){ISheet sheet = LoadExcel(excelPath).GetSheet(sheetName);List<string>[] fullData = new List<string>[sheet.LastRowNum - sheet.FirstRowNum];for (int i = sheet.FirstRowNum; i < sheet.LastRowNum; i++){List<string> rowData = new List<string>();for (int k = sheet.GetRow(i).FirstCellNum; k < sheet.GetRow(i).LastCellNum; k++){//直接GetCell(k).StringCellValue会报错://InvalidOperationException: Cannot get a text value from a numeric cell//因为Cell可能为其他类型,//**************************************//方法一:将类型转换为string//if (sheet.GetRow(i).GetCell(k) != null)//{// sheet.GetRow(i).GetCell(k).SetCellType(CellType.String);//}//方法二:直接ToString()rowData.Add(sheet.GetRow(i).GetCell(k).ToString());}fullData[i] = rowData;}return fullData;}/// <summary>/// 读取Excel文件(.xls)/// </summary>public static HSSFWorkbook ReadXLS(string excelPath){//后缀判断if (!Path.GetExtension(@excelPath).Contains(".xls")){Debug.LogError("This is not a .xls File");return null;}FileStream fs = File.OpenRead(@excelPath);HSSFWorkbook xlsData = new HSSFWorkbook(fs);fs.Close();fs.Dispose();return xlsData;}/// <summary>/// 读取Excel文件(.xlsx)/// </summary>public static XSSFWorkbook ReadXLSX(string excelPath){//后缀判断if (!Path.GetExtension(@excelPath).Contains(".xlsx")){Debug.LogError("This is not a .xlsx File");return null;}FileStream fs = File.OpenRead(@excelPath);XSSFWorkbook xlsxData = new XSSFWorkbook(fs);fs.Close();fs.Dispose();return xlsxData;}
}

二、测试代码

挂在Unity场景中,Inspector上赋值excelPath,运行即可
/** Edit by XJH at 2020-05-12*/
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 读取Excel文件测试代码
/// </summary>
public class TestExcel : MonoBehaviour {[Header("Excel文件路径(带后缀)")]public string excelPath;// Use this for initializationvoid Start () {List<string>[] excelData = NPOI2Excel.LoadExcel(excelPath, 0);for (int i = 0; i < excelData.Length; i++){for (int k = 0; k < excelData[i].Count; k++){Debug.Log(string.Format("第{0}行 第{1}列>{2}", i + 1, k + 1, excelData[i][k]));}}}
}

Unity中利用NOPI读取Excel相关推荐

  1. MVC5中利用NOPI导出EXCLE

    MVC5中利用NOPI导出EXCLE //导出excle 设备效率public JsonResult Exporta(){var jser = new JavaScriptSerializer();s ...

  2. python xlrd读取文件报错_python利用xlrd读取excel文件始终报错原因

    1.代码按照网上百度的格式进行书写如下: 但运行后,始终报错如下: 百度了xlrd网页: 分明支持xls和xlsx两种格式的文件,但运行始终报错. 最后找到原因是因为我所读取的文件虽然是以.xls命名 ...

  3. pandas玩转excel-> (2)如何利用pandas读取excel数据文件

    pandas玩转excel-> (2)如何利用pandas读取excel数据文件 import pandas as pd #将excel文件读到内存中,形成dataframe,并命名为peopl ...

  4. 利用POI读取excel文件(java)

    利用POI读取excel文件(java) 摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值. 一.需要提前导入的包: import java.io.File;impor ...

  5. java利用poi读取excel_java利用POI读取excel文件的方法

    摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值. 一.需要提前导入的包: import java.io.File; import java.io.FileInputS ...

  6. Unity中利用材质自发光实现物体闪烁效果

    Unity中利用材质自发光实现物体闪烁效果 补充:这种方法有一点问题,在测试(Windows平台)的时候发现,要想在Build出来的游戏中实现闪烁效果,就必须在 Project 窗口中将源材质的自发光 ...

  7. 小功能⭐️Unity中利用材质自发光实现物体闪烁效果

    文章目录 本文基于VDer的文章<Unity中利用材质自发光实现物体闪烁效果>延伸开发 在实现了具有一个Material的物体闪烁发光之后,延伸开发了具有多个Material的自闪烁效果, ...

  8. python3利用pandas读取excel的列取出最大最小值

    python3利用pandas读取excel的列取出最大最小值 from pandas import DataFrame,read_exceldef openfile(path,name):#读取文件 ...

  9. 初学python,利用pandas读取excel出现乱码的问题

    初学python,利用pandas读取excel出现乱码的问题 初学python,利用pandas读取excel文件时,出现中文乱码: 左侧出现中文乱码 解决过程: 初始判断是是pandas读取中文出 ...

最新文章

  1. 367. Valid Perfect Square
  2. oracle 的服务器进程(PMON, SMON,CKPT,DBWn,LGWR,ARCn)
  3. C#基础总结之四List-Hashtable-冒泡排序
  4. Android网络连接的两种方法:apache client和httpurlconnection的比较
  5. 苏宁启动30周年庆:联合近300个品牌启动“超级品牌季”
  6. 在Azure ML中使用Logistic回归预测客户的贷款资格
  7. thinkphp3 页面跳转外部链接_PPT超链接使用全攻略,你必懂的基本技巧!
  8. 万豪联姻蚂蚁金服 结合优势打造共赢
  9. 在Ubuntu下后台持续运行Python程序
  10. c语言 error c4028,在Visual Studio2010中,“警告C4028:正式參數1與聲明不同”顯示。...
  11. 时间管理--番茄工作法
  12. java 异或运算符^
  13. KUKA库卡机器人零点失效维修案例
  14. 【吴恩达】机器学习第16章异常检测以及ex8部分编程练习
  15. Python设置32位环境
  16. linux运行img文件格式,img是什么格式?img文件怎么打开?
  17. Flutter 开发——识别iOS设备
  18. 基于java+springboot+mybatis+vue+elementui的古玩玉器交易系统
  19. iOS框架介绍--EF字头
  20. 反弹Shell命令一键生成工具

热门文章

  1. 逻辑与、逻辑或||的注意项
  2. continu和break的区别
  3. Tita 绩效宝:让管理者提高1对1面谈水平的5大技巧
  4. 微信公众号怎么生成带参数的二维码?
  5. 【前端echatrs图表框架】使用echarts实现雷达图
  6. masory 刷新约束方法 释义
  7. SQL研习录(24)——CHECK约束
  8. 懂得感恩的人,运气都不会太差
  9. Memcached管理与Redis
  10. kaggle api下载数据集