首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

如何用.net去操作excel

2013-10-23 
怎么用.net去操作excel我看网上说先引用excel的com组件,我在类库里引用了一下。但是人家说还要Microsoft.Of

怎么用.net去操作excel
我看网上说先引用excel的com组件,我在类库里引用了一下如何用.net去操作excel。但是人家说还要Microsoft.Office.Interop.Excel这个,我没有,我在项目里引用了一下,结果变成了如何用.net去操作excel
我有2个问题。
1为什么我在类库里没有Microsoft.Office.Interop.Excel
2这两种引用有什么区别,为什么同样是操作excel,有的文章using Excel这样,有的文章using Microsoft.Office.Interop.Excel;这样 excel .net 引用
[解决办法]
用组件,搜NPOI,轻松很多
[解决办法]
using Excel的应该是先导入了Microsoft.Office.Interop吧

再说了 甭管别人怎么写的 自己琢磨琢磨呗



    public static bool UpdateData(string Filepath)
        {
            DataSet ds = new DataSet();
            OleDbConnection con;
            OleDbDataAdapter da;
            try
            {
                string strExtName = Filepath.Substring(Filepath.Length - 4).ToLower();
                string connStr = "";

                switch (strExtName)
                {
                    case ".xls":
                        {
                            connStr = "Provider=Microsoft.Jet.OLEDB.4.0;data source=" + Filepath + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
                            break;
                        }
                    case "xlsx":
                        {
                            connStr = "Provider=Microsoft.Ace.OLEDB.12.0;data source=" + Filepath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
                            break;
                        }
                    default:
                        {
                            connStr = "Provider=Microsoft.Jet.OLEDB.4.0;data source=" + Filepath + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
                            break;
                        }
                }

                if (GetExcelTableNames(Filepath, connStr).Count <= 0)
                {
                    throw new Exception("提示:上传的文件没数据!");
                }
                ArrayList sqllist = new ArrayList();


                for (int i = 0; i < tableNames.Count; i++)
                {
                    sqllist.Add("SELECT  *  FROM [" + tableNames[i] + "]  ");
                }
                con = new OleDbConnection(connStr);
                con.Open();
                for (int i = 0; i < tableNames.Count; i++)
                {
                    da = new OleDbDataAdapter(sqllist[i].ToString(), con);
                    da.Fill(ds, "mytable");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            using (SqlBulkCopy sqlBC = new SqlBulkCopy(connstring, SqlBulkCopyOptions.UseInternalTransaction))
            {
                try
                {
                    sqlBC.BatchSize = 100;
                    sqlBC.NotifyAfter = 1;
                    sqlBC.DestinationTableName = "tbBlackCust";
                    //一下根据实际修改
                    sqlBC.ColumnMappings.Add("城市", "城市");
                    sqlBC.ColumnMappings.Add("公司名", "公司名");
                    sqlBC.ColumnMappings.Add("访问员姓名", "访问员姓名");
                    sqlBC.ColumnMappings.Add("访问员编号", "访问员编号");
                    sqlBC.ColumnMappings.Add("性别", "性别");
                    sqlBC.ColumnMappings.Add("身份证号", "身份证号");
                    sqlBC.ColumnMappings.Add("地址", "地址");
                    sqlBC.ColumnMappings.Add("宅电", "宅电");
                    sqlBC.ColumnMappings.Add("电话", "电话");
                    sqlBC.ColumnMappings.Add("原因", "原因");
                    sqlBC.ColumnMappings.Add("日期", "日期");
                    sqlBC.WriteToServer(ds.Tables[0]);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
      
                }



            }

            conn.Close();

            return true;

        }

        public static ArrayList GetExcelTableNames(string excelFileName, string strExtension)
        {
            tableNames.Clear();
            try
            {
                if (File.Exists(excelFileName))
                {
                    using (OleDbConnection conn = new OleDbConnection(strExtension))
                    {
                        conn.Open();
                        DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            //sheet的命名规则决定过滤规则
                            if (dt.Rows[i]["TABLE_NAME"].ToString().Contains("$") && !dt.Rows[i]["TABLE_NAME"].ToString().Replace("'", "").EndsWith("$"))
                            {
                                continue;
                            }
                            if (GetSheetRows(dt.Rows[i]["TABLE_NAME"].ToString().Trim(), conn) <= 0)
                            {
                                continue;
                            }
                            tableNames.Add(dt.Rows[i]["TABLE_NAME"].ToString().Trim());
                        }
                        conn.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return tableNames;

        }

        private static int GetSheetRows(string SheetName, OleDbConnection con)
        {
            string sql = "SELECT count(*) FROM [" + SheetName + "]  ";
            return (int)new OleDbCommand(sql, con).ExecuteScalar();
        }



[解决办法]
1.沒有Microsoft.Office.Interop.Excel,請檢查是否有安裝excel
2.using Excel;因為可以在web.config中注冊
<add tagPrefix="Excel" namespace="Microsoft.Office.Interop" />
[解决办法]


获取excel 文件路径-------> 读到datatable中------->  写到数据库

中间掺插一些简单的判断
[解决办法]



你的异常是什么呢?
[解决办法]
引用:
Quote: 引用:

获取excel 文件路径-------> 读到datatable中------->  写到数据库

中间掺插一些简单的判断

 OleDbConnection这个是引用的那个类


using System.Data.OleDb;

右键 解析一下不就可以了么?
[解决办法]
Microsoft.Office.Interop.Excel  微软这dll对环境的要求比较苛刻,效率也不好;建议使用NPOI
[解决办法]
导入导出?  npoi听说很多人用,我只用过aspnose

[解决办法]
强烈推荐使用Aspose控件,操作简单,且无须区分EXCEL的版本

热点排行