首页 > 其他分享 >.Net5导入导出execl表格

.Net5导入导出execl表格

时间:2023-12-21 10:01:25浏览次数:34  
标签:execl cell SetValue worksheet GetValue break 导入 result Net5

.Net5导入导出execl表格

通过 using OfficeOpenXml 进行实现

using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using OfficeOpenXml;

namespace Sino
{
    /// <summary>
    /// 通用工具类
    /// </summary>
    public static class ExcelHelper
    {
        /// <summary>
        /// 导出
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="path"></param>
        /// <param name="data"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static bool ExportListToExcel<T>(string path, List<T> data, Dictionary<string, string> headers = null)
        {
            FileInfo file = new FileInfo(path);
            if (file.Exists)
            {
                file.Delete();
                file = new FileInfo(path);
            }

            using (var package = new ExcelPackage(file))
            {
                var worksheet = package.Workbook.Worksheets.Add("sheet1");
                worksheet.Cells.LoadFromCollection(data, true);

                if (headers != null)
                {
                    for (int i = 0; i < worksheet.Dimension.End.Column; i++)
                    {
                        var name = worksheet.Cells[1, i + 1]?.Value?.ToString();
                        if (string.IsNullOrEmpty(name) == false && headers.ContainsKey(name))
                        {
                            worksheet.Cells[1, i + 1].Value = headers[name];
                        }
                    }
                }
                worksheet.DefaultColWidth = 20;
                package.Save();
            }
            return true;
        }

        /// <summary>
        /// 导入
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="existingFile"></param>
        /// <param name="headers"></param>
        /// <returns></returns>
        public static List<T> LoadFromExcel<T>(FileInfo existingFile, Dictionary<string, string> headers = null) where T : new()
        {
            List<T> resultList = new List<T>();
            Dictionary<string, int> dictHeader = new Dictionary<string, int>();

            using (ExcelPackage package = new ExcelPackage(existingFile))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];

                int colStart = worksheet.Dimension.Start.Column;  //工作区开始列
                int colEnd = worksheet.Dimension.End.Column;       //工作区结束列
                int rowStart = worksheet.Dimension.Start.Row;       //工作区开始行号
                int rowEnd = worksheet.Dimension.End.Row;       //工作区结束行号

                //将每列标题添加到字典中
                for (int i = colStart; i <= colEnd; i++)
                {
                    dictHeader[worksheet.Cells[rowStart, i].Value.ToString()] = i;
                }

                List<PropertyInfo> propertyInfoList = new List<PropertyInfo>(typeof(T).GetProperties());
                string headerName = "";
                for (int row = rowStart + 1; row <= rowEnd; row++)
                {
                    T result = new T();
                    //为对象T的各属性赋值
                    foreach (PropertyInfo p in propertyInfoList)
                    {
                        try
                        {
                            headerName = p.Name;
                            //导入的时候如果替换过header属性则需要替换过来在复给类值
                            if (headers != null)
                            {
                                if (headers.ContainsKey(headerName))
                                    headerName = headers[headerName];
                            }
                            ExcelRange cell = worksheet.Cells[row, dictHeader[headerName]]; //与属性名对应的单元格

                            if (cell.Value == null)
                                continue;
                            switch (p.PropertyType.Name.ToLower())
                            {
                                case "string":
                                    p.SetValue(result, cell.GetValue<String>());
                                    break;
                                case "int16":
                                    p.SetValue(result, cell.GetValue<Int16>());
                                    break;
                                case "int32":
                                    p.SetValue(result, cell.GetValue<Int32>());
                                    break;
                                case "int64":
                                    p.SetValue(result, cell.GetValue<Int64>());
                                    break;
                                case "decimal":
                                    p.SetValue(result, cell.GetValue<Decimal>());
                                    break;
                                case "double":
                                    p.SetValue(result, cell.GetValue<Double>());
                                    break;
                                case "datetime":
                                    p.SetValue(result, cell.GetValue<DateTime>());
                                    break;
                                case "boolean":
                                    p.SetValue(result, cell.GetValue<Boolean>());
                                    break;
                                case "byte":
                                    p.SetValue(result, cell.GetValue<Byte>());
                                    break;
                                case "char":
                                    p.SetValue(result, cell.GetValue<Char>());
                                    break;
                                case "single":
                                    p.SetValue(result, cell.GetValue<Single>());
                                    break;
                                default:
                                    break;
                            }
                        }
                        catch (KeyNotFoundException ex)
                        { }
                    }
                    resultList.Add(result);
                }
            }
            return resultList;
        }



    }
}

 

