C# .NET Excel导入导出源码Demo

       此篇博客是C# .NET Excel导入导出源码Demo,符合一些项目对数据的处理,里面包含有需要引用的NPOI的文件和Sql Server 脚本文件,简单实用,通俗易懂,NPOI导入导出 Excel操作 。由于CSDN胡乱降低我资源的积分所以需要源码的可以联系[email protected]

第一种导入导出方式:

后台代码:

        //导出学生信息
        protected void btn_Export_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable MyDt = new DataTable();
                DataColumn dc = new DataColumn();
                dc = MyDt.Columns.Add("id", typeof(string));         //标识id
                dc = MyDt.Columns.Add("name", typeof(string));       //姓名
                dc = MyDt.Columns.Add("age", typeof(string));        //年龄
                dc = MyDt.Columns.Add("sex", typeof(string));        //性别
                dc = MyDt.Columns.Add("sort", typeof(string));       //排序

                var stu_info = db.s_studentinfo.Where(x => x.id > 0);
                foreach (var item in stu_info)
                {
                    DataRow dr = MyDt.NewRow();
                    //第一种
                    //dr[0] = item.id.ToString();       //标识id
                    //dr[1] = item.name.ToString();     //姓名
                    //dr[2] = item.age.ToString();      //年龄
                    //dr[3] = item.sex.ToString();      //性别
                    //dr[4] = item.sort.ToString();     //排序
                    //第二种
                    dr["id"] = item.id.ToString();       //标识id
                    dr["name"] = item.name.ToString();   //姓名
                    dr["age"] = item.age.ToString();     //年龄
                    dr["sex"] = item.sex.ToString();     //性别
                    dr["sort"] = item.sort.ToString();   //排序
                    MyDt.Rows.Add(dr);
                }
                string[] str = new string[] { "标识id", "姓名", "年龄", "性别", "排序" };
                HSSFWorkbook workbook = DownExcel(str, MyDt);
                Response.ContentType = "application/ms-excel";
                string name = "学生信息表-" + DateTime.Now.ToString();
                Response.AppendHeader("Content-disposition", "attachment;filename=" + name + ".xls");
                workbook.Write(Response.OutputStream);
            }
            catch (Exception)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('导出失败');</script>");
            }
        }

        #region 下载Excel ================================================================
        /// <summary>
        /// 下载Excel
        /// </summary>
        /// <param name="s">excel第一行的数据(列名)</param>
        /// <param name="dt">table</param>
        /// <returns></returns>
        public HSSFWorkbook DownExcel(string[] s, DataTable dt)
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("sheet1");
            for (int i = 0; i < s.Length; i++)
            {
                if (i == 0)
                {
                    sheet.CreateRow(0).CreateCell(i).SetCellType(CellType.STRING);
                    sheet.CreateRow(0).CreateCell(i).SetCellValue(s[i]);
                }
                else
                {
                    sheet.GetRow(0).CreateCell(i).SetCellType(CellType.STRING);
                    sheet.GetRow(0).CreateCell(i).SetCellValue(s[i]);
                }
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < s.Length; j++)
                {
                    if (j == 0)
                    {
                        sheet.CreateRow(i + 1).CreateCell(j).SetCellType(CellType.STRING);
                        sheet.CreateRow(i + 1).CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    }
                    else
                    {
                        sheet.GetRow(i + 1).CreateCell(j).SetCellType(CellType.STRING);
                        sheet.GetRow(i + 1).CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    }
                }
            }
            return workbook;
        }
        #endregion

        //导入学生信息
        protected void btn_Import_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.FileUpload.HasFile)
                {
                    string ext = GetFileExt(FileUpload.FileName);
                    string path = Server.MapPath("/upload/");
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }
                    path = path + GetRamCode() + "." + ext;
                    this.FileUpload.PostedFile.SaveAs(path); //上传文件     
                    DataTable dt = NPOIHelper.Import(path);
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (!string.IsNullOrEmpty(dr["姓名"].ToString().Trim()))
                        {
                            string name = dr["姓名"].ToString().Trim();
                            s_studentinfo model = db.s_studentinfo.FirstOrDefault(x => x.name == name);
                            if (model != null)
                            {
                                model.name = dr["姓名"].ToString().Trim();            //姓名
                                model.age = Convert.ToInt32(dr["年龄"].ToString());   //年龄
                                model.sex = dr["性别"].ToString();                    //性别
                                model.sort = Convert.ToInt32(dr["排序"].ToString());  //排序
                                db.SaveChanges();
                            }
                            else
                            {
                                model = new s_studentinfo();
                                model.name = dr["姓名"].ToString().Trim();            //姓名
                                model.age = Convert.ToInt32(dr["年龄"].ToString());   //年龄
                                model.sex = dr["性别"].ToString();                    //性别
                                model.sort = Convert.ToInt32(dr["排序"].ToString());  //排序
                                db.s_studentinfo.Add(model);
                                db.SaveChanges();
                            }
                        }
                    }
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('导入成功');</script>");
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请选择Exel文件!');</script>");
                }
            }
            catch (Exception ex)
            {
                Response.Write("<script>alert('" + ex.Message + "');</script>");
                return;
            }
        }

        /// <summary>
        /// 返回文件扩展名,不含“.”
        /// </summary>
        /// <param name="_filepath">文件全名称</param>
        /// <returns>string</returns>
        public static string GetFileExt(string _filepath)
        {
            if (string.IsNullOrEmpty(_filepath))
            {
                return "";
            }
            if (_filepath.LastIndexOf(".") > 0)
            {
                return _filepath.Substring(_filepath.LastIndexOf(".") + 1); //文件扩展名,不含“.”
            }
            return "";
        }

        #region 生成日期随机码
        /// <summary>
        /// 生成日期随机码
        /// </summary>
        /// <returns></returns>
        public static string GetRamCode()
        {
            #region
            return DateTime.Now.ToString("yyyyMMddHHmmssffff");
            #endregion
        }
        #endregion

NPOIHelper类:

        #region 根据文档返回datatable
        /// <summary>
        /// Excel文件导成Datatable
        /// </summary>
        /// <param name="strFilePath">Excel文件目录地址</param>
        /// <param name="strTableName">Datatable表名</param>
        /// <param name="iSheetIndex">Excel sheet index</param>
        /// <returns></returns>
        public static DataTable XlSToDataTable(string strFilePath, string strTableName, int iSheetIndex)
        {
            string strExtName = Path.GetExtension(strFilePath);
            DataTable dt = new DataTable();
            if (!string.IsNullOrEmpty(strTableName))
            {
                dt.TableName = strTableName;
            }
            if (strExtName.Equals(".xls") || strExtName.Equals(".xlsx"))
            {
                using (FileStream file = new FileStream(strFilePath, FileMode.Open, FileAccess.Read))
                {
                    HSSFWorkbook workbook = new HSSFWorkbook(file);
                    ISheet sheet = workbook.GetSheetAt(iSheetIndex);
                    //列头
                    foreach (ICell item in sheet.GetRow(sheet.FirstRowNum).Cells)
                    {
                        string[] itemArr = item.ToString().Split('-');
                        if (itemArr.Length == 2)
                        {
                            string text = itemArr[0];
                            text = text.Replace("{", "");
                            text = text.Replace("}", "");
                            dt.Columns.Add(text, typeof(string));
                        }
                        else
                        {
                            dt.Columns.Add("", typeof(string));
                        }
                    }
                    //写入内容
                    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                    while (rows.MoveNext())
                    {
                        IRow row = (HSSFRow)rows.Current;
                        if (row.RowNum == sheet.FirstRowNum)
                        {
                            continue;
                        }

                        DataRow dr = dt.NewRow();
                        foreach (ICell item in row.Cells)
                        {
                            switch (item.CellType)
                            {
                                case CellType.BOOLEAN:
                                    dr[item.ColumnIndex] = item.BooleanCellValue;
                                    break;
                                case CellType.ERROR:
                                    dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
                                    break;
                                case CellType.FORMULA:
                                    switch (item.CachedFormulaResultType)
                                    {
                                        case CellType.BOOLEAN:
                                            dr[item.ColumnIndex] = item.BooleanCellValue;
                                            break;
                                        case CellType.ERROR:
                                            dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
                                            break;
                                        case CellType.NUMERIC:
                                            if (DateUtil.IsCellDateFormatted(item))
                                            {
                                                dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
                                            }
                                            else
                                            {
                                                dr[item.ColumnIndex] = item.NumericCellValue;
                                            }
                                            break;
                                        case CellType.STRING:
                                            string str = item.StringCellValue;
                                            if (!string.IsNullOrEmpty(str))
                                            {
                                                dr[item.ColumnIndex] = str.ToString();
                                            }
                                            else
                                            {
                                                dr[item.ColumnIndex] = null;
                                            }
                                            break;
                                        case CellType.Unknown:
                                        case CellType.BLANK:
                                        default:
                                            dr[item.ColumnIndex] = string.Empty;
                                            break;
                                    }
                                    break;
                                case CellType.NUMERIC:
                                    if (DateUtil.IsCellDateFormatted(item))
                                    {
                                        dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
                                    }
                                    else
                                    {
                                        dr[item.ColumnIndex] = item.NumericCellValue;
                                    }
                                    break;
                                case CellType.STRING:
                                    string strValue = item.StringCellValue;
                                    if (!string.IsNullOrEmpty(strValue))
                                    {
                                        dr[item.ColumnIndex] = strValue.ToString();
                                    }
                                    else
                                    {
                                        dr[item.ColumnIndex] = null;
                                    }
                                    break;
                                case CellType.Unknown:
                                case CellType.BLANK:
                                default:
                                    // dr[item.ColumnIndex] = string.Empty;
                                    break;
                            }
                        }
                        dt.Rows.Add(dr);
                    }
                }
            }

            return dt;
        }
        #endregion

        /// <summary>读取excel
        /// 默认第一行为标头
        /// </summary>
        /// <param name="strFileName">excel文档路径</param>
        /// <returns></returns>
        public static DataTable Import(string strFileName)
        {
            DataTable dt = new DataTable();
            HSSFWorkbook hssfworkbook;
            using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                try
                {
                    hssfworkbook = new HSSFWorkbook(file);
                }
                catch (Exception err)
                {
                    hssfworkbook = new HSSFWorkbook(file);
                }
            }
            HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

            HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;

            for (int j = 0; j < cellCount; j++)
            {
                HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }

            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                HSSFRow row = (HSSFRow)sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();

                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        dataRow[j] = row.GetCell(j).ToString();
                }

                dt.Rows.Add(dataRow);
            }
            return dt;
        }

