各位大哥,救救我啊 
最近老大叫编一个程序,是关于比对2个EXCEL文件里面的数据,excel文件内容如下 
EXCEL 1          EXCEL2 
cpi ci          cpi  ci 
123 56          468  46 
546 56          489  48 
132 45          456  72 
……                …… 
EXCEL1 和EXCEL2 是系统早就已经生成好了的,需要达到的目的就是 将EXCEL 1 中间不同于EXCEL 2的数据找出来,也就是说只要EXCEL 1里面有的数据而EXCEL 2里面没有,就要列出来,最后将列出来的数据保存为一个EXCEL文件。需要用C/C++写一个程序出来 
希望各位大大帮助下迷途中的我吧

解决方案 »

  1.   


    1、如果没有任何规律,没法对比;
    2、如果跟数据库表结构一样,那一条SQL语句就出来了。
      

  2.   

    可以直接在EXCEL里面用SQL语句?怎么用?
      

  3.   

    你 Google 一下,网上好多。
      

  4.   

    用VC 操作EXCEL没用过  但是你这个要是读到VC里  然后用链表操作就能做出来  
    你定义一个类 
    CExcel
    {
    public:
       int cpi;
       int ci;

    完后在C**Dlg(假定是基于对话框的)定义里面
    #include "Excel.h"(在C**Dlg.cpp中也要包含)
    完后
    CList<CExcel,&CExcel>m_list1;//第一个EXCEL的链表(每个节点包含cpi ci值)
    CList<CExcel,&CExcel>m_list2;//第二个...
    完后在你从EXCEL读数据的函数里面:
    CExcel temp;
    temp.cpi=每次读的EXCEL1中的cpi值
    temp.ci=每次读的EXCEL1中的ci值
    m_list1.AddTail(temp);同理把EXCEL2中度上来的值填到m_list2
    完后再遍历m_list1 每次都遍历一次m_list2看看有没有不一样的,如果m_list2中没找到一样的,则存进m_list2,最后把m_list2写入EXCEL即可
    int number=m_list1.GetCount();
    for(int i=0;i<number;i++)
    {
     BOOL sgn=FALSE;
     POSITION npos=m_list1.FindIndex(i);
      CExcel tempexcel1=m_list1.GetAt(npos);
     
      int number2=m_list2.GetCount();
      for(int j=0;j<number2;j++)
     {
       POSITION pos=m_list2.FindIndex(j);
       CExcel tempexcel2=m_list2.GetAt(pos);
       if((tempexcel1.cpi==tempexcel2.cpi)&&(tempexcel1.ci==tempexcel2.ci))
       {
         sgn=TRUE;
         break;
       } }
     if(sgn==FALSE)//若果没找到一样的那么添加到m_list2
     {
      m_list2.AddTail(tempexcel1);
     }
    }最后把m_list2遍历 将所有内容写到Excel中就行了 
    Ondetroy()里面要释放链表
    if(m_list1.IsEmpty()==FALSE)
    {
    m_list1.RemoveAll();
    }
    m_list2同样.