当前位置:编程学习 > C#/ASP.NET >>

100分,讨论C#操作EXCEL对比的问题

两个EXCEL文件,如果A1相同,就认为是该行相同,相同的取出来放在新建的EXCEL文件里,不同的也是放在新建EXECEL文件里
写下方案和代码,越详细得越好,分可以继续加. --------------------编程问答-------------------- 帮你顶  --------------------编程问答-------------------- 友情支持 --------------------编程问答-------------------- 访问应该和GRID差不多吧 --------------------编程问答-------------------- 顶上去啊 --------------------编程问答-------------------- 用COM来操作Excel,在来一个一个的比较
可以取到一个一个的单元格的值 --------------------编程问答-------------------- //将Excel表格中某一sheet中内容放于dataGrid中显示示例:
/*
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = X:\\表.xls;Extended Properties=Excel 8.0";
            OleDbConnection myConn = new OleDbConnection(strCon);
            string strCom = " SELECT * FROM [表$] ";
            myConn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
            DataSet myDataSet;
            myDataSet = new DataSet();
            myCommand.Fill(myDataSet, "[表$]");
            myConn.Close();

            this.dataGridView1.DataSource = myDataSet.Tables[0];
*/

--------------------编程问答--------------------
顶啊
        
--------------------编程问答--------------------

            给你个思路:

先把excel数据读到datatable里。
然后设置一个bool flag[]。
用2个for循环进行比较,a1相同的行flag为true。
最后来个循环,把flag为false的写到一个excel,flag为true的写到另一个。

这和我昨天答过的从textbox取文本归类是一样的。 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 先把excel数据读到datatable里。 
然后设置一个bool   flag[]。 
用2个for循环进行比较,a1相同的行flag为true。 
最后来个循环,把flag为false的写到一个excel,flag为true的写到另一个
--------------------------------------------------------------
是个好思路,不妨试试 --------------------编程问答-------------------- 顶一下有没有更详细点的,代码正在写,呵,完成就加分了 --------------------编程问答--------------------
~~~~游过~~~~
~~~友情UP~~~~
--------------------编程问答-------------------- 先把excel数据读到datatable里。 
然后循环比较  相同的复制这一行到另一个datetable 并且删除这一行~  

最后就剩下不相同的行 2个datatable合并就好


这样省去再次循环~~  这里只是思路 具体读写操作没有说~~ --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 跟上数据结构课时遇到的问题很相似…… --------------------编程问答-------------------- 明天我要是有空的话就为了你的分数写下代码了  hoho~~~~~~~~~~~~~~ --------------------编程问答--------------------
引用 8 楼 Efcndi 的回复:
给你个思路: 

先把excel数据读到datatable里。 
然后设置一个bool flag[]。 
用2个for循环进行比较,a1相同的行flag为true。 
最后来个循环,把flag为false的写到一个excel,flag为true的写到另一个。
 

导入DadaSet代码:

        private DataSet BindDsFromExcel(string strFileDir, string strDataName)
        {
            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileDir + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
            OleDbConnection OleConn = new OleDbConnection(strConn);
            OleConn.Open();
            String sql = "SELECT * FROM  [" + strDataName + "$]";

            OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
            DataSet OleDsExcle = new DataSet();
            OleDaExcel.Fill(OleDsExcle, strDataName);
            OleConn.Close();
            return OleDsExcle;
        }


写入Excel代码:

           try
            {
                Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();//创建Excel表
                myExcel.Visible = true;
                Microsoft.Office.Interop.Excel.Workbooks myWorkbooks = myExcel.Workbooks;//创建Excel工作表
                Microsoft.Office.Interop.Excel.Workbook myWorkbook = myWorkbooks.Add(System.Reflection.Missing.Value); //创建Excel工作表
                Microsoft.Office.Interop.Excel.Worksheet myWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkbook.Worksheets[1];//创建Excel工作表Sheet1页
                Microsoft.Office.Interop.Excel.Range myrange = myWorksheet.get_Range("A1", "D1");//选择页的范围,从“A1”开始,我这是四列所以到“D1”

                object[] myhead = { "日期", "组名", "付款人", "金额" };//设置表头
                myrange.Value2 = myhead;//表头的值传入Excel表

                if (dgvRecord.Rows.Count > 0)
                {
                    myrange = myWorksheet.get_Range("A2", System.Reflection.Missing.Value);
                    int row = 0;
                    row = dgvRecord.Rows.Count;//设置表的行数
                    int col = 4;//设置表的列数
                    object[,] mydata = new object[row, col];
                    for (int i = 0; i < row; i++)//循环读取DataGridView上的数据
                    {
                        for (int j = 0; j < col; j++)
                        {
                            mydata[i, j] = dgvRecord[j, i].Value.ToString();//读取DataGridView上的值保存到mydata数组中,这里要注意哦,DataGridView是列在前,而Excel刚好相反
                        }
                    }
                    myrange = myrange.get_Resize(row, col);
                    myrange.Value2 = mydata;//把madata数组的值存到Excel表导出
                    myrange.EntireColumn.AutoFit();
                }
                myExcel = null;//清空表单
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }          

--------------------编程问答-------------------- ding --------------------编程问答-------------------- up --------------------编程问答-------------------- Microsoft.Office.Interop.Excel.Application
这句话中还需要引入using吗??我怎么打microsoft后,没有office出现呀???
--------------------编程问答--------------------
引用 21 楼 kongkongruye200703 的回复:
Microsoft.Office.Interop.Excel.Application 
这句话中还需要引入using吗??我怎么打microsoft后,没有office出现呀??? 


添加excel的com模式.然后遍历

添加引用.然后在com选项卡里找. --------------------编程问答-------------------- 找人一起挖坟
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,