请问:如何将CListCtrl控件里的数据导入到excel中?(以下我摘入,并经过我晕改的代码,请各位能指点一二!谢谢)
void CDIALOG_PERSONNEL::OnButton1()
{
// TODO: Add your control notification handler code here
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)";
CString sExcelFile,sPath;
CString sSql; //»ñÈ¡Ö÷³ÌÐòËùÔÚ·¾¶,´æÔÚsPathÖÐ
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos + 1);
CString sFileName;
CFileDialog fDlg(FALSE, "xls", sPath + "aaaa.xls",
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"xls File (*.xls)|*.xls|");
// CFileDialog fDlg(FALSE,//Save;
// "xls",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Microsoft Excel 2000 (*.xls)|*.xls|ËùÓÐÎļþ(*.*)|*.*||",this);
if(fDlg.DoModal()==IDOK)
{
sFileName = fDlg.GetPathName();
}
else
return; sExcelFile = sFileName; // Òª½¨Á¢µÄExcelÎļþ
TRY
{
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", sDriver,sExcelFile,sExcelFile); if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
sSql = "CREATE TABLE Raport (Col1 TEXT,Col2 TEXT,Col3 TEXT,Col4 TEXT)"; database.ExecuteSQL(sSql); CString Mydata1 ,Mydata2 ,Mydata3 ,Mydata4 ;
//int ii = 0; //while (ii++<m_basic.GetItemCount()){
Mydata1 ="1";//m_basic.GetItemText(ii,0);
Mydata2 ="2";//m_basic.GetItemText(ii, 1);
Mydata3 ="3";//m_basic.GetItemText(ii, 2);
Mydata4 ="4";//m_basic.GetItemText(ii, 3);
//} sSql.Format("INSERT INTO Raport (Mydata1 ,Mydata2 ,Mydata3 ,Mydata4 ) VALUES ('%s','%s','%s','%s')", Mydata1 ,Mydata2 ,Mydata3 ,Mydata4 );
database.ExecuteSQL(sSql);
}
}
database.Close();
AfxMessageBox("ExcelÎļþдÈë³É¹¦£¡"); CATCH_ALL(e)
{
TRACE1("Driver not installed: %s",sDriver);
}
END_CATCH_ALL;
}
请问为什么Excel表中的列名能输入,空间的内容输入不进去!
void CDIALOG_PERSONNEL::OnButton1()
{
// TODO: Add your control notification handler code here
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)";
CString sExcelFile,sPath;
CString sSql; //»ñÈ¡Ö÷³ÌÐòËùÔÚ·¾¶,´æÔÚsPathÖÐ
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos + 1);
CString sFileName;
CFileDialog fDlg(FALSE, "xls", sPath + "aaaa.xls",
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"xls File (*.xls)|*.xls|");
// CFileDialog fDlg(FALSE,//Save;
// "xls",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Microsoft Excel 2000 (*.xls)|*.xls|ËùÓÐÎļþ(*.*)|*.*||",this);
if(fDlg.DoModal()==IDOK)
{
sFileName = fDlg.GetPathName();
}
else
return; sExcelFile = sFileName; // Òª½¨Á¢µÄExcelÎļþ
TRY
{
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", sDriver,sExcelFile,sExcelFile); if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
sSql = "CREATE TABLE Raport (Col1 TEXT,Col2 TEXT,Col3 TEXT,Col4 TEXT)"; database.ExecuteSQL(sSql); CString Mydata1 ,Mydata2 ,Mydata3 ,Mydata4 ;
//int ii = 0; //while (ii++<m_basic.GetItemCount()){
Mydata1 ="1";//m_basic.GetItemText(ii,0);
Mydata2 ="2";//m_basic.GetItemText(ii, 1);
Mydata3 ="3";//m_basic.GetItemText(ii, 2);
Mydata4 ="4";//m_basic.GetItemText(ii, 3);
//} sSql.Format("INSERT INTO Raport (Mydata1 ,Mydata2 ,Mydata3 ,Mydata4 ) VALUES ('%s','%s','%s','%s')", Mydata1 ,Mydata2 ,Mydata3 ,Mydata4 );
database.ExecuteSQL(sSql);
}
}
database.Close();
AfxMessageBox("ExcelÎļþдÈë³É¹¦£¡"); CATCH_ALL(e)
{
TRACE1("Driver not installed: %s",sDriver);
}
END_CATCH_ALL;
}
请问为什么Excel表中的列名能输入,空间的内容输入不进去!
解决方案 »
- VC++如何实现控件Datetimerpiker中的日期不能超前显示
- IP Address控件怎样显示CString变量啊?
- 怎样获得某一个进程所调所有线程的起始地址?
- 在ATL中怎么声明char*类型的变量啊?idl中怎么定义
- 关于CTablCtrl控件使用问题
- PeekMessage能peek到TIMER消息吗?
- 我坚信MFC不是没饭吃,而是西餐 ——我是高中生
- cegui中的窗口可以再次用opengl画线之类的么?
- ??1bit转8bit,用CreateDIBSection显示到DC上,为什么全黑?
- 请问再ASP中如何调用用VC写的activex dll
- 如何让下面的C代码运作
- 有关文本文件操作的问题。
dbf是可以excel可以识别的
COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); // Instantiate Excel
_Application oApp;
oApp.CreateDispatch("Excel.Application");
if (!oApp)
{
AfxMessageBox("Cannot start Excel.");
return;
} //Get the Workbooks collection so that you can add a new
//workbook
Workbooks oBooks = oApp.GetWorkbooks();
_Workbook oBook = oBooks.Add(vOpt); //Get the Worksheets collection of the new Workbook so that
//you can get the IDispatch for the first WorkSheet
Worksheets oSheets = oBook.GetWorksheets();
_Worksheet oSheet = oSheets.GetItem(COleVariant((short)1)); //*** ADD DATA TO THE WORKSHEET //Add Headers to Row 1 of the worksheet
Range oRange;
oRange = oSheet.GetRange(COleVariant("A1"), vOpt);
oRange.SetValue(COleVariant("Date"));
oRange = oSheet.GetRange(COleVariant("B1"), vOpt);
oRange.SetValue(COleVariant("Order #"));
oRange = oSheet.GetRange(COleVariant("C1"), vOpt);
oRange.SetValue(COleVariant("Amount"));
oRange = oSheet.GetRange(COleVariant("D1"), vOpt);
oRange.SetValue(COleVariant("Tax")); //Create a safe array that is NUMROWS x 3 --
//column 1 will contain dates column 2 will contain strings
//and column 2 will contain numbers
COleSafeArray sa;
DWORD dwElements[2];
dwElements[0]= NUMROWS; //Number of rows
dwElements[1]= 3; //Number of columns
sa.Create(VT_VARIANT, 2, dwElements); //Populate the safe array with the data
long index[2];
long lRow;
COleVariant vTemp;
COleDateTime vDateTime;
CString s; for(lRow=0;lRow<=NUMROWS-1;lRow++)
{
index[0] = lRow;
//Fill the first column with dates
index[1] = 0;
vDateTime.SetDate(1999, rand()%12, rand()%28);
sa.PutElement(index, (COleVariant)vDateTime); //Fill the second column with strings
index[1] = 1;
s.Format("ORDR%d", lRow+1000);
vTemp = s;
sa.PutElement(index, vTemp); //Fill the third column with numbers
index[1] = 2;
vTemp = (long)rand();
sa.PutElement(index, vTemp);
} //Fill a range, starting at A2 with the data in
//the safe array
oRange = oSheet.GetRange(COleVariant("A2"), vOpt);
oRange = oRange.GetResize(COleVariant((short)NUMROWS),
COleVariant((short)3));
oRange.SetValue(sa);
sa.Detach(); //*** ADD FORMULAS TO THE WORKSHEET //Fill the fourth column with a formula to compute the
//sales tax. Note that the formula uses a "relative"
//cell reference so that it fills properly.
oRange = oSheet.GetRange(COleVariant("D2"), vOpt);
oRange = oRange.GetResize(COleVariant((long)NUMROWS),
COleVariant((long)1));
oRange.SetFormula(COleVariant("=C2*0.07")); //*** FORMAT THE WORKSHEET
oRange = oSheet.GetRange(COleVariant("A1"), COleVariant("D1"));
Font oFont = oRange.GetFont();
oFont.SetBold(COleVariant((short)TRUE));//Apply Bold to Headers
oRange = oRange.GetEntireColumn();
oRange.AutoFit(); //AutoFit the columns 1:4 //Make Excel visible and give the user control
oApp.SetVisible(TRUE);
oApp.SetUserControl(TRUE);
Mydata1 =m_basic.GetItemText(ii,0);
Mydata2 =m_basic.GetItemText(ii, 1);
Mydata3 =m_basic.GetItemText(ii, 2);
Mydata4 =m_basic.GetItemText(ii, 3);
}
这句有问题么?为什么excel中不显示控件中的内容呢?