【MFC CListCtrl控件内容导出Excel/.csv文件】

这篇具有很好参考价值的文章主要介绍了【MFC CListCtrl控件内容导出Excel/.csv文件】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CFileDialog FileDialog(FALSE, _T("*.xls"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Microsoft Excel 2000(*.xls)|*.xls|所有文件(*.*)"), this);
	if (FileDialog.DoModal() != IDOK)
	{
		return;
	}
	CString cStrFile = FileDialog.GetPathName();  //选择保存路径名称

	if (::PathFileExists(cStrFile))
		DeleteFile(cStrFile);

	//CString cStrFile = _T("E:\\myexcel.xls");
	COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

	CApplication app; //Excel程序
	CWorkbooks books; //工作簿集合
	CWorkbook book;  //工作表
	CWorksheets sheets;  //工作簿集合
	CWorksheet sheet; //工作表集合
	CRange range; //使用区域

	CoUninitialize();

	book.PrintPreview(_variant_t(false));
	if (CoInitialize(NULL) == S_FALSE)
	{
		MessageBox(_T("初始化COM支持库失败!"));
		return;
	}

	if (!app.CreateDispatch(_T("Excel.Application"))); //创建IDispatch接口对象
	{
		//MessageBox(_T("Error!"));

	}


	books = app.get_Workbooks();
	book = books.Add(covOptional);


	sheets = book.get_Worksheets();
	sheet = sheets.get_Item(COleVariant((short)1));  //得到第一个工作表

	CHeaderCtrl   *pmyHeaderCtrl = l_list.GetHeaderCtrl(); //获取表头

	int   m_cols = pmyHeaderCtrl->GetItemCount(); //获取列数
	int   m_rows = l_list.GetItemCount();  //获取行数


	TCHAR     lpBuffer[256];

	HDITEM   hdi; //This structure contains information about an item in a header control. This structure has been updated to support header item images and order values.
	hdi.mask = HDI_TEXT;
	hdi.pszText = lpBuffer;
	hdi.cchTextMax = 256;

	CString   colname;
	CString strTemp;

	int   iRow, iCol;
	for (iCol = 0; iCol < m_cols; iCol++)//将列表的标题头写入EXCEL 
	{
		GetCellName(1, iCol + 1, colname); //(colname就是对应表格的A1,B1,C1,D1)

		range = sheet.get_Range(COleVariant(colname), COleVariant(colname));

		pmyHeaderCtrl->GetItem(iCol, &hdi); //获取表头每列的信息

		range.put_Value2(COleVariant(hdi.pszText));  //设置每列的内容

		int   nWidth = l_list.GetColumnWidth(iCol) / 6;

		//得到第iCol+1列   
		range.AttachDispatch(range.get_Item(_variant_t((long)(iCol + 1)), vtMissing).pdispVal, true);

		//设置列宽  
		range.put_ColumnWidth(_variant_t((long)nWidth));

	}

	range = sheet.get_Range(COleVariant(_T("A1 ")), COleVariant(colname));

	range.put_RowHeight(_variant_t((long)50));//设置行的高度 


	range.put_VerticalAlignment(COleVariant((short)-4108));//xlVAlignCenter   =   -4108 

	COleSafeArray   saRet; //COleSafeArray类是用于处理任意类型和维数的数组的类
	DWORD   numElements[] = { m_rows,m_cols };       //行列写入数组
	saRet.Create(VT_BSTR, 2, numElements); //创建所需的数组

	range = sheet.get_Range(COleVariant(_T("A2 ")), covOptional); //从A2开始
	range = range.get_Resize(COleVariant((short)m_rows), COleVariant((short)m_cols)); //表的区域

	long   index[2];

	for (iRow = 1; iRow <= m_rows; iRow++)//将列表内容写入EXCEL 
	{
		for (iCol = 1; iCol <= m_cols; iCol++)
		{
			index[0] = iRow - 1;
			index[1] = iCol - 1;

			CString   szTemp;

			szTemp = l_list.GetItemText(iRow - 1, iCol - 1); //取得l_list控件中的内容

			BSTR   bstr = szTemp.AllocSysString(); //The AllocSysString method allocates a new BSTR string that is Automation compatible

			saRet.PutElement(index, bstr); //把m_list控件中的内容放入saRet

			SysFreeString(bstr);
		}
	}



	range.put_Value2(COleVariant(saRet)); //将得到的数据的saRet数组值放入表格


	book.SaveCopyAs(COleVariant(cStrFile)); //保存到cStrFile文件
	book.put_Saved(true);



	books.Close();

	//

	book.ReleaseDispatch();
	books.ReleaseDispatch();

	app.ReleaseDispatch();
	app.Quit();

但是我用上面的代码运行后会报一堆错误,底层类好像有问题,所以改成了如下代码:文章来源地址https://www.toymoban.com/news/detail-446397.html

void CDlgStratueCal::OnBnClickedClistctrltoexc()
{
    CStringArray str11;
    for (int i = 0; i < l_list.GetItemCount(); i++)
	{
		str11.Add(l_list.GetItemText(i, 0));
		str11.Add(l_list.GetItemText(i, 1));
		str11.Add(l_list.GetItemText(i, 2));
	}
	CFileDialog fg(false, _T("*.csv"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
	_T("Excel CSV File(*.csv)|*.csv|Text File(*.txt)|*.txt|All File(*.*)|*.*||"), NULL);
	if (fg.DoModal() == IDOK)
	{
		CString filename = fg.GetPathName();
		CStdioFile file(filename, CFile::modeCreate | CFile::modeWrite);
		CString str = _T("序号,地层厚度,实际厚度\n");
		file.WriteString(str);
		for (int i = 0; i < str11.GetSize() - 1;)
		{
			if (i == 0)
			{
				str = str11.GetAt(i) + _T(",");
				str += str11.GetAt(++i) + _T(",");
				str += str11.GetAt(++i) + _T("\n");
			}
			else
			{
				str = str11.GetAt(++i) + _T(",");
				str += str11.GetAt(++i) + _T(",");
				str += str11.GetAt(++i) + _T("\n");
			}
			file.WriteString(str);
		}
		file.Close();
	}

}

到了这里,关于【MFC CListCtrl控件内容导出Excel/.csv文件】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VUE通用后台管理系统(四)前端导出文件(CSV、XML、HTML、PDF、EXCEL)

    常见的导出格式:CSV、XML、HTML、PDF、EXCEL 1)准备工作 安装所需相关依赖 前两个是PDF格式需要的依赖,后两个是excel格式所需,如果没有需求这两种格式的可以忽略这一步 然后画页面   页面效果 2)导出CSV格式的文件 新建src/utils/utils.js文件 写入exportCsv方法,columns为表头,

    2024年02月05日
    浏览(59)
  • MFC CListCtrl 显示图片

    在使用MFC的CListCtrl的时候容易有需求列里面显示图片,在网上搜罗了一番,踩坑后总结一下,主要是使用CListView的时候怎么显示列图片 CListCtrl列添加图片 CListCtrl显示图片

    2024年02月07日
    浏览(35)
  • Django中利用Admin后台实现Excel/CSV的导入更新数据库和导出数据到Excel/CSV

    本文基于Django自带的admin 后台实现Excel,csv,Json等格式文件的导入并更新后台数据库。 核心是引入 django-import-export 模块。 我们先创建一个app:app01 python manage.py startapp app01 然后在app01文件夹下的models.py 中写入如下模型数据: 指定清华镜像会快很多 修改两处: 注册import_exp

    2023年04月09日
    浏览(48)
  • 大批量数据导出csv,平替导出excel性能优化解决方案封装工具类

            有些业务逻辑需要在导出非常大量的数据,几百甚至几千万的数据这个时候再导出excel来对于性能都不是很友好,这个时候就需要替换实现思路来解决这个问题。         本文章提供了两种解决的方案,也是两种从数据库中拿取数据的方式一种是原生的jdbc一种是使用

    2024年01月16日
    浏览(73)
  • MFC第十六天 CFileDialog、CEdit简介、(线程)进程的启动,以及Notepad的开发(托盘技术-->菜单功能)

    通用对话框 CCommonDialog 这些对话框类封装 Windows 公共对话框。 它们提供了易于使用的复杂对话框实现。 CFileDialog 提供用于打开或保存文件的标准对话框。 CColorDialog 提供用于选择颜色的标准对话框。 CFontDialog 提供用于选择字体的标准对话框。 CFindReplaceDialog 为搜索和替换操作

    2024年02月16日
    浏览(38)
  • JAVA导出CSV文件

    方式一 方式二 使用CSVWriter Excel打开中文乱码问题 Excel 在读取 csv 的时候是通过读取文件头上的 bom 来识别编码的,这导致如果我们生成 csv 文件的平台输出无 bom 头编码的 csv 文件(例如 utf-8 ,在标准中默认是可以没有 bom 头的),Excel 只能自动按照默认编码读取,不一致就会

    2024年02月16日
    浏览(39)
  • hive 导入导出csv文件

    1、导入 将CSV文件导入到hive数据库,具体操作如下, 首先在hive中创建自己的table, 并且设置以逗号分隔。 然后 确定tmp.hb_label_C表的分布式文件路径 最后在linux命令行输入 查看结果 2、导出 使用beeline重定向 同时使用以下方式导出数据带表头

    2024年02月16日
    浏览(44)
  • 批量将excel文件转csv文件

    要将Excel文件批量转换为CSV文件,并按照汇总,可以使用Python中的`pandas`库来实现。下面是示例代码: import pandas as pd import os def excel_to_csv(file_path, output_folder):     # 读取Excel文件     df = pd.read_excel(file_path)     # 获取文件名(不带扩展名)作为输出CSV文件的名称    

    2024年02月11日
    浏览(43)
  • excel文件保存成CSV

    Sub CsvOutput()     Dim strNow As String     Dim csvFile As String     Dim lastRow As String     Dim targetRange As Range     Dim wb As Workbook     Dim fso As Object               strNow = Format(Now, \\\"yyyymmddhhnnss\\\")     csvFile = Application.GetSaveAsFilename(InitialFileName:=\\\"XXXXXXCSV_\\\" strNow \\\".csv\\\", FileFilter:=\\\"CSV文件(*.csv)

    2024年02月13日
    浏览(38)
  • 067:mapboxGL上传CSV文件,显示图形,导出为Geojson文件

    第067个 点击查看专栏目录 本示例的目的是演示如何在vue+mapbox中上传CSV文件,显示图形,导出为Geojson文件。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包