应该说,一套成熟的基于web的管理系统,与用户做好的excel表格进行数据交互是一个不可或缺的功能,毕竟,一切以方便客(jin)户(qian)为宗旨。

  本人之前从事PHP的开发工作,熟悉PHP的都应该知道,PHP与excel交互有一套很方便的软件,名字也很随性,就叫PHPExcel。但,现在是.net,怎么做呢?

  搜索之后发现,c#就是微软自家的啊,与ms office交互还不是小事儿吗,不废言了,进正题:

  采用OleDB(什么是OleDB,没必要知道,想知道百度之(*^__^*) )读取excel文件

  

//// <summary>
/// 从Excel提取数据--》Dataset
/// </summary>
/// <param name="filename">Excel文件路径名</param>
private void ImportXlsToData(string fileName)
{
try
{
if (fileName == string.Empty)
{
throw new ArgumentNullException("Excel文件上传失败!");
} string oleDBConnString = String.Empty;
oleDBConnString = "Provider=Microsoft.Ace.OleDb.12.0;";
oleDBConnString += "Data Source=";
oleDBConnString += fileName;
oleDBConnString += ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
OleDbConnection oleDBConn = null;
OleDbDataAdapter oleAdMaster = null;
DataTable m_tableName = new DataTable();
DataSet ds = new DataSet(); oleDBConn = new OleDbConnection(oleDBConnString);
oleDBConn.Open();
m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (m_tableName != null && m_tableName.Rows.Count > )
{ m_tableName.TableName = m_tableName.Rows[]["TABLE_NAME"].ToString(); }
string sqlMaster;
sqlMaster = " SELECT * FROM [" + m_tableName.TableName + "]";
oleAdMaster = new OleDbDataAdapter(sqlMaster, oleDBConn);
oleAdMaster.Fill(ds, "m_tableName");
oleAdMaster.Dispose();
oleDBConn.Close();
oleDBConn.Dispose(); AddDatasetToSQL(ds, ); //*****注意,这里是你唯一需要改动的地方,你的标准导入excel表格有多少列,就把12改成多少,其它不用管 }
catch (Exception ex)
{
throw ex;
}
}

  这个是OleDB导入的核心代码,下面,就按顺序来说说,先上“导入”按钮触发的方法代码

private void BtnImport_Click(object sender, System.EventArgs e)
{
string filename = string.Empty;
try
{
filename = UpLoadXls(FileExcel);//上传XLS文件
ImportXlsToData(filename);//将XLS文件的数据导入数据库
if (filename != string.Empty && System.IO.File.Exists(filename))
{
System.IO.File.Delete(filename);//删除上传的XLS文件
}
if(isloadsuc) //标志数据是否导入成功的bool变量
LblMessage.Text = "数据导入成功!";
}
catch (Exception ex)
{
LblMessage.Text = ex.Message;
}
}

很清楚,第一步,将用户选择的excel文件上传,即UpLoadXls方法

/// <summary>
/// 上传Excel文件
/// </summary>
/// <param name="inputfile">上传的控件名</param>
/// <returns></returns>
private string UpLoadXls(System.Web.UI.HtmlControls.HtmlInputFile inputfile)
{
string orifilename = string.Empty;
string uploadfilepath = string.Empty;
string modifyfilename = string.Empty;
string fileExtend = "";//文件扩展名
int fileSize = ;//文件大小
try
{
if (inputfile.Value != string.Empty)
{
//得到文件的大小
fileSize = inputfile.PostedFile.ContentLength;
if (fileSize == )
{
throw new Exception("导入的Excel文件大小为0,请检查是否正确!");
}
//得到扩展名
fileExtend = inputfile.Value.Substring(inputfile.Value.LastIndexOf(".") + );
if (fileExtend.ToLower() != "xls" && fileExtend.ToLower() != "xlsx")
{
throw new Exception("你选择的文件格式不正确,只能导入EXCEL文件!");
}
//路径
uploadfilepath = Server.MapPath("../excel");
//新文件名
modifyfilename = System.Guid.NewGuid().ToString();
modifyfilename += "." + inputfile.Value.Substring(inputfile.Value.LastIndexOf(".") + );
//判断是否有该目录
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(uploadfilepath);
if (!dir.Exists)
{
dir.Create();
}
orifilename = uploadfilepath + "\\" + modifyfilename;
//如果存在,删除文件
if (File.Exists(orifilename))
{
File.Delete(orifilename);
}
// 上传文件
inputfile.PostedFile.SaveAs(orifilename);
}
else
{
throw new Exception("请选择要导入的Excel文件!");
}
}
catch (Exception ex)
{
throw ex;
}
return orifilename;
}

  其次,就是ImportXlsToData方法,这个里面除了刚开始所说的OleDB核心实现方法外,还调用了AddDatasetToSQL,你的主要改动也都在这个里面,上方法

/// <summary>
/// 将Dataset的数据导入数据库
/// </summary>
/// <param name="pds">数据集</param>
/// <param name="Cols">数据集列数</param>
/// <returns></returns>
private bool AddDatasetToSQL(DataSet pds, int Cols)
{
int ic, ir;
ic = pds.Tables[].Columns.Count;
if (pds.Tables[].Columns.Count != Cols)
{
throw new Exception("导入Excel格式错误!Excel有" + ic.ToString() + "列");
}
ir = pds.Tables[].Rows.Count;
if (pds != null && pds.Tables[].Rows.Count > )
{
int rowsnum = ;
bool flag=true;
string tips = "";
//导入前检查数据合法性
for (int i = ; i < pds.Tables[].Rows.Count; i++)
{
//在这里验证用户数据有效性,是否数字啊、是否字母啊什么的
if(//验证不通过)
{
isloadsuc = false;
flag = false;
rowsnum = i;
tips = "给用户的错误提示";
break;
}
}
if (flag)
{
for (int i = ; i < pds.Tables[].Rows.Count; i++)
{
Add(pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString(),
pds.Tables[].Rows[i][].ToString());
}
}
else
{
Response.Write("<script>alert('第" + (rowsnum + ) + "行,"+tips+"')</script>");
}
}
else
{
throw new Exception("导入数据为空!");
}
return true;
}

  在上面的方法中,就开始先行后列依次读取用户的录入数据了,导入很方便,但,作为程序员,一定牢记,用户的一切输入都不可信,一旦错误的数据导进系统,那就麻烦了,所以一定做好数据有效性的校验工作。完成后,就进行最后一步,即ADD方法了。

/// <summary>
/// 插入数据到数据库
/// </summary>
public void Add(string a, string b)//这里,导入excel的列与数据库中的列对应起来
{
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into ATABLE(");
strSql.Append("A,B");
strSql.Append(")");
strSql.Append(" values (");
strSql.Append("'" + a+ "',");
strSql.Append("'" + b+ "'");
strSql.Append(")"); MyDB.ExecSQL(strSql.ToString());
}

至此,整个excel的数据导入就全部完成了,欧耶!

.net实现与excel的数据交互、导入导出的更多相关文章

  1. java excel大数据量导入导出与优化

    package com.hundsun.ta.utils; import java.io.File; import java.io.FileOutputStream; import java.io.I ...

  2. Sql server与Excel的数据互通导入导出

    现在,我先从Sql server数据表导出到Excel中,再从Excel数据表导出到Sql server中: 一.Sql server数据表导出到Excel中: 1.新建一个Excel,选择“数据”菜 ...

  3. 【SQL Server】SQL与Excel的数据互通导入导出

    转载至:http://jingyan.baidu.com/article/73c3ce28c839b7e50243d950.html

  4. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  5. 使用phpExcel实现Excel数据的导入导出(完全步骤)

    使用phpExcel实现Excel数据的导入导出(完全步骤)   很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人 ...

  6. 利用PHPExcel 实现excel数据的导入导出(源码实现)

    利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...

  7. NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。

    App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  8. MATLAB中文件的读写和数据的导入导出

    http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行 ...

  9. phpexcel如何读取excel的数据和如何导出数据到excel

    phpexcel如何读取excel的数据和如何导出数据到excel 一.总结 一句话总结:去官网看参考手册和api,或者找中文的博客或者参考手册 1.phpexcel插件如何下载? 其实这些插件不仅可 ...

  10. Oracle 数据泵导入导出总结

    Oracle 数据泵(IMPDP/EXPDP)导入导出总结 Oracle数据泵导入导出是日常工作中常用的基本技术之一,它相对传统的逻辑导入导出要高效,这种特性更适合数据库对象数量巨大的情形,因为我日常 ...

随机推荐

  1. Lesson 13 The Greenwood Boys

    Text The Greenwood Boys are group of pop singers. At present, they are visiting all parts of the cou ...

  2. Btree 索引

    Btree 索引 索引是帮助数据库高效获取数据的一种数据结构,通过提取句子主干,就可以得到索引的本质. m-way查找树 如果想了解Btree,需要首先了解m-way数据结构. m-way查找树是是一 ...

  3. [nRF51822] 13、浅谈nRF51822和NRF24LE1/NRF24LU1/NRF24L01经典2.4G模块无线通信配置与流程

    前言:  nRF51可以支持基于2.4G的互相通信.与NRF24LE1的通信.与NRF24LU1的通信.与NRF24L01的通信. 一.nRF51822基于2.4G和nRF51822通信 其中nRF5 ...

  4. 跟我一起数据挖掘(22)——spark入门

    Spark简介 Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行,Spark,拥有Hadoop MapReduce所具有的优点:但不同于MapR ...

  5. JavaScript学习笔记之string

    字符串定义: 1,var myString=“内容”:or var myString=‘内容’ 2,var myString= new String(“内容”)           ---〉创建对象, ...

  6. Android Fragment 使用技巧

    1. Fragment 使用时要有一个无参构造函数 如果没有无参构造函数,而是像按照普通类来使用,只创建有参构造函数,则会出现 android.support.v4.app.Fragment$Inst ...

  7. Uiautomator 2.0之UiWatcher类学习小记

    1. 主要功能 使用此方法可以处理中断问题,从而保证测试用例的正常运行. 2. 相关API API 说明 registerWatcher (String name, UiWatcher watcher ...

  8. Java 线程 — ThreadPoolExecutor

    线程池 线程池处理流程 核心线程池:创建新线程执行任务,需要获取全局锁 队列:将新来的任务加入队列 线程池:大于corePoolSize,并且队列已满,小于maxPoolSize,创建新的worker ...

  9. Sql Server系列:Select基本语句

    1 T-SQL中SELECT语法结构 <SELECT statement> ::= [WITH <common_table_expression> [,...n]] <q ...

  10. SQL Server中的高可用性(1)----高可用性概览

        自从SQL Server 2005以来,微软已经提供了多种高可用性技术来减少宕机时间和增加对业务数据的保护,而随着SQL Server 2008,SQL Server 2008 R2,SQL ...