今天我在做导入Excel的时候遇到了一些问题,顺便说句其实我很少做这方面的!我的需求是导入EXCEL 验证数据正确性 并把数据显示到页面 如有错误信息则弹出来

那具体问题是什么呢?

导入Excel有2种方式 各有千秋 根据自己需要决定

第一种:直接就是页面后台写代码,很容易实现。 缺点是:页面要刷新并且弹出框只能用系统自带的 所有我采取了第二种方式

页面代码:

<form id="formData" enctype="multipart/form-data" method="post" name="files[]" action="/Handler/TestHandler.ashx" target="hidden_frame">

<asp:FileUpload ID="fileSelect" runat="server" />
<asp:Button ID="btnRead" runat="server" Text="导入EXCEL" OnClick="btnRead_Click" />

</div>
<div id="ListInfo" runat="server"></div>

</from>

后台代码:

///<summary>
///上传文件到临时目录中
///</ummary>
private void Upload()
{
HttpPostedFile file = this.fileSelect.PostedFile;
string fileName = file.FileName;
string tempPath = System.IO.Path.GetTempPath(); //获取系统临时文件路径
fileName = System.IO.Path.GetFileName(fileName); //获取文件名(不带路径)
this.currFileExtension = System.IO.Path.GetExtension(fileName); //获取文件的扩展名
if (this.currFileExtension.ToLower() == ".xls" || this.currFileExtension.ToLower() == ".xlsx")
{
this.currFilePath = tempPath + fileName; //获取上传后的文件路径 记录到前面声明的全局变量
file.SaveAs(this.currFilePath); //上传
}
else
{
throw new Exception("你选择的文件格式不正确,只能导入EXCEL文件!");
}

}

///<summary>
///读取xls\xlsx格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
private DataTable ReadExcelToTable(string path, string FileExtension)
{
string connstring = String.Empty;
//连接字符串
if (FileExtension == ".xlsx")
{
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意

}
else
{
connstring = " Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"; //Office 07以下版本
}

using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
string sql = string.Format("SELECT * FROM [{0}]", firstSheetName); //查询字符串
OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
ada.Fill(set);
return set.Tables[0];

}
}

/// <summary>
/// 按钮单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnRead_Click(object sender, EventArgs e)
{

Upload(); //上传文件方法
if (this.currFileExtension == ".xlsx" || this.currFileExtension == ".xls")
{
DataTable dt = ReadExcelToTable(currFilePath, this.currFileExtension); //读取Excel文件(.xls和.xlsx格式)

string list = "<table>";
for (int i = 0; i < dt.Rows.Count; i++)
{
list += "<tr>";

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

var aa = dt.Rows[i][j];
var bb = dt.Rows[i][0];

list += "<td>" + dt.Rows[i][j] + "</td>";

}
list += "</tr>";
}

ListInfo.InnerHtml = list + "</table>";

}

}

第二种:是走一般处理程序 这样系统的权限也好控制一些

我这做这种方法的时候 我学到了另外一个知识点 就是表单提交不刷新页面

js代码:

$(function() {
$("#formData").submit(function () {
return false;//禁止表单提交
});
$("form input[type='submit']").click(function () {

var url = $('form').attr('action'); // 取Form中要提交的链接
var param = {}; // 组装发送参数
param['type'] = $('form input[name=type]').val();
$.post("/Handler/TestHandler.ashx", param, function (dom) {
$('div').html(dom);
});
})

});

这种方法虽然可以不刷新页面 但是要上传文件的话 这种方式是不可行的

接下来就说点干货。以下这种方式是利用iframe完成的 其原理是表单提交 页面不刷新 其实刷新的是iframe  注意标红部分

页面代码:

<form id="formData" enctype="multipart/form-data" method="post" name="files[]" action="/Handler/TestHandler.ashx" target="hidden_frame">

<input type="file" name="fileUp" id="fileUp"/>
<input type="submit" id="btnConfirm" value="导入Excel"/>
<input type="hidden" name="type" id="type" value="108" />//一般处理程序接受的参数

<iframe name='hidden_frame' id="hidden_frame"style='display:none' src="TestExcel.aspx"></iframe>
</form>
<div class="get" id="get">

</div>

后台代码:

//声明变量(属性)
string currFilePath = string.Empty; //待读取文件的全路径
string currFileExtension = string.Empty; //文件的扩展名

ReadExcelToTable 方法和上面一样

//上传文件

private void Upload(HttpContext context)
{
HttpPostedFile file = context.Request.Files["fileUp"];
string fileName = file.FileName;
string tempPath = System.IO.Path.GetTempPath(); //获取系统临时文件路径
fileName = System.IO.Path.GetFileName(fileName); //获取文件名(不带路径)
this.currFileExtension = Path.GetExtension(fileName); //获取文件的扩展名
if (this.currFileExtension.ToLower() == ".xls" || this.currFileExtension.ToLower() == ".xlsx")
{
this.currFilePath = tempPath + fileName; //获取上传后的文件路径 记录到前面声明的全局变量
file.SaveAs(this.currFilePath); //上传
}
else
{
throw new Exception("你选择的文件格式不正确,只能导入EXCEL文件!");
}

}

