我基于VS2010撰寫的MFC軟體需要把List Control里的資料匯入到Excel,代碼百度上的都不能用,除錯好久也不知道問題在哪,求各位指教,有相關的例程最好。我先附上我的代碼,編譯可以通過,就是不能保存
void CPort16Dlg::OnBnClickedSave()
{
//首先判斷串列框中是否有記錄
if(m_list.GetItemCount() <= 0)
{
AfxMessageBox(_T("沒有要保存的資料!"));
return ;
}
//打開另存為對話框
CFileDialog dlg(FALSE,_T("*.xls"),_T("FileList"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("(*.xls)|*.xls||"));
dlg.m_ofn.lpstrTitle = _T("檔案串列另存為");
if (dlg.DoModal() != IDOK)
return ;
CString strFilePath;
strFilePath = dlg.GetPathName();//獲得檔案路徑
//判斷檔案是否已經存在,存在則洗掉重建
DWORD dwRe = GetFileAttributes(strFilePath);
if (dwRe != (DWORD)-1)
{
DeleteFile(strFilePath);
}
CDatabase database;
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)"); //Excel驅動
CString sSql,strInsert;
TRY
{
// 創建進行存取的字串
sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s")
,sDriver, strFilePath, strFilePath);
// 創建資料庫 (既Excel表格檔案)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
//獲得列別框總列數
int iColumnNum,iRowCount;
LVCOLUMN lvCol;
CString strColName; //用于保存列標題名稱
int i,j; //列、行回圈引數
iColumnNum = m_list.GetHeaderCtrl()->GetItemCount();
iRowCount = m_list.GetItemCount();
sSql = "CREATE TABLE DSO_DX(";
strInsert = "INSERT INTO DSO_DX(";
//獲得列標題名稱
lvCol.mask = LVCF_TEXT;//說明LVCOLUMN變數中pszText引數有效
lvCol.cchTextMax = 32;//psz引數所指向的字串的大小
lvCol.pszText = strColName.GetBuffer(32);//所指向的字串的實際存盤位置
//以上三個引數設定后才能通過GetColumn()函式獲得列標題的名稱
for (i = 0;i < iColumnNum;i++)
{
if (!(m_list.GetColumn(i,&lvCol)))
return ;
if (i < iColumnNum-1)
{
sSql = sSql + lvCol.pszText + _T("TEXT,");
strInsert = strInsert + lvCol.pszText + _T(",");
}
else
{
sSql = sSql + lvCol.pszText + _T("TEXT)");
strInsert = strInsert + lvCol.pszText + _T(") VALUES (");
}
}
//創建ExCEL檔案
database.ExecuteSQL(sSql);
AfxMessageBox(_T("此前成功!"));
//回圈提取記錄并插入到EXCEL中
sSql = strInsert;
char chTemp[100];
for (j=0;j<iColumnNum;i++)
{
memset(chTemp,0,100);
for (i=0;i<iColumnNum;i++)
{
m_list.GetItemText(j,i,_T("chTemp"),100);
if (i<(iColumnNum-1))
{
sSql = sSql + _T(" chTemp,") ;
}
else
{
sSql = sSql + _T(" chTemp)") ;
}
}
//將記錄插入表格
database.ExecuteSQL(sSql);
sSql = strInsert;
}
}
//關閉Excel表格檔案
database.Close();
AfxMessageBox(_T("保存為Excel檔案成功!"));
}
CATCH_ALL(e)
{
//錯誤型別很多,根據需要報錯
AfxMessageBox(_T("保存失敗!"));
}
END_CATCH_ALL; */
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/142528.html
標籤:基礎類
上一篇:流化和序列化一樣嗎
下一篇:在靜態庫中使用MFC的問題
