各位大哥,救救我啊
最近老大叫编一个程序,是关于比对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++写一个程序出来
希望各位大大帮助下迷途中的我吧
最近老大叫编一个程序,是关于比对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、如果没有任何规律,没法对比;
2、如果跟数据库表结构一样,那一条SQL语句就出来了。
你定义一个类
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同样.