private ResultMessage ShowAlert(HttpContext context)
{
try
{
Upload(context); //上传文件方法
if (this.currFileExtension == ".xlsx" || this.currFileExtension == ".xls")
{
System.Data.DataTable dt = ReadExcelToTable(currFilePath, this.currFileExtension); //读取Excel文件(.xls和.xlsx格式)
string list = "<table>";
for (int i = 0; i < dt.Rows.Count; i++)
{
list += "<tr>";

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

var aa = dt.Rows[i][j];
var bb = dt.Rows[i][0];
if (i != 0)
{

list += "<td>" + dt.Rows[i][j] + "</td>";

}
list += "</tr>";
}

var ListInfo = list + "</table>";

//你可以在上面代码中修改成自己的需求

//上面说到我不想用系统自带的弹窗 那么我们的数据以及错误信息如何展示到页面上呢? 请看以下代码:

if (arr.Count != 0)//错误提示的集合
{

string str = string.Join(",", arr);
context.Response.Write("<script>var msg=parent.document.getElementById('get');msg.innerHTML='<font color=red>" + ListInfo+ "</font>'; parent.aa('" + str + "');</script>");//只有parent.aa()才能调用到你在页面上的方法 这个方法我是用来弹出错误提示的
return new ResultMessage(false,ListInfo ,1,arr);
}
return new ResultMessage(false);
}
return new ResultMessage(false);
}
catch (Exception ex)
{

return new ResultMessage(false);
}
}

大功告成!小女子不才第一次写博客!代码不周到之处,请指教!其实上面的的代码 我都是从网上看的 改成了自己需要的,以便往后之需!

.net 导入Excel的更多相关文章

  1. 一步步实现ABAP后台导入EXCEL到数据库【3】

    在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...

  2. 一步步实现ABAP后台导入EXCEL到数据库【1】

    在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...

  3. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  4. IE8下导入EXCEL数据传到客户端以附件下载

    IE8下导入EXCEL数据传到客户端以附件下载方式出现,而不显示数据,解决方法:以text/html格式返回. HttpResponseMessage message = new HttpRespon ...

  5. java的poi技术读取和导入Excel

    项目结构: http://www.cnblogs.com/hongten/gallery/image/111987.html  用到的Excel文件: http://www.cnblogs.com/h ...

  6. 报表工具如何实现多次导入Excel

    很多人在开发报表的时候会遇到将多张表样相同的excel导入到模板,然后提交至数据库中.但问题是很多情况,在线导入不支持一次性选择多个excel,一次只能选择一个excel,也不能将多个excel中的数 ...

  7. .NET导入Excel到SQL数据库

    在我们开发各类应用型系统,经常会遇到导入导出Excel,为什么会用到他呢?企业或者单位在从无信息化到信息化的一个转变过程.在没有信息化的企业或单位之前,一般都采用Excel来记录相应的数据,做统计计算 ...

  8. SQL Server服务器上需要导入Excel数据的必要条件

    SQL Server服务器上需要导入Excel数据,必须安装2007 Office system 驱动程序:数据连接组件,或者Access2010的数据库引擎可再发行程序包,这样就不必在服务器上装Ex ...

  9. 导入excel数据到数据库

    1.上传excel到服务器 jsp页面代码 <form action="actionname" method="post" id="form1& ...

  10. PLSQL Developer导入Excel数据

    LSQL Developer导入Excel数据 最近处理将Excel数据导入Oracle的工作比较多.之前都是采用Sqlldr命令行导入的方式处理.每次导入不同格式的Excel表数据,都需要先把Exc ...

随机推荐

  1. elasticsearch6.4中文文档

    男朋友翻译的,我这边做一个查看入口,分享给大家,O(∩_∩)O哈哈~ 版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者. https://blog.csd ...

  2. Jquery语法基础

    Jquery语法基础 一.Jquery一般语法格式为:$(selector).action() l  美元符号定义 jQuery (又称工厂函数) l  选择器(selector)“查询”和“查找” ...

  3. 0816关于MySQL的审计 init-connect+binlog实现用户操作追踪

    转自:http://blog.sina.com.cn/s/blog_605f5b4f01013xkv.html mysql 用init-connect+binlog实现用户操作追踪 做access 的 ...

  4. windows下本地安装oracle忘记密码,账号被锁咋办

    忘记密码咋办: 进入cmd,输入set ORACLE_SID=ymxg  (ORACLE_SID的值为你想登录的oracle实例的SID) 然后输入:sqlplus / as sysdba 最后输入: ...

  5. ThinkPHP模版引擎之变量输出具体解释

    ThinkPHP模版引擎之变量输出具体解释 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下.做出一些总结,分享给大家供大家參考. 详细分析例如以下: 我们 ...

  6. Codeforces Round #200 (Div. 2)D. Alternating Current (堆栈)

    D. Alternating Current time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. YII用户注冊和用户登录(三)之模型中规则制定和分析

    3 模型中规则制定和分析 YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查.继承CActiveRecord.还有一个是表单模型,继承CFormModel.不与数据库进行交互.操作与数据 ...

  8. 字符流、字节流、二进制及其在HTTP协议传输

    一.二进制.字节.字符流概念 字(Byte)节是长度单位.位(bit)也是长度单位.计算机通信和存储的时候都是以010101这样的二进制数据为基础的二进制数有两个特点:它由两个基本字符0,1组成,二进 ...

  9. 【转】Java的可变类与不可变类

    1.可变类和不可变类(Mutable and Immutable Objects)的初步定义: 可变类:当你获得这个类的一个实例引用时,你可以改变这个实例的内容. 不可变类:当你获得这个类的一个实例引 ...

  10. BZOJ 2729 高精度+组合数学

    思路: 考虑 把男生排成一排 女生和老师往里插 分成两种情况. 1. 女生中间夹着老师 2. 女生中间没有夹着老师 求一下组合* 阶乘就好了 先放Python代码 简洁易懂 def fact(n): ...