ShanxiKnowledgeBase/SXElectricalInspection/Assets/YL/Script/ExcelReader.cs

112 lines
3.5 KiB
C#

using UnityEngine;
using System.IO;
using OfficeOpenXml;
using System.Collections.Generic;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using System;
public class ExcelReader : MonoBehaviour
{
public List<WorkData> workDatas = new List<WorkData>();
private void Awake()
{
}
void Start()
{
//string filePath = Path.Combine(Application.streamingAssetsPath, "数据表.xlsx");
//ReadExcelFile(filePath, "低压公配变");
//for (int i = 0; i < workDatas.Count; i++)
//{
// if (workDatas[i].Tip.Contains("工单详情"))
// {
// for (int j = 0; j < workDatas[i].workOrderDatas.Count; j++)
// {
// Debug.LogError(workDatas[i].workOrderDatas[j].workOrderNumTip + " " + workDatas[i].workOrderDatas[j].workOrderNum);
// }
// }
//}
}
public void ReadExcelFile(string filePath, string name)
{
// 加载文件
FileInfo file = new FileInfo(filePath);
// 检查文件是否存在
if (!file.Exists)
{
Debug.LogError("文件不存在: " + filePath);
return;
}
// 读取文件
using (ExcelPackage package = new ExcelPackage(file))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[name]; // 假设只有一个工作表
// 获取表格有多少列和行
int columns = worksheet.Dimension.Columns;
int rows = worksheet.Dimension.Rows;
//Debug.Log("共有:" + columns + "列 " + rows + "行");
// 从第二行开始读取数据(假设第一行是表头)
for (int row = 1; row <= 20; row++)
{
for (int col = 1; col <= columns; col++)
{
// 获取单元格的值
string cellValue = worksheet.Cells[row, col].Value?.ToString();
if (!string.IsNullOrEmpty(cellValue))
{
////Debug.Log("第" + row + "行,第" + col + "列的值为:" + cellValue);
if (cellValue.Contains("&"))
{
AddExcelPackage(worksheet, row, col, columns);
}
}
}
}
}
}
public void AddExcelPackage(ExcelWorksheet worksheet, int row, int col, int colMax)
{
WorkData workData = new WorkData();
workData.Tip = worksheet.Cells[row, col].Value?.ToString();
List<WorkOrderData> workOrderDatas = new List<WorkOrderData>();
for (int i = col; i < colMax; i++)
{
if (worksheet.Cells[row + 1, i].Value?.ToString() != "*")
{
WorkOrderData workOrderData = new WorkOrderData();
workOrderData.workOrderNumTip = worksheet.Cells[row + 1, i].Value?.ToString();
workOrderData.workOrderNum = worksheet.Cells[row + 2, i].Value?.ToString();
if (!string.IsNullOrEmpty(workOrderData.workOrderNumTip) || !string.IsNullOrEmpty(workOrderData.workOrderNum))
{
workOrderDatas.Add(workOrderData);
}
}
}
workData.workOrderDatas = workOrderDatas;
workDatas.Add(workData);
}
}
/// <summary>
/// 工单详情,第二行和第三行的所有数据
/// </summary>
[Serializable]
public class WorkOrderData
{
public string workOrderNumTip;
public string workOrderNum;
}
[Serializable]
public class WorkData
{
public string Tip;
public List<WorkOrderData> workOrderDatas;
}