MFC将ListCtrl列表导出到Excel-采用文件流写Excel兼容Html格式(不需要Excel环境)
2017-11-29 17:30
447 查看
如标题所言,将ListCtrl的内容导出到Excel文件。不需要Excel环境支持!
TCHAR szFilter[] = _T("Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*||"); CFileDialog file(FALSE, _T(".xls"), _T("TransForm"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this); CString strSavePath = _T(""); //!<保存路径 if(IDOK == file.DoModal()) { strSavePath = file.GetPathName(); } //!<导出的xls文件路径 if (strSavePath != _T("")) { std::string szTitle = "TransForm"; std::string szHander = ""; szHander = "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>"; szHander = szHander + "<x:ExcelWorksheet><x:Name>" + CFunLib::MakeSafeHTMLText(szTitle) + "</x:Name><x:WorksheetOptions><x:Print><x:ValidPrinterInfo /></x:Print></x:WorksheetOptions>"; szHander += "</x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" /><style type=\"text/css\">td {mso-number-format:''\@'';}</style></head><body><div><table><tr>"; //!<html结束符号 std::string szEnd = "</table></div></body></html>"; std::string szTR = "<tr>"; std::string szEndTR = "</tr>"; CHeaderCtrl* pHeaderCtrl = m_lstResult.GetHeaderCtrl(); int nCloumn = pHeaderCtrl->GetItemCount(); ///列数 std::fstream file; file.open(strSavePath, std::ios_base::out); file.write(szHander.c_str(), szHander.length()); //!<写入标题行 std::string szFiled = "<td></td><td align=\"center\" valign=\"middle\" height=\"50\"><strong>" + CFunLib::MakeSafeHTMLText(szTitle) + "</strong></td></tr><tr></tr>"; file.write(szFiled.c_str(), szFiled.length()); file.write(szTR.c_str(), szTR.length()); //!<根据列头写单元格 char szText[MAX_PATH] = {0}; LVCOLUMN LvColumn; LvColumn.mask = LVCF_TEXT; LvColumn.pszText = szText; //!<标题名称 LvColumn.cchTextMax = MAX_PATH; for (int i = 0; i < nCloumn; ++i) { if(m_lstResult.GetColumnWidth(i) <= 0) continue; //!<如果列宽为0则视为隐藏 m_lstResult.GetColumn(i, &LvColumn); szFiled = "<td>" + CFunLib::MakeSafeHTMLText(LvColumn.pszText) + "</td>"; file.write(szFiled.c_str(), szFiled.length()); } file.write(szEndTR.c_str(), szEndTR.length()); CString strValue = _T(""); int nItemsCount = m_lstResult.GetItemCount(); //!<获取列表总行数 if (nItemsCount > 0) { for(int i = 0; i < nItemsCount; ++i) //!<一行一行的写,遍历行在外层循环 { file.write(szTR.c_str(), szTR.length()); for (int j = 0; j < nCloumn; ++j) { if(m_lstResult.GetColumnWidth(j) <= 0) continue; strValue = m_lstResult.GetItemText(i, j); szFiled = "<td>" + CFunLib::MakeSafeHTMLText(strValue.operator LPCTSTR()) + "</td>"; file.write(szFiled.c_str(), szFiled.length()); } file.write(szEndTR.c_str(), szEndTR.length()); } file.write(szEndTR.c_str(), szEndTR.length()); } file.close(); ShellExecute(NULL, _T("open"), strSavePath, NULL, NULL, SW_SHOW); }
std::string MakeSafeHTMLText(const std::string& v_szContent) { std::string szResult = ""; for (int i = 0; i < v_szContent.length(); ++i) { char ch = v_szContent[i]; switch(ch) { case '<': szResult += "<"; case '>': szResult += ">"; case '&': szResult += "&"; case '"': szResult += """; case '\'': szResult += "'"; break; default: szResult += ch; break; } } return szResult; }
相关文章推荐
- asp.net中通过html格式导出excel文件
- 如何使用html表格自定义或采用tableexport.js第三方插件以excel格式导出
- asp.net导出excel-一行代码实现excel、xml、pdf、word、html、csv等7种格式文件导出功能而且美观-SNF快速开发平台
- 如何使用html表格自定义或采用tableexport.js第三方插件以excel格式导出
- Spring MVC+ Ireport 做统计报表,导出HTML、EXCEL等格式的文件,打印;
- poi导入导出excel文件,兼容.xls和.xlsx两种格式
- Html导出Excel文件(兼容所有浏览器,支持设置文件名)
- C# 导出 excel 复杂格式 html导出
- mvc4 强大的导出和不需要上传文件的批量导入EXCEL--SNF快速开发平台3.1
- 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
- 用HTML 格式导出Excel 时,如何保留显示网格线 转载
- EasyUI入门9 EasyUI+NPOI+QrCode实现带二维码复杂格式excel文件导出
- java实现爬虫技术,读取txt,word,excel,ppt,pdf,html等格式的文件
- 导出CSV格式文件,用Excel打开乱码的解决办法
- nginx +phpfastcgi 环境下 导出excel文件,超时,数据被截断问题,解决
- jasperreport + ireport 导出各种类型文件(word,excel,html,pdf,打印) .
- 在VS2010中利用MFC读取word、ppt、excel格式文件
- 随便写的一个小程序:将有道阅读导出的rss列表转换成Foxmail的rss兼容的导入文件
- 采用BIFF8规发二进制导出写Excel文件的绿色函数,速度爆快.
- java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.