导入数据

导入数据

1.
下载导入数据模板

相对应的物理文件路径 string filePath = Server.MapPath("~/Document/学生导入模板.xls");

首先判断文件是否存在

if (System.IO.File.Exists(filePath))

        {



           如果存在获取文件的名称

            string strfileName =

Path.GetFileName(filePath);

         //   参数:File(fileStream要发送到响应的流,

         //   contentType内容类型(MIME 类型),

            fileDownloadName浏览器中显示的文件下载对话框内要使用的文件名。)  */

            return File(new FileStream(filePath,

FileMode.Open), “application/octet-stream”, strfileName);

        }

        else

        {

            //使用字符串创建一个内容结果对象。

            return Content("模板文件不存在,请联系系统运维人员。");

        }

2.上传

//定义表单数据对象
FormData

                var fdObj = new FormData();

                //获取表单中的数据

                var xlsFile =

$(’#fileExcel’).get(0).files[0];

                //向对象中添加要发送的数据

fdObj.append(“xlsFile”, xlsFile);

                //创建XMLHttpRequest对象

                var xhr = new

XMLHttpRequest();

                var layerIndex =

layer.load();//打开加载层

                //指定提交类型和选择要发送的地址  上传文件只能使用POST请求,不能用get请求

                xhr.open("post",

“@Url.Content(”~/Main/ImportExcel")");

1、获取上传的文件;

2、把文件转换为二进制数组;

3、二进制数组转成内存流;

4、利用NPOI把内存流中的数据读取成Excel

5、使用NPOI读取数据

传递文件的方式

public ActionResult ImportExcel(HttpPostedFileBase xlsFile)

获取文件的后缀

string fileExtension = Path.GetExtension(xlsFile.FileName);

声明二进制数组存放文件

byte[] fileBytes = new byte[xlsFile.ContentLength];

将传入的文件转化为二进制的数组存入fileBytes

                InputStream.Read(fileBytes,

0, xlsFile.ContentLength);

                //将二进制数组转化为内存流

                MemoryStream excelFileStream = new MemoryStream(fileBytes);

                //将内存流转化为工作簿

NPOI.SS.UserModel.IWorkbook workbook = new
NPOI.HSSF.UserModel.HSSFWorkbook(excelFileStream);

判断是否存在工作表如果存在获取第一个工作表

if
(workbook.NumberOfSheets > 0)

NPOI.SS.UserModel.ISheet sheet =
workbook.GetSheetAt(0);

判断工作表是否有数据

PhysicalNumberOfRows
获取的是物理行数,也就是不包括那些空行(隔行)的情况。

if
(sheet.PhysicalNumberOfRows > 0)

将数据添加到 DataTable

DataTable dtExcel = new DataTable();

获取表格列数

int cellCount =
rowHeader.LastCellNum; 获取列的总数

bool rowDataIsEmpty = true;//表示是否是空行默认为空行

for (int j = 0; j <
dtExcel.Columns.Count; j++)

             {

判断数据是否为空

if (!string.IsNullOrEmpty(dtExcel.Rows[i][j].ToString().Trim()))

             {

   
             rowDataIsEmpty =

false;

             }

              }

if (rowDataIsEmpty == true)

{

              removeList.Add(dtExcel.Rows[i]);

}

}

移除掉空格

for (int i = 0; i <
removeList.Count; i++)

          {

dtExcel.Rows.Remove(removeList[i]);

          }

查询出所有数据(用于后面判断导入的数据的准确性)

List<S_Student> tudent = (from tbstudent
in myModel.S_Student

                                      select tbstudent

                      ).ToList();

查询出所有数据(用于后面判断导入的数据的准确性)

List<S_Class> classnt = (from
tbcalssName in myModel.S_Class

                           select tbcalssName

                 ).ToList();

将dataTable中的数据转换为List<S_User>

定义存放容器(用于保存新增的数据)

List<S_Student> saveUsers = new
List<S_Student>();

遍历datatable中的数据

 for (int i = 0; i < dtExcel.Rows.Count; i++){

try

{

DataRow dr = dtExcel.Rows[i];

创建一个S_User实例保存一条用户数据

S_Student addUser = new S_Student();

获取表格行数

int rowCount =
sheet.LastRowNum + 1;//工作表获取行总数

所有的行

for (int i = 0; i < dtExcel.Rows.Count; i++)

{

添加到要保存的列表saveUsers

aveUsers.Add(addUser);

添加到用于查重的列表allUsers

tudent.Add(addUser);

保存到数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值