当前位置: 首页 > article >正文

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

组件,可通过nuget安装,直接搜名字:
ExcelDataReader
在这里插入图片描述

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



    }
}


http://www.kler.cn/a/387141.html

相关文章:

  • 35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具
  • 【大数据学习 | kafka高级部分】kafka的kraft集群
  • LLMs:MindFormers的简介、安装和使用方法、案例应用
  • 【C++】 C++游戏设计---五子棋小游戏
  • Go语言中的`io.Pipe`:实现进程间通信的利器
  • 【Linux系统编程】第四十五弹---线程互斥:从问题到解决,深入探索互斥量的原理与实现
  • 【51单片机输出50ms与200ms方波】
  • Mysql命令大全
  • C#实现在windows上实现指定句柄窗口的指定窗口坐标点击鼠标左键和右键的详细情况
  • 【功能介绍】信创终端系统上各WPS版本的授权差异
  • ReactOS 4.2 OBJECT_TYPE_INITIALIZERj结构体的实现
  • Go 中的泛型,日常如何使用
  • C#里怎么样判断一个数是偶数还是奇数
  • 如何避免消息的重复消费问题?(消息消费时的幂等性)
  • 架构师备考-概念背诵(软件工程)
  • 数据结构——链表(带有头节点)
  • 共享汽车管理:SpringBoot技术实现与优化
  • CulturalBench :一个旨在评估大型语言模型在全球不同文化背景下知识掌握情况的基准测试数据集
  • 重学 Android 自定义 View 系列(三):自定义步数进度条
  • 重新安装VMware tools为灰色,linux无法安装VMware tools
  • go语言中的接口含义和用法详解
  • 数据结构:顺序表(动态顺序表)
  • 使用Pytorch Geometric建立异构图HeteroData数据集
  • CycleGAN算法简述
  • 15分钟学 Go 第 40 天:使用ORM库
  • AnaTraf | 网络性能监控系统保障音视频质量的秘籍