导入Excel方式汇总--第二种

第二种:利用 Npoi 插件,只需要在项目里引用DLL即可,无需在服务器安装任何插件。

 

/// <summary>
        /// 根据路径读取Excel放入DataTable里
        /// </summary>
        /// <param name="path"></param>
        /// <param name="error"></param>
        /// <returns></returns>
        public DataTable ExcelToDS(string path,out string error)
        {
            if (System.IO.Path.GetExtension(path) == ".xls")
            {
                return Excel2003(path,out error);
            }
            else
            {
                return Excel2007(path,out error);
            }
        }

        #region 导入03

        private DataTable Excel2003(string path, out string error)
        {
            error = "";
            DataTable dt = new DataTable();
            try
            {
                using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);
                    ISheet sheet = hssfworkbook.GetSheetAt(0);

                    //表头  
                    IRow header = sheet.GetRow(sheet.FirstRowNum);
                    List<int> columns = new List<int>();
                    for (int i = 0; i < header.LastCellNum; i++)
                    {
                        object obj = GetValueTypeForXLS(header.GetCell(i) as HSSFCell);
                        if (obj == null || obj.ToString() == string.Empty)
                        {
                            dt.Columns.Add(new DataColumn("Columns" + i.ToString()));
                            //continue;  
                        }
                        else
                            dt.Columns.Add(new DataColumn(obj.ToString()));
                        columns.Add(i);
                    }
                    //数据  
                    for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                    {
                        DataRow dr = dt.NewRow();
                        bool hasValue = false;
                        foreach (int j in columns)
                        {
                            dr[j] = GetValueTypeForXLS(sheet.GetRow(i).GetCell(j) as HSSFCell);
                            if (dr[j] != null && dr[j].ToString() != string.Empty)
                            {
                                hasValue = true;
                            }
                            if (j == 26 || j == 27 && !string.IsNullOrEmpty(dr[2].ToString()))//开始时间,结束时间
                            {
                                if (!IsDate(dr[j].ToString()))
                                {
                                    error = "时间格式不正确,请输入正确的时间格式“YYYY/MM/DD”";
                                }
                            }
                        }
                        if (hasValue)
                        {
                            dt.Rows.Add(dr);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            return dt;  
        }
        /// <summary>  
        /// 获取单元格类型(xls)  
        /// </summary>  
        /// <param name="cell"></param>  
        /// <returns></returns>  
        private static object GetValueTypeForXLS(HSSFCell 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:  
                    if (HSSFDateUtil.IsCellDateFormatted(cell))
                    {
                        return cell.DateCellValue;
                    }
                    else
                    {
                        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;
            }
        }

        #endregion

        #region 导入07
        private DataTable Excel2007(string path, out string error)
        {
            error = "";
            DataTable dt = new DataTable();
            try
            {
                using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    XSSFWorkbook xssfworkbook = new XSSFWorkbook(fs);
                    ISheet sheet = xssfworkbook.GetSheetAt(0);

                    //表头  
                    IRow header = sheet.GetRow(sheet.FirstRowNum);
                    List<int> columns = new List<int>();
                    for (int i = 0; i < header.LastCellNum; i++)
                    {
                        object obj = GetValueTypeForXLSX(header.GetCell(i) as XSSFCell);
                        if (obj == null || obj.ToString() == string.Empty)
                        {
                            dt.Columns.Add(new DataColumn("Columns" + i.ToString()));
                            //continue;  
                        }
                        else
                            dt.Columns.Add(new DataColumn(obj.ToString()));
                        columns.Add(i);
                    }
                    //数据  
                    for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                    {
                        DataRow dr = dt.NewRow();
                        bool hasValue = false;
                        foreach (int j in columns)
                        {
                            dr[j] = GetValueTypeForXLSX(sheet.GetRow(i).GetCell(j) as XSSFCell);
                            if (dr[j] != null && dr[j].ToString() != string.Empty)
                            {
                                hasValue = true;
                            }
                            if ((j == 26 || j == 27) && !string.IsNullOrEmpty(dr[2].ToString()))//开始时间,结束时间
                            {
                                if (!IsDate(dr[j].ToString()))
                                {
                                    error = "时间格式不正确,请输入正确的时间格式“YYYY/MM/DD”";
                                }
                            }
                        }
                        if (hasValue)
                        {
                            dt.Rows.Add(dr);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            return dt;  
        }

        /// <summary>  
        /// 获取单元格类型(xlsx)  
        /// </summary>  
        /// <param name="cell"></param>  
        /// <returns></returns>  
        private static object GetValueTypeForXLSX(XSSFCell 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:  
                    if (HSSFDateUtil.IsCellDateFormatted(cell))
                    {
                        return cell.DateCellValue;
                    }
                    else
                    {
                        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;
            }
        }
        #endregion

        
        /// <summary>
        /// 判断输入是否为日期类型
        /// </summary>
        /// <param name="s">待检查数据</param>
        /// <returns></returns>
        public static bool IsDate(string s)
        {
            if (s == null)
            {
                return false;
            }
            else
            {
                try
                {
                    DateTime d = DateTime.Parse(s);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在.NET中,可以通过使用Microsoft.Office.Interop.Excel命名空间中的类来导入、导出和操作Excel。以下是一个简单的示例: 1. 导入Excel文件 ```csharp using Excel = Microsoft.Office.Interop.Excel; // 创建Excel对象 Excel.Application excel = new Excel.Application(); // 打开Excel文件 Excel.Workbook workbook = excel.Workbooks.Open(@"C:\example.xlsx"); // 获取第一个工作表 Excel.Worksheet worksheet = workbook.Sheets[1]; // 读取单元格数据 string value = worksheet.Cells[1, 1].Value; // 关闭Excel对象 workbook.Close(); excel.Quit(); ``` 2. 导出数据到Excel文件 ```csharp using Excel = Microsoft.Office.Interop.Excel; // 创建Excel对象 Excel.Application excel = new Excel.Application(); // 创建工作簿 Excel.Workbook workbook = excel.Workbooks.Add(); // 获取第一个工作表 Excel.Worksheet worksheet = workbook.Sheets[1]; // 写入数据到单元格 worksheet.Cells[1, 1].Value = "Hello"; worksheet.Cells[1, 2].Value = "World"; // 保存Excel文件 workbook.SaveAs(@"C:\example.xlsx"); // 关闭Excel对象 workbook.Close(); excel.Quit(); ``` 3. 操作Excel文件 ```csharp using Excel = Microsoft.Office.Interop.Excel; // 创建Excel对象 Excel.Application excel = new Excel.Application(); // 打开Excel文件 Excel.Workbook workbook = excel.Workbooks.Open(@"C:\example.xlsx"); // 获取第一个工作表 Excel.Worksheet worksheet = workbook.Sheets[1]; // 插入行 worksheet.Rows[1].Insert(); // 删除列 worksheet.Columns[1].Delete(); // 保存Excel文件 workbook.Save(); // 关闭Excel对象 workbook.Close(); excel.Quit(); ``` 注意:使用Microsoft.Office.Interop.Excel需要安装Microsoft Office,并且可能会在不同的系统上产生不同的结果。另外,操作Excel可能会影响Excel文件中的宏和格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值