Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常

时间:2024-11-10 15:00:35
using ConsoleAppReadFileData.Model; using ExcelDataReader; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppReadFileData.FileRead { /// <summary> /// xls文件读取, /// 使用ExcelDataReader组件读取,不依赖图形组件,兼容Linux /// 不会报这个错误:System.TypeInitializationException : The type initializer for 'Gdip' threw an exception /// </summary> /// 2024-11-8 17:47:46,wanghaoli public class WantaiExcelRead2 { public Analysis_wt_View ReadExcel(string filePath) { #if DEBUG string dir = @"G:\work\test\11220241060"; //filePath = Path.Combine(dir, "2024-11-04_A_1_20241107.xls"); filePath = Path.Combine(dir, "2024-11-04_A_2_20241107.xls"); #endif // string filepath2 = "/data/WANTAI03595/2024-11-04_B_1_20241107.xls"; Analysis_wt_View analysis_Wt_View = new Analysis_wt_View(); try { using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read)) { var options = new ExcelReaderConfiguration() { //设置读取Excel文件的编码方式,例如GB2312,用于处理中文字符 FallbackEncoding = Encoding.GetEncoding("GB2312"), }; //1.打开xls文件 using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream, options)) { do { int rowIndex = 1;/* 行号*/ List<Analysis_wt_details> analysislist = new List<Analysis_wt_details>(); //循环行 while (reader.Read()) { if (rowIndex == 1) { //实验名称 analysis_Wt_View.Experiment_name = reader.GetString(1); } if (rowIndex == 2) { //实验时间 analysis_Wt_View.Experimental_time = reader.GetString(3); //仪器型号 analysis_Wt_View.DeviceModel = reader.GetString(5); //样本数量 analysis_Wt_View.Samples_num = Convert.ToInt32(reader.GetValue(1)); } if (rowIndex == 3) { //仪器编码 analysis_Wt_View.Device_code = reader.GetString(6); } if (rowIndex < 10) { goto ReadEnd; } if (rowIndex >= 4 && rowIndex < 11) { goto ReadEnd; } // Analysis_wt_details rowInfo = new Analysis_wt_details(); 读取每一行的数据 //for (int i = 0; i < reader.FieldCount; i++) //{ // //单元格数据 // var cellValue = reader.GetValue(i); // Console.Write(cellValue + "\t"); //} int cell_index = 0; Analysis_wt_details rowInfo = new Analysis_wt_details() { No = Convert.ToInt32(reader.GetValue(cell_index++)), TypeName = reader.GetString(cell_index++), SampleName = reader.GetString(cell_index++), SampleBarcode = reader.GetString(cell_index++), SampleLocation = reader.GetString(cell_index++), Detection = reader.GetString(cell_index++), TestItem = reader.GetString(cell_index++), PCR = reader.GetString(cell_index++), HBV = reader.GetString(cell_index++), HCV = reader.GetString(cell_index++), HIV = reader.GetString(cell_index++), IC = reader.GetString(cell_index++), DetectionResult = reader.GetString(cell_index++), ExperimentalRecords = reader.GetString(cell_index++) }; analysislist.Add(rowInfo); ReadEnd: rowIndex++; //Console.WriteLine();//行结束 } analysis_Wt_View.Analysislist = analysislist; //循环shell } while (reader.NextResult()); } } } catch (Exception ex) { LogHelpter.AddLog($"万泰读取excel异常={ex.ToString()}", null, "wantai_error"); } return analysis_Wt_View; } } }