CListCtrl打印,导出到excel.docx_第1页
CListCtrl打印,导出到excel.docx_第2页
CListCtrl打印,导出到excel.docx_第3页
CListCtrl打印,导出到excel.docx_第4页
CListCtrl打印,导出到excel.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*/参数:/pList需要导出的List控件指针/strTitle导出的数据表标题/说明:/导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为”/对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括/列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。/*/void ExportListToExcel(CListCtrl* pList, CString strTitle)CString warningStr;if (pList-GetItemCount ()0) CDatabase database;CString sDriver;CString sExcelFile;CString sSql;CString tableName = strTitle;/ 检索是否安装有Excel驱动 Microsoft Excel Driver (*.xls)sDriver = GetExcelDriver();if (sDriver.IsEmpty()/ 没有发现Excel驱动AfxMessageBox(没有安装Excel!/n请先安装Excel软件才能使用导出功能!);return;/默认文件名if (!GetDefaultXlsFileName(sExcelFile)return;/ 创建进行存取的字符串sSql.Format(DRIVER=%s;DSN=;FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=/%s/;DBQ=%s,sDriver, sExcelFile, sExcelFile);/ 创建数据库 (既Excel表格文件)if( database.OpenEx(sSql,CDatabase:noOdbcDialog) )/ 创建表结构int i;LVCOLUMN columnData;CString columnName;int columnNum = 0;CString strH;CString strV;sSql = ;strH = ;columnData.mask = LVCF_TEXT;columnData.cchTextMax =100;columnData.pszText = columnName.GetBuffer (100);for(i=0;pList-GetColumn(i,&columnData);i+)if (i!=0)sSql = sSql + , ;strH = strH + , ;sSql = sSql + + columnData.pszText + TEXT;strH = strH + + columnData.pszText + ;columnName.ReleaseBuffer ();columnNum = i;sSql = CREATE TABLE + tableName + ( + sSql + ) ;database.ExecuteSQL(sSql);/ 插入数据项int nItemIndex;for (nItemIndex=0;nItemIndexGetItemCount ();nItemIndex+)strV = ;for(i=0;iGetItemText(nItemIndex,i) + ;sSql = INSERT INTO + tableName+ (+ strH + )+ VALUES(+ strV + );database.ExecuteSQL(sSql);/ 关闭数据库database.Close();warningStr.Format(导出文件保存于%s!,sExcelFile);AfxMessageBox(warningStr);BOOL GetDefaultXlsFileName(CString& sExcelFile)/默认文件名:yyyymmddhhmmss.xlsCString timeStr;CTime day;day=CTime:GetCurrentTime();int filenameday,filenamemonth,filenameyear,filehour,filemin,filesec;filenameday=day.GetDay();/ddfilenamemonth=day.GetMonth();/mm月份filenameyear=day.GetYear();/yyyyfilehour=day.GetHour();/hhfilemin=day.GetMinute();/mm分钟filesec=day.GetSecond();/sstimeStr.Format(%04d%02d%02d%02d%02d%02d,filenameyear,filenamemonth,filenameday,filehour,filemin,filesec);sExcelFile = timeStr + .xls;/ prompt the user (with all document templates)CFileDialog dlgFile(FALSE,.xls,sExcelFile);CString title;CString strFilter;title = 导出;strFilter = Excel文件(*.xls);strFilter += (TCHAR)/0; / next string pleasestrFilter += _T(*.xls);strFilter += (TCHAR)/0; / last stringdlgFile.m_ofn.nMaxCustFilter+;dlgFile.m_ofn.nFilterIndex = 1;/ append the *.* all files filterCString allFilter;VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER);strFilter += allFilter;strFilter += (TCHAR)/0; / next string pleasestrFilter += _T(*.*);strFilter += (TCHAR)/0; / last stringdlgFile.m_ofn.nMaxCustFilter+;dlgFile.m_ofn.lpstrFilter = strFilter;dlgFile.m_ofn.lpstrTitle = title;if (dlgFile.DoModal()=IDCANCEL)return FALSE; / open cancelledsExcelFile.ReleaseBuffer();if (MakeSurePathExists(sExcelFile,true)if(!DeleteFile(sExcelFile) / delete the fileAfxMessageBox(覆盖文件时出错!);return FALSE;sExcelFile=dlgFile.GetPathName();return TRUE;/*/名称:GetExcelDriver/功能:获取ODBC中Excel驱动/作者:徐景周(jingzhou_)/组织:未来工作室(Future Studio)/日期:2002.9.1/*/CString GetExcelDriver() char szBuf2001; WORD cbBufMax = 2000; WORD cbBufOut; char *pszBuf = szBuf; CString sDriver; / 获取已安装驱动的名称(涵数在odbcinst.h里) if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut) return ; / 检索已安装的驱动是否有Excel. do if (strstr(pszBuf, Excel) != 0) /发现 ! sDriver = CString(pszBuf); break; pszBuf = strchr(pszBuf, /0) + 1; while (pszBuf1 != /0); return sDriver;/*/BOOL MakeSurePathExists( CString &Path,bool FilenameIncluded)/参数:/Path路径/FilenameIncluded路径是否包含文件名/返回值:/文件是否存在/说明:/判断Path文件(FilenameIncluded=true)是否存在,存在返回TURE,不存在返回FALSE/自动创建目录/*/BOOL MakeSurePathExists( CString &Path,bool FilenameIncluded)int Pos=0;while(Pos=Path.Find(/,Pos+1)!=-1)CreateDirectory(Path.Left(Pos),NULL);if(!FilenameIncluded)CreateDirectory(Path,NULL);/return (!FilenameIncluded)?!_access(Path,0):/!_access(Path.Left(Path.ReverseFind(/),0);return !_access(Path,0);/*/ BOOL PrintListCtrl(CListCtrl &list)/参数:/list需要打印的列表控件/返回值:/TRUE:打印成功/FALSE:打印失败/*/BOOL PrintListCtrl(CListCtrl &list) PRINTDLG pd; pd.lStructSize = sizeof(PRINTDLG); pd.Flags = PD_RETURNDC; pd.hDC = NULL; pd.hwndOwner = NULL; pd.hInstance = NULL; pd.nMaxPage = 1; pd.nMinPage = 1; pd.nFromPage = 1; pd.nToPage = 1; pd.nCopies = 1; pd.hDevMode = NULL; pd.hDevNames = NULL; /显示打印对话框,由用户来设定纸张大小等。 if(!PrintDlg(&pd) return FALSE; ASSERT(pd.hDC!=NULL); int nHorRes = GetDeviceCaps(pd.hDC, HORZRES); int nVerRes = GetDeviceCaps(pd.hDC, VERTRES); int nXMargin = 2; int nYMargin = 2; TEXTMETRIC tm; GetTextMetrics(pd.hDC, &tm); int nCharHeight = tm.tmHeight; int nCharWidth = tm.tmAveCharWidth; CHeaderCtrl* pHeader = list.GetHeaderCtrl(); /获得行,列的个数 int nColCount = pHeader-GetItemCount(); int nLineCount = list.GetItemCount(); int ColOrderArray100; COLATT ca100; list.GetColumnOrderArray(ColOrderArray, nColCount); int nColX =nXMargin*nCharWidth; /检索各列的信息,确定列标题的内容长度。 for(int i =0 ; i nHorRes) DeleteDC(pd.hDC); AfxMessageBox(字段太多,无法在一行内打印,请试用较大的纸,或横向打印。); return FALSE; DOCINFO di; di.cbSize = sizeof(DOCINFO); di.lpszDocName = ListCtrl Data Printing; di.lpszOutput = (LPTSTR) NULL; di.lpszDatatype = (LPTSTR) NULL; di.fwType = 0; StartDoc(pd.hDC, &di); StartPage(pd.hDC); /调整各列的宽度,以使各列在后面的打印输出时更均匀的打印在纸上。 int space = (nHorRes-nXMargin*nCharWidth-nColX) / (nColCount -1); for(inti =1; inColCount; i+) cai.nPrintX += i*space; /输出列标题 for(inti =0; inColCount; i+) TextOut(pd.hDC, cai.nPrintX, nYMargin, cai.strColText, strlen(cai.strColText); int nMaxLinePerPage = nVerRes/nCharHeight -3; int nCurPage =1; /输出各列的数据 for(int i=0; inLineCount; i+) for(int j =0; j nMaxLinePerPag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论