.NET从EXCEL文件导入数据

.NET com组件

这种方法在计算机没有安装office套件时,也是能够使用的。所以不依赖于软件,

但是还是需要xcel.exe编译后的dll文件打包到相应的程序中来引用。这样将dll文件“

随身携带”,就可以了。还是挺不错的!

1.注册Microsoft.Office.Interop.Excel.dll

在office安装文件夹下找到excel.exe,路径D:\Program Files(x86)\Microsoft

Office\Office15.将excel.exe文件复制到D:\ProgramFiles
(x86)\Microsoft Visual

Studio 11.0\VC下。用visual studio 2012命令行工具切换到D:\Program Files

(x86)\Microsoft Visual Studio11.0\VC,一般会自动切换。这时候执行TlbImp /

out:Interop.Excel.dll Excel.exe。提示

2.引用interop.excel.dll

将编译好的dll文件复制到程序的bin文件下。添加引用

下面是我自己做的一个小demo。

<pre name="code" class="csharp">private void OpenExcel(string strFileName)
    {
        object missing = System.Reflection.Missing.Value;
        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//lauch excel application
        if (excel == null)
        {

        }
        else
        {
            excel.Visible = false;  excel.UserControl = true;
            // 以只读的形式打开EXCEL文件
            Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,
             missing, missing, missing, true, missing, missing, missing, missing, missing);
            //取得第一个工作薄
            Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);

            //取得总记录行数   (包括标题列)
            int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数
            //int columnsint = mySheet.UsedRange.Cells.Columns.Count;//得到列数

            //取得数据范围区域  (不包括标题列)
            Range rng1 = ws.Cells.get_Range("B2", "B" + rowsint);   //item

            Range rng2 = ws.Cells.get_Range("K2", "K" + rowsint);  //Customer
            object[,] arryItem= (object[,])rng1.Value2;   //get range's value
            object[,] arryCus = (object[,])rng2.Value2;
            //将新值赋给一个数组
            string[,] arry = new string[rowsint-1, 2];
            for (int i = 1; i <= rowsint-1; i++)
            {
                //Item_Code列
                arry[i - 1, 0] =arryItem[i, 1].ToString();
                //Customer_Name列
                arry[i - 1, 1] = arryCus[i, 1].ToString();
            }
            //Response.Write(arry[0, 0] + "  /  " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + "  /  " + arry[rowsint - 2, 1]);
        }
        excel.Quit();  excel = null;
        Process[] procs = Process.GetProcessesByName("excel");

        foreach (Process pro in procs)
        {
            pro.Kill();//没有更好的方法,只有杀掉进程
        }
        GC.Collect();
    }

结果




OLEDB方式

这种方式就像平时使用sqlserver一样,将excel文件当成一个数据源来对待。只不过

这时候的数据库是excel罢了,其实一样简单来看sqlserver也就是复杂化的excel所以这

种方式相对还是

比较常见的。

code

<pre name="code" class="csharp">/// <summary>
        /// 读取Excel数据到DS
        /// </summary>
        /// <param name="excelName">xls文件路径(服务器物理路径)string RootDir =Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录</param>
        /// <returns></returns>
        public DataSet ExcelReader(string excelName)
        {
            // 拼写连接字符串,打开连接
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + excelName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
            OleDbConnection objConn = new OleDbConnection(strConn);
            objConn.Open();
            // 取得Excel工作簿中所有工作表
            DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            OleDbDataAdapter sqlada = new OleDbDataAdapter();
            DataSet ds = new DataSet();

            // 遍历工作表取得数据并存入Dataset
            foreach (DataRow dr in schemaTable.Rows)
            {
                string strSql = "Select * From [" + dr[2].ToString().Trim() + "]";
                OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                sqlada.SelectCommand = objCmd;
                sqlada.Fill(ds, dr[2].ToString().Trim());
            }

            objConn.Close();
            return ds;
        }


几个关键code句:

c#的垃圾回收:

   //得到excel所有的进程

     Process[] procs = Process.GetProcessesByName("excel");
     foreach (Process pro in procs)
     {
         pro.Kill();//
      }
     GC.Collect();

com组件创建excel操作对象

  Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //以只读的形式打开EXCEL文件
                Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing);
//取得第一个工作薄
Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);
//取得单元格的值
String cellstr = ws.Cells[i][j].Value;

oledb建立excel连接

// 拼写连接字符串,打开连接
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "data source=" + excelName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
            OleDbConnection objConn = new OleDbConnection(strConn);
