首页 » .NET » C# 操作EXCEL文件

C# 操作EXCEL文件

2017-04-13 00:20:31阅读(2142)

//读取
 public DataSet EXCELToDS(string Path)
        {
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 12.0;";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = "";
            OleDbDataAdapter myCommand = null;
            DataSet ds = null;
            DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
            string tableName = schemaTable.Rows[0][2].ToString().Trim();
            string tableName2 = schemaTable.Rows[1][2].ToString().Trim();
            strExcel = "select * from [" + tableName + "]";
            myCommand = new OleDbDataAdapter(strExcel, strConn);
            ds = new DataSet();
            myCommand.Fill(ds, "table1");
            return ds;
        } 
        //写入
        public void DSToExcel(string Path,DataSet oldds) 
        { 
            //先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构 
            string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 12.0;"; 
            OleDbConnection myConn = new OleDbConnection(strCon) ;
            myConn.Open ( ) ;
            DataTable schemaTable = myConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
            string tableName = schemaTable.Rows[0][2].ToString().Trim();
            string strCom = "select * from [" + tableName + "]"; 
            OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;
            System.Data.OleDb.OleDbCommandBuilder builder = new OleDbCommandBuilder(myCommand); 
            //QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。 
            builder.QuotePrefix="[";     //获取insert语句中保留字符(起始位置) 
            builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置) 
            DataSet newds=new DataSet(); 
            myCommand.Fill(newds ,"Table1"); 
            for(int i=0;i<oldds.Tables[0].Rows.Count;i++) 
            { 
            //在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。
                //  在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added 
                DataRow nrow = newds.Tables["Table1"].NewRow(); 
                for(int j=0;j<newds.Tables[0].Columns.Count;j++) 
                { 
                    nrow[j]=oldds.Tables[0].Rows[i][j]; 
                } 
                    newds.Tables["Table1"].Rows.Add(nrow); 
            } 
            myCommand.Update(newds,"Table1"); 
            myConn.Close(); 
        }

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