标签:execl,cell,SetValue,worksheet,GetValue,break,导入,result,Net5
From: https://www.cnblogs.com/OneSeting/p/17918347.html

相关文章

  • ArcGIS镶嵌数据集:数据集建立、图像导入与栅格数值显示范围修改
      本文介绍基于ArcMap软件,建立镶嵌数据集(MosaicDatasets)、导入栅格图像数据,并调整像元数值范围的方法。  镶嵌数据集(MosaicDatasets)是一种用以管理、显示、共享大量栅格数据的手段,在GIS领域具有较多的应用场景。本文就在常见的ArcMap软件中,进行镶嵌数据集的新建,在其中导入栅......
  • openGauss学习笔记-166 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STD
    openGauss学习笔记-166openGauss数据库运维-备份与恢复-导入数据-使用COPYFROMSTDIN导入数据-从MY向openGauss数据库进行数据迁移166.1示例2:从MY向openGauss数据库进行数据迁移下面示例演示如何通过CopyManager从MY向openGauss数据库进行数据迁移的过程。importjava.io.St......
  • openGauss学习笔记-167 openGauss 数据库运维-备份与恢复-导入数据-使用gsql元命令导
    openGauss学习笔记-167openGauss数据库运维-备份与恢复-导入数据-使用gsql元命令导入数据gsql工具提供了元命令\copy进行数据导入。167.1\copy命令\copy命令格式以及说明参见表1\copy元命令说明。表1\copy元命令说明语法说明\copy{table[(column_list)......
  • 导入一个没有合并项 的excel表格
    导入excel///<summary>///导入设计地层单元数据-量纲设置///</summary>///<paramname="planId">方案ID</param>///<paramname="lists">录入基本信息</param>///<paramname="errorM......
  • beanshell导入java文件
    beanshell导入java文件beanshell可以读取class格式的文件步骤:    a、添加BeanShell预处理程序    b、请求调用   beanshell可以读取java格式的文件步骤:    a、添加BeanShell预处理程序    b、请求调用  ......
  • 导入jar包
    导入jar包(MD5加密包)1、直接生成选择函数助手,选择__digest,填写算法和密码,点击生成 2、开发直接给的jar包步骤:a、从测试计划导入jar包       b、添加beanShell预处理程序      c、http请求调用   3、从jmeter的lib\ext目录读取jar包......
  • 爬虫-今日头条我的收藏-增量式导入到mongodb(三)
    背景:续接前文,当我们有了原始数据之后,自然会想如何利用这些数据。这些文件数据都是json格式,打开一个文本文件眼睛都要看花。所以想把这些数据导入到对应的数据库中,市面上几乎所有数据库都支持json格式存储。随着时间的推移,用户不断有新的收藏,这样就不断产生新的收藏文件。需要不......
  • 如何解决excel导入大文件报错
    开发过程中我们经常会遇到Excel导入大文件报错的问题,经过不断的摸索,我发现我们可以利用缓存区来实现大文件的上传,下面是我本人封装的一个实现工具,有兴趣的小伙伴可以看看,希望能对大家有所帮助!publicclassExcelImportBigDataUtil{/***每次放入缓冲区最大行数......
  • openGauss学习笔记-165 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STD
    openGauss学习笔记-165openGauss数据库运维-备份与恢复-导入数据-使用COPYFROMSTDIN导入数据-通过本地文件导入导出数据165.1示例1:通过本地文件导入导出数据在使用JAVA语言基于openGauss进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者......
  • python中导入模块/包的几种方式
    一、模块的导入方式模块就是.py类型的Python文件导入时不需要.py后缀,直接导入文件名即可1.利用import直接导入:语法:importmodule_name使用方式:module_name.class_name或者module.func_name2.利用import导入模块并设置一个别名语法:importmodule_nameasXXX使用方式:XXX.cl......