objConn.Open();
// 取得Excel工作簿中所有工作表
DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

第一种方法是创建excel对象,第二种方法是以excel为数据源。第一种的适用面更

广。还有一种是用二进制数据流的方式来读取,需要将excel文件转成csv文件。

.NET从EXCEL文件导入数据,布布扣,bubuko.com

时间: 2024-12-11 06:52:18

.NET从EXCEL文件导入数据的相关文章

国产达梦数据库-通过Excel文件导入数据

考虑到完整性,我这里就啰嗦一点,从新建达梦数据库的数据库,再新建表.表结构开始. 一.新建数据库:模式 --> 右键 --> 新建模式:这里的新建模式就是MySQL中的新建库 二.弹出如下新建模式对话框: 三.输入模式名,并选择模式拥有者,操作如下: 四.再点两次确定按钮,即可完成新建模式,完成后,列表会显示刚新建的模式OASYS,如下图: 五.既然现在有了模式(数据库),就可以新建具体要使用的表了,操作如下: 六.打开新建表对话框,填写输入具体表信息.字段信息,如下图: 七.点击确定以后,结

利用OLEDB+SqlClient实现EXCEL批量导入数据

以下是几个自己写的类 /// <summary> /// 取得Excel对象 /// </summary> /// <param name="strConn">OLEDB连接字符串</param> /// <param name="sql">SQL语句</param> /// <returns></returns> public static DataTable GetE

关于Excel文件导入到Sqlserver2008中出现截断错误的解决办法

出现错误的可能原因: 1.数据库字段Varchar长度不够: 2.不能用Text类型: 3.数据中可能存在换行符: 4.数据项文本过长,超过4000: 5.前8行的最大长度不够大,后面有超过的. 解决办法: 1.修改Varchar长度为足够长: 2.替换掉换行符(可手工输入一个换行符,复制到替换文本框中,Office中可按住Alt键,从小键盘输入10,再松开Alt键): 3.第一行中记录设足够长,导入后再替换: 4.把Excel文件存为2007格式,可解决导入后很多数据项为NULL的问题: 5.

将excel文件导入到数据库

参考:http://blog.csdn.net/jayxujia123/article/details/13684313 参考:http://kevin850115.iteye.com/blog/578142 MySQL官网:http://dev.mysql.com/doc/refman/5.7/en/load-data.html 学弟有个面试题,在群里问了下如何将excel文件导入到数据库.以前也没试过,正好在学习MySQL,练练手吧. 首先,将excel文件另存为用逗号分隔的csv文件,传到

excel文件导入数据库

1.准备jar包:poi 2.前端jsp页面: <body> <!-- form表单中必须添加enctype="multipart/form-data"才可以上传文件 servlet中根据file名称来获取文件相对路径 --><form action="/phoneQuery" method="post" enctype="multipart/form-data">    <table

C#实现从EXCEL文件读取数据到SqlServer数据库

用第三方组件:NPOI组件实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写. 先创建一个实体类: [Table("Customer") ] public class Customer { [Key] public int Id { get; set; } public

asp.net 从Excel表导入数据到数据库中

http://www.cnblogs.com/hfzsjz/archive/2010/12/31/1922901.html http://hi.baidu.com/ctguyg/item/ebc857e90e436ae1fb42ba01 1 <form action="" method="post" runat ="server"> 2 <div> 3 <span>请选择文件:</span><

Java读写Excel文件中数据的简便方法

Java开发项目中经常会碰到处理Excel文件中数据的情况,这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后,并且SELLERID等于18的订单.找到的数据写入order_result.xls文件. Excel文件orders.xls的内容如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE 1 UJRNP 17 392 2008/11/2 15:28 2 SJCH 6 4802 200

十万级百万级数据量的Excel文件导入并写入数据库

一.需求分析 最近接到一个需求,导入十万级,甚至可能百万数据量的记录了车辆黑名单的Excel文件,借此机会分析下编码过程; 首先将这个需求拆解,发现有三个比较复杂的问题: 问题一:Excel文件导入后首先要被解析为存放对象的列表,数据量大的情况下可能会导致内存溢出,解析时间过长; 问题二:插入数据库的时候,数据量大,写入的时间长 问题三:要对数据库中的现有数据进项判断,不仅仅要做插入动作,还要将数据库的数据与导入的数据对比,判断是否做更新操作 其中: 问题一和问题三,可以看做同一类,因为主要涉及