应该说,一套成熟的基于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. 元素的click与dblclick

    JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,是用户或浏览器自身执行的某种动作.诸如click.load.mousemover,都是事 ...

  2. Guava库介绍之集合(Collection)相关的API

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  3. SQL Server 使用全文索引进行页面搜索

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/全文索引 概述 全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询.全文索引将有关重要的词及其位置的信息存储 ...

  4. 利用Hexo搭建个人博客-博客发布篇

    通过 <利用Hexo搭建个人博客-环境搭建篇> 以及 <利用Hexo搭建个人博客-博客初始化篇>,我们了解到了利用Hexo搭建个人博客需要的环境以及配置,下面这篇文章将会介绍如 ...

  5. PHP 基础知识测试题 答案分析

    一:选择题(单项选择,每题2分): 1. LAMP具体结构不包含下面哪种(A      ) A:Windows系统              如果是这个就是WMP B:Apache服务器 C:MySQ ...

  6. MongoDB 使用Index

    Index 能够提高查询的性能,如果没有Index,MongoDB必须扫描整个collection,从collection的第一个doc开始,直到最后一个doc,即使第一个doc之后的所有doc都不满 ...

  7. 掌握 cinder-scheduler 调度逻辑 - 每天5分钟玩转 OpenStack(48)

    上一节我们详细讨论了 cinder-api 和 cinder-volume,今天讨论另一个重要的 Cinder 组件 cinder-scheduler. 创建 Volume 时,cinder-sche ...

  8. DOM扩展-Selectors API(选择符 API)、元素遍历

    DOM扩展 对DOM的两个主要扩展是SelectorsAPI(选择符API)和HTML5 SelectorsAPI(选择符API)是由W3C发起制定的一个标准,致力于浏览器原生支持CSS查询,Sele ...

  9. Vim 快速上手

    1.vi的基本概念 基本上vi可以分为三种状态,分别是 命令模式(command mode) 插入模式(Insert mode) 底行模式(last line mode) 1) 命令行模式comman ...

  10. Js权限判断处理

    主要实现自动处理视频点击判断权限. function lookVideo() { var review_con = document.getElementById("review" ...