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;
        }



    }
}
相关推荐
Roc.Chang2 分钟前
Ubuntu 下 VLC 无法启动(Segmentation fault)终极解决方案
linux·ubuntu·vlc·媒体播放
不绝1913 分钟前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#
大鹏说大话19 分钟前
告别 MSBuild 脚本混乱:用 C# 和 Nuke 构建清晰、可维护的现代化构建系统
开发语言·c#
松涛和鸣29 分钟前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
简单中的复杂1 小时前
【避坑指南】RK3576 Linux SDK 编译:解决 Buildroot 卡死在 host-gcc-final 的终极方案
linux·嵌入式硬件
CodeKwang1 小时前
Qt实战:简易Excel表格 | 附完整源码
qt·excel·qtabwidget·qt控件
wVelpro1 小时前
如何在Pycharm 2025.3 版本实现虚拟环境“Make available to all projects”
linux·ide·pycharm
czhc11400756632 小时前
通信 28
c#
程序员老舅2 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
雨中风华2 小时前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos