各位大侠:
我在做毕设时遇到了这样一个问题(如题),我不知道平时我们常见的那个save as是怎么工作的
我在程序中也可以选程序的保存路径,但是确定后,按照指定路径去找,什么都没有
还有大家看看我从listctrl控件中取已经显示的记录,然后将它们写入Excel表有没有错误,还有什么改进意见
先谢谢了,我的代码如下:
bool CReaderDlg::OnMenuSave()
{
// TODO: Add your command handler code here
CFileDialog dlg(false,"","",NULL,"Excel文件(*.xls)|*.xls");//构造标准的windows文件对话框对象
if(dlg.DoModal()!=IDOK)
return false;
AfxGetApp()->BeginWaitCursor();
CString sExcelFile;
sExcelFile = dlg.GetPathName();//在对话框中获得文件的完整路径
int nPos = sExcelFile.ReverseFind('\\'); //寻找字符\返回索引号
CString sName = sExcelFile.Right(sExcelFile.GetLength()-nPos-1); //GetLength()获得控件中的字符数目。获得文件名
nPos = sName.Find('.');
sName = sName.Left(nPos);
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sSql; TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile); // 创建数据库 (即Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// 创建表结构(图书证号、姓名......)
sSql.Format ("CREATE TABLE %s (CarDId TEXT,Name TEXT,Sex TEXT, Department TEXT,Class TEXT,Rank TEXT,Phone NUMBER,Address TEXT,Manager TEXT)",sName);
database.ExecuteSQL(sSql);
int nLineCount = m_ctrlreader.GetItemCount();
CString tempArray[9]; //临时数组变量,用来存放每行9个字段的值
for(int i=0;i<=nLineCount;i++) //i代表行
{
for(int j=0;j<9;j++) //j代表列
{
tempArray[j]=m_ctrlreader.GetItemText(i,j);
}
sSql.Format("insert into %s values('%s','%s','%s','%s','%s','%s',%d,'%s','%s')",sName,tempArray[0],tempArray[1],tempArray[2],tempArray[3],tempArray[4],tempArray[5],tempArray[6],tempArray[7],tempArray[8]);
database.ExecuteSQL(sSql);
}
// 关闭数据库
database.Close();
}
} CATCH_ALL(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
//AfxMessageBox(e->m_strError);
}
END_CATCH_ALL;
AfxGetApp()->EndWaitCursor();
}
我在做毕设时遇到了这样一个问题(如题),我不知道平时我们常见的那个save as是怎么工作的
我在程序中也可以选程序的保存路径,但是确定后,按照指定路径去找,什么都没有
还有大家看看我从listctrl控件中取已经显示的记录,然后将它们写入Excel表有没有错误,还有什么改进意见
先谢谢了,我的代码如下:
bool CReaderDlg::OnMenuSave()
{
// TODO: Add your command handler code here
CFileDialog dlg(false,"","",NULL,"Excel文件(*.xls)|*.xls");//构造标准的windows文件对话框对象
if(dlg.DoModal()!=IDOK)
return false;
AfxGetApp()->BeginWaitCursor();
CString sExcelFile;
sExcelFile = dlg.GetPathName();//在对话框中获得文件的完整路径
int nPos = sExcelFile.ReverseFind('\\'); //寻找字符\返回索引号
CString sName = sExcelFile.Right(sExcelFile.GetLength()-nPos-1); //GetLength()获得控件中的字符数目。获得文件名
nPos = sName.Find('.');
sName = sName.Left(nPos);
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sSql; TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile); // 创建数据库 (即Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// 创建表结构(图书证号、姓名......)
sSql.Format ("CREATE TABLE %s (CarDId TEXT,Name TEXT,Sex TEXT, Department TEXT,Class TEXT,Rank TEXT,Phone NUMBER,Address TEXT,Manager TEXT)",sName);
database.ExecuteSQL(sSql);
int nLineCount = m_ctrlreader.GetItemCount();
CString tempArray[9]; //临时数组变量,用来存放每行9个字段的值
for(int i=0;i<=nLineCount;i++) //i代表行
{
for(int j=0;j<9;j++) //j代表列
{
tempArray[j]=m_ctrlreader.GetItemText(i,j);
}
sSql.Format("insert into %s values('%s','%s','%s','%s','%s','%s',%d,'%s','%s')",sName,tempArray[0],tempArray[1],tempArray[2],tempArray[3],tempArray[4],tempArray[5],tempArray[6],tempArray[7],tempArray[8]);
database.ExecuteSQL(sSql);
}
// 关闭数据库
database.Close();
}
} CATCH_ALL(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
//AfxMessageBox(e->m_strError);
}
END_CATCH_ALL;
AfxGetApp()->EndWaitCursor();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货