Unity 版本: 2020.3.36f1c1
打包平台:PC(EXE)
需要两种 DLL复制到 Plugins 文件夹底下
- Excel的
分别为:EPPlus.dll、Excel.dll、ICSharpCode.SharpZipLib.dll
下载地址 - 18dll的地址
找到自己版本的Unity安装目录的 Editor 文件夹下的路径 Editor\Data\MonoBleedingEdge\lib\mono\unityjit
using Excel;
using OfficeOpenXml;
using System.Data;
using System.IO;
using UnityEngine;
public class ExcelManager : Singleton<ExcelManager>
{
private string PersistentExcel;
public void CreatExcel(string fileName)
{
PersistentExcel = PersistentFilePath(fileName);
FileInfo newFile = new FileInfo(PersistentExcel);
if (newFile.Exists) return;
newFile = new FileInfo(PersistentExcel);
using (ExcelPackage package = new ExcelPackage(newFile))
{
ExcelWorksheet worksheet;
worksheet = package.Workbook.Worksheets.Add(fileName);
worksheet.Cells[1, 1].Value = "计数";
worksheet.Cells[1, 2].Value = "题型";
worksheet.Cells[1, 3].Value = "题型编号";
worksheet.Cells[1, 4].Value = "题目";
worksheet.Cells[1, 5].Value = "选项A";
worksheet.Cells[1, 6].Value = "选项B";
worksheet.Cells[1, 7].Value = "选项C";
worksheet.Cells[1, 8].Value = "选项D";
worksheet.Cells[1, 9].Value = "答案";
worksheet.Cells[1, 10].Value = "解析";
package.Save();
WriteExcelForCreat("1000道题库");
}
}
public void ChangeExcel_Add(string fileURL)
{
WriteExcel(fileURL);
}
public void ChangeExcel_Remove(int row)
{
FileInfo newFile = new FileInfo(PersistentExcel);
using (ExcelPackage package = new ExcelPackage(newFile))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
worksheet.DeleteRow(row);
package.Save();
}
}
public DataTable ReadingExcel()
{
return ReadingExcel(PersistentExcel);
}
public DataTable ReadingExcel(string fileURL)
{
FileStream fileStream = File.Open(fileURL, FileMode.Open, FileAccess.Read);
IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
DataSet result = excelDataReader.AsDataSet();
fileStream.Close();
return result.Tables[0];
}
private void WriteExcelForCreat(string fileName)
{
string fistWrite = StreamingAssetsPath(fileName);
WriteExcel(fistWrite);
}
private void WriteExcel(string readingWriteDataURL)
{
FileInfo newFile = new FileInfo(PersistentExcel);
using (ExcelPackage package = new ExcelPackage(newFile))
{
int totalRow = ReadingExcel(PersistentExcel).Rows.Count;
DataTable dataTable = ReadingExcel(readingWriteDataURL);
int needingWriteColumns = dataTable.Columns.Count;
int needingWriteRows = dataTable.Rows.Count;
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
for (int row = 1; row < needingWriteRows; row++)
{
for (int col = 0; col < needingWriteColumns; col++)
{
worksheet.Cells[totalRow + row - 1, col + 1].Value = dataTable.Rows[row][col].ToString();
}
}
package.Save();
}
}
private string PersistentFilePath(string fileName)
{
return Path.Combine(Application.persistentDataPath, $"{fileName}.xlsx");
}
private string StreamingAssetsPath(string fileName)
{
return Path.Combine(Application.streamingAssetsPath, $"Template\\{fileName}.xlsx");
}
}