.Net工具类(一).epplus读取Excel工具类

.Net工具类(一).epplus读取Excel工具类

日常开发中经常需要读取一些报表的Excel文件,故将常用的方法封装为工具类。

该工具类默认读取第一个工作簿,并将第一行设置为datatable的标题,自动识别行列的数据边界

    /// <summary>
    ///  使用EPPlus 第三方的组件读取Excel
    /// </summary>
    public class EPPlusHelper
    {
        private static string GetString(object obj)
        {
            try
            {
                return obj?.ToString()?.Trim() ?? "";
            }
            catch
            {
                return "";
            }
        }

        /// <summary>
        /// 将指定的Excel的文件转换成DataTable,默认将第一行设置为datatable的标题
        /// </summary>
        /// <param name="fullFielPath"></param>
        /// <param name="sheetIndex"></param>
        /// <returns></returns>
        public static DataTable WorksheetToTable(string fullFilePath, int sheetIndex)
        {
            try
            {
                FileInfo existingFile = new FileInfo(fullFilePath);
                //指定EPPlus使用非商业证书
                ExcelPackage package = new ExcelPackage(existingFile);
                ExcelWorksheet worksheet = package.Workbook.Worksheets[sheetIndex];//选定 指定页

                return WorksheetToTable(worksheet);
            }
            catch (Exception ex)
            {
                throw new Exception($"读取Excel文件出现异常,异常信息:{ex.Message}");
            }
        }

        /// <summary>
        /// 将worksheet转成datatable
        /// </summary>
        /// <param name="worksheet"></param>
        /// <returns></returns>
        public static DataTable WorksheetToTable(ExcelWorksheet worksheet)
        {
            //获取worksheet的行数
            int rows = worksheet.Dimension.End.Row;
            //获取worksheet的列数
            int cols = worksheet.Dimension.End.Column;

            DataTable dt = new DataTable(worksheet.Name);
            DataRow dr = null;
            for (int i = 1; i <= rows; i++)
            {
                if (i > 1)
                    dr = dt.NewRow();

                for (int j = 1; j <= cols; j++)
                {
                    //默认将第一行设置为datatable的标题
                    if (i == 1)
                        dt.Columns.Add(GetString(worksheet.Cells[i, j].Value));
                    //剩下的写入datatable
                    else
                        dr[j - 1] = GetString(worksheet.Cells[i, j].Value);
                }
                if (i > 1)
                {
                    var drValue = string.Join("", dr.ItemArray).Trim();
                    if (!string.IsNullOrWhiteSpace(drValue))
                        dt.Rows.Add(dr);
                }
            }
            return dt;
        }
    }
posted @ 2022-03-16 18:10  热烈的少年  阅读(763)  评论(0)    收藏  举报