分成两个部分:
1、从listview中读出数据
2、向excel中写入数据。
//在csdn中就可以找到答案
1、从listview中读出数据
2、向excel中写入数据。
//在csdn中就可以找到答案
解决方案 »
- 分离字符串 如 C:\\0D:\\0E:\\0F:\\0\0
- 想做一个字符串转数学运算模版类
- *******如何读写一个线程的内核数据结构(比如:PC,堆栈,通用寄存器等)******
- 关于切分窗口和CFormView的问题!
- 支票套打
- 如何在win2000下用ADO更新paradox数据库?
- 关于CFrameWnd与CDockBar,CControlBar与CDockContext的问题,
- 怎样生成-0.2到0.2之间的随机数
- VS2008中怎么使用updatable()函数?
- 谁知道邮件 msg 文件格式(带附件)?50分,无内容
- DLL中创建窗口,实现窗口消息处理
- 有人用WINDOWS写字板吗?
{
CString strPathName;
m_ctrlPathName.GetWindowText(strPathName); CString strPath,strSuffix; // 后缀
for( int k=strPathName.GetLength(); k>=0; k-- ){
if (strPathName.GetAt(k) == _T('\\')){
strPath=strPathName.Left(k);
strSuffix=strPathName.Right(strPathName.GetLength()-k);
break;
}
}
if(strPath.GetLength()<3)
strPath=strPath+"\\"; //如果是根目录 要加上"\\",否则判断出问题
if(strSuffix.GetLength()<5||strSuffix.Right(4)!=".xls")
{
AfxMessageBox("文件名不合法", MB_OK|MB_ICONEXCLAMATION);
return;
}
if(CPathDialog::MakeSurePathExists(strPath)==0)
{
CString strTemp;
DeleteFile(strPathName);
CSpreadSheet dataFile(strPathName, "DataSheet");
CStringArray sampleArray;
CStringArray strRow;
sampleArray.RemoveAll();
sampleArray.Add("BOM号");
sampleArray.Add("型号");
sampleArray.Add("工序");
sampleArray.Add("完成数量");
sampleArray.Add(strAtten);
dataFile.AddHeaders(sampleArray);
dataFile.BeginTransaction();
for(int i=0;i<iRow;i++)
{
for(int j=1;j<=iColumn;j++)
{
strTemp.Empty();
strTemp=m_ctrlList.GetItemText(i,j);
strRow.Add(strTemp);
}
dataFile.AddRow(strRow);
strRow.RemoveAll();
}
dataFile.Commit();
}
}
CString m_dbdriver; //要生成的EXCEL文件的目录
char m_path[MAX_PATH]; //获取路径用的数组
CString m_strdir; //包括EXCEL文件名在内的路径名.
CString m_strsql; //SQL命令语句,用m_db可直接执行.B,在OnInitDialog方法中,生成一个xls文件,并插入两条记录,可在TRY语句中进行,因为这里面要创建一张表,当再次启动程序时,会有异常发生,说表已经存在了,这时就避免了重复创建和插入.代码如下:m_dbdriver="MICROSOFT EXCEL DRIVER (*.XLS)";
GetCurrentDirectory(MAX_PATH,m_path);
m_strdir=m_path;
m_strdir+="//test.xls"; //上面初始化各个变量.
m_strsql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_dbdriver,m_strdir,m_strdir);
TRY
{
if (m_db.OpenEx(m_strsql,CDatabase::noOdbcDialog))
{
m_strsql="Create Table OdbcExl(Name Text,Age Number,Gener Text)";
m_db.ExecuteSQL(m_strsql);
m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Bob',34,'Male')";
m_db.ExecuteSQL(m_strsql);
m_strsql="Insert Into OdbcExl(Name,Age,Gener) Values('Jane',23,'Female')";
m_db.ExecuteSQL(m_strsql); m_db.Close();
}
}
CATCH_ALL(e)
{
// e->ReportError();
m_db.Close();
return FALSE;
}
END_CATCH_ALL;C,其实上面已经达到了答题人的要求,但作为一个程序,这也太不像话了,于是我又稍微加了点不值一提的东西,在对话框上输入信息,再插入到EXCEL表中去,这一切都在按下"插入"按钮后发生: UpdateData(); m_strsql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", m_dbdriver,m_strdir,m_strdir); TRY
{
if (m_db.OpenEx(m_strsql,CDatabase::noOdbcDialog))
{
m_strsql.Format("Insert into OdbcExl(Name,Age,Gener)Values('%s',%d,'%s')",m_name,m_age,m_gener);
m_db.ExecuteSQL(m_strsql);
}
}
CATCH_ALL(e)
{
e->ReportError();
// db.Close();
}
END_CATCH_ALL;
m_db.Close();可以说,只要对CDatabase稍有了解,对SQL语句稍有了解,这个问题就很容易解决,如果要说这是一个针对Excel文件操作的方法,那是因为在OpenEx初始化数据库对象(不是"打开"哦)时用的文件后缀名为.xls而已,我们可以像在普通的数据库中一样进行其他操作,如用SELECT语句来读取EXCEL文件的内容等
http://wenku.baidu.com/view/669210c3d5bbfd0a79567350.html