此篇博客是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