基本信息
源码名称:c++ list control导入导出Excel数据
源码大小:0.18M
文件格式:.rar
开发语言:C/C++
更新时间:2018-07-02
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 1 元×
微信扫码支付:1 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
list control导入导出Excel数据,自动截取文件名和路径
list control导入导出Excel数据,自动截取文件名和路径
导出的excel如下:
// list control 1Dlg.cpp : 实现文件 // #include "stdafx.h" #include "list control 1.h" #include "list control 1Dlg.h" #include "afxdialogex.h" #include <afxdb.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // Clistcontrol1Dlg 对话框 Clistcontrol1Dlg::Clistcontrol1Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(Clistcontrol1Dlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void Clistcontrol1Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_list); } BEGIN_MESSAGE_MAP(Clistcontrol1Dlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &Clistcontrol1Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &Clistcontrol1Dlg::OnBnClickedButton2) END_MESSAGE_MAP() // Clistcontrol1Dlg 消息处理程序 BOOL Clistcontrol1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 CRect rtList; m_list.GetClientRect(rtList); m_list.InsertColumn(0, "整机号", LVCFMT_LEFT, 50); m_list.InsertColumn(1, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(2, _T("条码阅读器"), LVCFMT_LEFT, 50); m_list.InsertColumn(3, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(4, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(5, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(6, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(7, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(8, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(9, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(10, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(11, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(12, _T("显示器"), LVCFMT_LEFT, 50); m_list.InsertColumn(13, _T("显示器"), LVCFMT_LEFT, 50); m_list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); m_list.DeleteAllItems(); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void Clistcontrol1Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon 1) / 2; int y = (rect.Height() - cyIcon 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR Clistcontrol1Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void Clistcontrol1Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 ////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// m_list.InsertItem(0, "**00");//直接插入数据 m_list.SetItemText(0, 1, "**11"); m_list.SetItemText(0, 2, "**22"); m_list.SetItemText(0, 3, "**22"); m_list.SetItemText(0, 4, "52"); m_list.SetItemText(0, 5, "62"); m_list.SetItemText(0, 6, "722"); m_list.SetItemText(0, 7, "822"); m_list.SetItemText(0, 8, "922"); m_list.SetItemText(0, 9, "1022"); m_list.SetItemText(0, 10, "1122"); m_list.SetItemText(0, 11, "1222"); m_list.SetItemText(0, 12, "1322"); m_list.SetItemText(0, 13, "1422"); m_list.InsertItem(1, "1100"); m_list.SetItemText(1, 1, "1111手机"); m_list.SetItemText(1, 2, "1122笔记本"); m_list.SetItemText(1, 3, "书内容"); m_list.SetItemText(2, 4, "书内容"); m_list.InsertItem(2, "2200"); m_list.SetItemText(2, 1, "2211电脑"); m_list.SetItemText(2, 2, "2222数据"); m_list.SetItemText(2, 3, "书内容"); m_list.SetItemText(2, 4, "书内容"); m_list.InsertItem(3, "书"); m_list.SetItemText(3, 1, "书名"); m_list.SetItemText(3, 2, "书内容"); m_list.SetItemText(3, 3, "书内容"); m_list.SetItemText(3, 4, "书内容"); m_list.InsertItem(4, "书"); m_list.SetItemText(4, 1, "书名"); m_list.InsertItem(5, "书"); m_list.SetItemText(5, 1, "书名"); //m_list.InsertItem(6, "书"); //m_list.InsertItem(7, "书"); //m_list.InsertItem(8, "书"); //m_list.InsertItem(9, "书"); //m_list.InsertItem(10, "书"); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } void Clistcontrol1Dlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //方法2:大型数据,可手动输入文件名,程序自动获取 列标题名称,未创建成功。。。 //首先判断列表框中是否有记录 //if (m_list.GetItemCount() <= 0) //{ // AfxMessageBox("列表中没有记录需要保存!"); // return; //} ////打开另存为对话框 ,需要包含 #include <Afxdlgs.h> //CFileDialog dlg(FALSE, // "xls", // "FileList", // OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, // "Excel 文件(*.xls)|*.xls||"); //dlg.m_ofn.lpstrTitle = "文件列表另存为"; //if (dlg.DoModal() != IDOK) // return; //CString strFilePath; ////获得文件路径名 //strFilePath = dlg.GetPathName(); ////判断文件是否已经存在,存在则删除重建 //DWORD dwRe = GetFileAttributes(strFilePath); //if (dwRe != (DWORD)-1) //{ // DeleteFile(strFilePath); //} //CDatabase database;//数据库库需要包含头文件 #include <afxdb.h> //CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel驱动 //CString sSql, strInsert; //TRY //{ // // // 创建进行存取的字符串 // sSql.Format("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; //必设,pszText参数所指向的字符串的大小 // lvCol.pszText = strColName.GetBuffer(32); //必设,pszText 所指向的字符串的实际存储位置。 // //以上三个参数设置后才能通过 GetColumn()函数获得列标题的名称 // // for (i = 0; i< iColumnNum; i ) // { // if (!(m_list.GetColumn(i, &lvCol))) // return; // if (i<iColumnNum - 1) // { // sSql = sSql lvCol.pszText " TEXT , "; // strInsert = strInsert lvCol.pszText " , "; // // } // else // { // sSql = sSql lvCol.pszText " TEXT ) "; // strInsert = strInsert lvCol.pszText " ) VALUES ( "; // //AfxMessageBox("程序到此一游。"); // } // } // //创建Excel表格文件 // database.ExecuteSQL(sSql); // AfxMessageBox("程序到此一游。");/////////////////////////这里没有创建好文件????????????? // //循环提取记录并插入到EXCEL中 // sSql = strInsert; // char chTemp[33]; // for (j = 0; j<iRowCount; j ) // { // memset(chTemp, 0, 33); // for (i = 0; i<iColumnNum; i ) // { // m_list.GetItemText(j, i, chTemp, 33); // if (i < (iColumnNum - 1)) // { // sSql = sSql "'" chTemp "' , "; // } // else // { // sSql = sSql "'" chTemp "' ) "; // } // } // //将记录插入到表格中 // database.ExecuteSQL(sSql); // sSql = strInsert; // } // } // // 关闭Excel表格文件 // database.Close(); // AfxMessageBox("保存查询结果为Excel文件成功!"); //} //CATCH_ALL(e) //{ // //错误类型很多,根据需要进行报错。 // AfxMessageBox("Excel文件保存失败。"); //} //END_CATCH_ALL; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //方法1:小型数据,自动已时间为名,file.Write输入列标题名称 ////首先判断列表框中是否有记录 if (m_list.GetItemCount() <= 0) { AfxMessageBox("列表中没有记录需要保存!"); return; } CTime time = CTime::GetCurrentTime(); CString strRptTime = time.Format("%Y%m%d%H%M%S"); // TODO: 在此添加控件通知处理程序代码 // 实现存盘 CString buff0[1024], buff1[1024], buff2[1024], buff3[1024], buff4[1024], buff5[1024], buff6[1024], buff7[1024], buff8[1024], buff9[1024]; //CString fileName = "20180607文件名.xls";//保存路径为当前程序 CString fileName = "d:\\" strRptTime ".xls";//保存路径是d:盘根目录 CFile file(fileName, CFile::modeCreate | CFile::modeReadWrite | CFile::shareExclusive); CString strHead = _T("日期\t装载开始时间\t卡车号\t驾驶员号\t装载次数\t净载量(公吨)\t装载百分比\t装铲铲数\t系统状态标志\t装载时间\t空载运输时间\t空车停等时间\t装载运输时间\t装载停等时间\t卸载时间\t装载运输距离\t空载运输距离\t总循环时间\t装载最高速度\t装载最高速度时间\t空载最高速度\t空载最高速度时间\n"); file.Write(strHead, strHead.GetLength());//取文件列数,与下面的注释代码效果一样。 //file.Write("日期\t装载开始时间\t卡车号\t驾驶员号\t装载次数\t净载量(公吨)\t装载百分比\t装铲铲数\t系统状态标志\t装载时间\t空载运输时间\t空车停等时间\t装载运输时间\t装载停等时间\t卸载时间\t装载运输距离\t空载运输距离\t总循环时间\t装载最高速度\t装载最高速度时间\t空载最高速度\t空载最高速度时间\n", 269); //后面数字=(标题数字x2 1) (标题数字x2 1) (标题数字x2 1) (标题数字x2 1) ............,注:汉子为2,字符为1 int i = 0,a=0;//列数 int j = 0,b=0;//行数 j = m_list.GetItemCount();//读取记录行数 i = m_list.GetHeaderCtrl()->GetItemCount();//读取记录列数 if (j > 0) { for (i = 0; i<j; i ) { buff0[i] = m_list.GetItemText(i, 0);//逐条赋值,这种方式适合较小数据,大数据可整个读取 buff1[i] = m_list.GetItemText(i, 1); buff2[i] = m_list.GetItemText(i, 2); buff3[i] = m_list.GetItemText(i, 3); buff4[i] = m_list.GetItemText(i, 4); buff5[i] = m_list.GetItemText(i, 5); buff6[i] = m_list.GetItemText(i, 6); buff7[i] = m_list.GetItemText(i, 7); buff8[i] = m_list.GetItemText(i, 8); buff9[i] = m_list.GetItemText(i, 9); CString msg; //显示格式:列的条数 msg.Format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", buff0[i], buff1[i], buff2[i], buff3[i], buff4[i], buff5[i], buff6[i], buff7[i], buff8[i], buff9[i]); file.Write(msg, msg.GetLength());// } } file.Close(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //保存后再打开 CApplication m_ExlApp; CWorkbook m_ExlBook; CWorkbooks m_ExlBooks; CWorksheet m_ExlSheet; CWorksheets m_ExlSheets; CRange m_ExlRge; CFont0 font; CRange cols; LPDISPATCH lpDisp; if (!m_ExlApp.CreateDispatch(_T("Excel.Application"))) { this->MessageBox(_T("无法创建Excel应用!")); return; } //设置为可见 m_ExlApp.put_Visible(TRUE); ///////////////////下面打开保存的数据文件/////////////////// m_ExlBooks.AttachDispatch(m_ExlApp.get_Workbooks(), TRUE); m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)fileName), TRUE);//加载EXCEL模板 m_ExlSheets.AttachDispatch(m_ExlBook.get_Sheets(), TRUE);//加载Sheet页面 }