.NET C# 读写Excel及转换DataTable

2024-06-14 1576阅读

目录

  • .NET C# 读写Excel及转换DataTable
    • 1. 依赖库
    • 2. Nuget包与版本
    • 3. ExcelUtil
      • 3.1 Excel sheet 转 DataTable
      • 3.2 Excel sheet 转 DataSet
      • 3.3 DataTable 转 Excel sheet
      • 3.4 DataSet 转 Excel
      • 3.5 私有方法

        .NET C# 读写Excel及转换DataTable

        1. 依赖库

        using NPOI.HSSF.UserModel;
        using NPOI.SS.UserModel;
        using NPOI.XSSF.UserModel;
        using System.Data;
        using System.IO;
        using System.Text;
        using System.Text.RegularExpressions;
        

        2. Nuget包与版本

        .NET C# 读写Excel及转换DataTable

        3. ExcelUtil

        3.1 Excel sheet 转 DataTable

        /// 
        /// Excel sheet 转 DataTable
        /// 
        /// Excel文件路径
        /// Sheet名称
        /// 结果DataTable
        public static DataTable? FromExcel(string excelFilePath, string sheetName)
        {
            DataTable dataTable = new DataTable(sheetName);
            IWorkbook wb = GetWorkbook(excelFilePath);
            if (wb == null)
            {
                return null;
            }
            ISheet ws = wb.GetSheet(sheetName);
            if (ws == null)
            {
                return null;
            }
            if (ws.LastRowNum  maxColumnNum)
                {
                    maxColumnNum = row.LastCellNum;
                }
            }
            IRow headerRow = ws.GetRow(0);
            for (int columnIdx = 0; columnIdx  
        

        3.4 DataSet 转 Excel

        /// 
        /// DataSet 转 Excel
        /// 
        /// Excel文件路径
        /// DataSet实例
        /// 转换结果
        public static bool ToExcel(string excelFilePath, DataSet dataSet)
        {
            bool allSuccess = true;
            foreach (DataTable dataTable in dataSet.Tables)
            {
                bool success = ToExcel(excelFilePath, dataTable);
                if (!success)
                {
                    allSuccess = false;
                }
            }
            return allSuccess;
        }
        

        3.5 私有方法

        private static IWorkbook GetWorkbook(string excelFilePath)
        {
            string extension = Path.GetExtension(excelFilePath);
            IWorkbook wb = null;
            FileStream fs = null;
            try
            {
                if (!File.Exists(excelFilePath))
                {
                    if (extension == ".xlsx" || extension == "xlsx")
                        wb = new XSSFWorkbook();
                    else if (extension == ".xls" || extension == "xls")
                        wb = new HSSFWorkbook();
                    else
                    {
                        AppLogger.Instance.Error($"错误文件类型{extension}!");
                        return null;
                    }
                }
                else
                {
                    fs = File.Open(excelFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    if (extension == ".xlsx" || extension == "xlsx")
                        wb = new XSSFWorkbook(fs);
                    else if (extension == ".xls" || extension == "xls")
                        wb = new HSSFWorkbook(fs);
                    else
                    {
                        AppLogger.Instance.Error($"错误文件类型{extension}!");
                        return null;
                    }
                }
                return wb;
            }
            catch (Exception ex)
            {
                AppLogger.Instance.Error("读取Excel文件失败!", ex);
                return null;
            }
            finally { if (fs != null) try { fs.Close(); } catch { } }
        }
        static object? GetCellValue(ICell cell)
        {
            if (cell == null)
                return null;
            switch (cell.CellType)
            {
                case CellType.Blank: //BLANK:  
                    return null;
                case CellType.Boolean: //BOOLEAN:  
                    return cell.BooleanCellValue;
                case CellType.Numeric: //NUMERIC:  
                    return cell.NumericCellValue;
                case CellType.String: //STRING:  
                    return cell.StringCellValue;
                case CellType.Error: //ERROR:  
                    return cell.ErrorCellValue;
                case CellType.Formula: //FORMULA:  
                default:
                    return "=" + cell.CellFormula;
            }
        }
        

        cell.NumericCellValue;

        case CellType.String: //STRING:

        return cell.StringCellValue;

        case CellType.Error: //ERROR:

        return cell.ErrorCellValue;

        case CellType.Formula: //FORMULA:

        default:

        return “=” + cell.CellFormula;

        }

        }

        
                        
                        
                        
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]