第二种导出方式:

后台代码:

        //导出学生信息
        protected void btn_Export_Click(object sender, EventArgs e)
        {
            string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls"; // 文件名称
            string urlPath = "upload/execl/" + fileName; // 文件下载的URL地址,供给前台下载
            string filePath = HttpContext.Current.Server.MapPath("\\" + urlPath); // 文件路径

            // 1.检测是否存在文件夹,若不存在就建立个文件夹
            string DirectoryName = Path.GetDirectoryName(filePath);
            if (!Directory.Exists(DirectoryName))
            {
                Directory.CreateDirectory(DirectoryName);
            }
            try
            {
                DataTable dt = new DataTable();
                DataColumn dc = new DataColumn();
                dc = dt.Columns.Add("id", typeof(string));         //标识id
                dc = dt.Columns.Add("name", typeof(string));       //姓名
                dc = dt.Columns.Add("age", typeof(string));        //年龄
                dc = dt.Columns.Add("sex", typeof(string));        //性别
                dc = dt.Columns.Add("sort", typeof(string));       //排序
                var stu_info = db.s_studentinfo.Where(x => x.id > 0);
                foreach (var item in stu_info)
                {
                    DataRow dr = dt.NewRow();
                    dr["id"] = item.id.ToString();       //标识id
                    dr["name"] = item.name.ToString();   //姓名
                    dr["age"] = item.age.ToString();     //年龄
                    dr["sex"] = item.sex.ToString();     //性别
                    dr["sort"] = item.sort.ToString();   //排序
                    dt.Rows.Add(dr);
                }
                string[] s = new string[] { "标识id", "姓名", "年龄", "性别", "排序" };
                HSSFWorkbook workbook = DownExcel(s, dt);
                FileStream file = new FileStream(filePath, FileMode.Create);
                workbook.Write(file);
                file.Close();
                string A = urlPath;
            }
            catch (Exception)
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('导出失败');</script>");
            }
        }

        #region 生成Excel ================================================================
        /// <summary>
        /// 生成Excel
        /// </summary>
        /// <param name="s">excel第一行的数据(列名)</param>
        /// <param name="dt">table</param>
        /// <returns></returns>
        public HSSFWorkbook DownExcel(string[] s, DataTable dt)
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("sheet1");
            for (int i = 0; i < s.Length; i++)
            {
                if (i == 0)
                {
                    sheet.CreateRow(0).CreateCell(i).SetCellType(CellType.STRING);
                    sheet.CreateRow(0).CreateCell(i).SetCellValue(s[i]);
                }
                else
                {
                    sheet.GetRow(0).CreateCell(i).SetCellType(CellType.STRING);
                    sheet.GetRow(0).CreateCell(i).SetCellValue(s[i]);
                }
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < s.Length; j++)
                {
                    if (j == 0)
                    {
                        sheet.CreateRow(i + 1).CreateCell(j).SetCellType(CellType.STRING);
                        sheet.CreateRow(i + 1).CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    }
                    else
                    {
                        sheet.GetRow(i + 1).CreateCell(j).SetCellType(CellType.STRING);
                        sheet.GetRow(i + 1).CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    }
                }
            }
            return workbook;
        }
        #endregion

用到的Model类:

数据库脚本:

USE [E-export]
GO
/****** Object:  Table [dbo].[s_studentinfo]    Script Date: 2018/6/7 星期四 9:48:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[s_studentinfo](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](100) NULL,
    [age] [int] NULL,
    [sex] [nvarchar](50) NULL,
    [sort] [int] NULL,
 CONSTRAINT [PK_s_studentinfo] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET IDENTITY_INSERT [dbo].[s_studentinfo] ON 

GO
INSERT [dbo].[s_studentinfo] ([id], [name], [age], [sex], [sort]) VALUES (1, N'张三', 50, N'男', 50)
GO
INSERT [dbo].[s_studentinfo] ([id], [name], [age], [sex], [sort]) VALUES (2, N'李四', 19, N'女', 2)
GO
INSERT [dbo].[s_studentinfo] ([id], [name], [age], [sex], [sort]) VALUES (3, N'王五', 20, N'男', 3)
GO
INSERT [dbo].[s_studentinfo] ([id], [name], [age], [sex], [sort]) VALUES (4, N'麻六', 19, N'女', 4)
GO
SET IDENTITY_INSERT [dbo].[s_studentinfo] OFF
GO

用到的NPOI文件:

猜你喜欢

转载自blog.csdn.net/IT_0802/article/details/86589272