.net 导入Excel

今天我在做导入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);
}
}

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

时间: 2024-10-02 10:55:44

.net 导入Excel的相关文章

[转]MATLAB导入Excel数据错误

今天在向Matlab 2013b中导入office2013 Excel文件时出现了如下图错误: 为此,通过在网上查找发现了解决办法,主要是因为Excel加载项中的" FoxitReader PDF Creator COM Add-in"选项引起的. 因此可以尝试以下解决办法来修改Excel文件加载项: 1.进入到"文件"->"选项": 2.点击"加载项"选项卡: (错误产生就是由于此加载项是活动的.) 3.在当前选项卡下

[zz]winform导入excel

winfrom导入excel内容,要求能够excel中多个工作簿的内容.代码如下: #region 导入excel数据 private void button2_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "表格文件 (*.xls)|*.xls"; openFileDialog.RestoreDirect

导入Excel用户表,调用存储过程

花了一天半的时间学习了一下导入Excel用户表,调用存储过程,主要是学习存储过程.因为之前没有具体在项目中应用过. 这里我们采用导入Excel到临时表,然后存储过程中读取临时表判断数据类型和数据格式,然后保存到正式表. 导入Excel采用spring 的POI技术. 本文内容较多,请选择性阅读. controller里面的代码: /**  * Excel导入用户表,调用存储过程,先导入临时表,再在存储过程中判断,判断通过后导入正式表,错误的则记录错误日志表中. lijianbo  *   * @

Thinkphp 用PHPExcel 导入Excel

搞了个简单的Excel导入, 用的是PHPExcel(百科:用来操作Office Excel文档的一个PHP类库, 基于微软的OpenXML标准和PHP语言) 好, 不说了, 开始吧... 首先得有PHPExcel类库, 点这里下载 https://github.com/Zmwherein/PHPExcel.git 然后把它放在 \ThinkPHP\Library\Vendor(个人喜好, 能引入就行了) 如图: PHPExcel.php 类似一个入口文件. 可以进去看看里面写的方法是怎个跑法.

PLSQL导入Excel表中数据

PL/SQL 和SQL Sever导入excel数据的原理类似,就是找到一个导入excel数据的功能项,按照步骤走就是了.下面是一个些细节过程,希望对像我这样的菜鸟有帮助.  www.2cto.com 1.准备excel表. 右击数据表—选择edit data. 选择数据,右击,选择Copy to Excel 2.调整excel表 可以删除A列和F列,然后把你的数据粘到BCDE列,这样做的好处就是在导入excel的时候,绝对不会出现因为格式或其他文字问题导致错误. 3.准备导入 选择tool—O

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

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

点击按钮,导入excel

需为2003版本 private void button1_Click(object sender, EventArgs e)        {            string resultFile = "";            OpenFileDialog openFileDialog1 = new OpenFileDialog();            openFileDialog1.InitialDirectory = "D:";          

通过模板将数据导入EXCEL

在EXCEL模板里设置好样式和格式 点击事件 private void btnReport_Click(object sender, EventArgs e)        {            //将数据导入Excel中并设置Excel基本样式            ExcelHandle excelHandle = new ExcelHandle();            excelHandle.GenerateStudentsReports(this.dgvStudents);   

使用PHPExcel导入Excel到MySql

1.连接数据库的connection.php文件 <?php //修改下面代码来联接数据库 // mysql_connect打开一个到 MySQL 服务器的连接,如果成功则返回一个 MySQL 连接标识,失败则返回 FALSE. $mysql=mysql_connect("localhost","root","root"); //integer mysql_connect(主机,用户名,口令); mysql_select_db("

Java的poi技术读取和导入Excel

报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序进行Excel的读取和导入. AD:WOT2014:用户标签系统与用户数据化运营培训专场 项目结构: 用到的Excel文件: XlsMain .java 类 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版) import java.io.FileInputSt