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

组件,可通过nuget安装,直接搜名字:

ExcelDataReader

csharp 复制代码
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;
        }



    }
}
相关推荐
心平气和量大福大2 小时前
C#-WPF-布局-Grid
c#·wpf·visual studio
TeamDev3 小时前
JxBrowser 9.3.1 版本发布啦!
java·前端·javascript·c#·混合应用·jxbrowser·浏览器控件
jsons14 小时前
autofs挂载
linux·服务器·网络
liwulin05065 小时前
【ollama】自定义结构化输出
linux·前端·数据库·ollama
gs801405 小时前
【实战】记一次 Linux 服务器入侵排查:grok-agent 后门木马深度剖析与彻底清理
linux·运维·服务器
格林威5 小时前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
时空无限6 小时前
vllm 大模型启动缓存相关环境变量 export
linux·缓存·vllm
Echo_cy_6 小时前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
Arbori_262156 小时前
Rider 调试 VisionMaster C# 用户脚本
c#·visionmaster
ShineWinsu6 小时前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket