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



    }
}
相关推荐
黄金小码农3 小时前
C# 2024/12/26 周四
c#
大G哥3 小时前
pytest自动化测试数据驱动yaml/excel/csv/json
json·excel·pytest
小奥超人3 小时前
Excel粘贴复制不完整的原因以及解决方法
windows·经验分享·microsoft·excel·办公技巧
code04号3 小时前
python脚本:批量提取excel数据
开发语言·python·excel
007php0074 小时前
linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
linux·运维·服务器·ubuntu·centos·php·ai编程
djykkkkkk4 小时前
ubuntu编译遇到的问题
linux·运维·ubuntu
编程乐趣4 小时前
Bogus:.NET的假数据生成利器
.net
qq_429856575 小时前
linux 查看服务是否开机自启动
linux·运维·服务器
坐井观老天5 小时前
使用 C# 测量程序运行消耗的的时间
开发语言·c#
小哈龙5 小时前
c++ 类似与c# 线程 AutoResetEvent 和 ManualResetEvent的实现
c++·c#·多线程