c++如何将DataGrid控件中的数据输出到Excel里面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++如何将DataGrid控件中的数据输出到Excel里面相关的知识,希望对你有一定的参考价值。
参考技术A 这需要导入几个excel的类,_Application,Workbooks,_Workbooks,Worksheet,_Worksheet,Range,通过CColumns类和CColumn类获取控件的数据下面是核心代码:
UpdateData(TRUE);
if(m_Edit.IsEmpty())
MessageBox("文件名不能为空!");
return;
_Application
app;
Workbooks
books;
_Workbook
book;
Worksheets
sheets;
_Worksheet
sheet;
Range
range;
COleVariant
covOptional((long)DISP_E_PARAMNOTFOUND,
VT_ERROR);
//创建Excel
2000服务器(启动Excel)
if
(!app.CreateDispatch("Excel.Application",NULL))
AfxMessageBox("创建Excel服务失败!");
exit(1);
app.SetVisible(false);
//利用模板文件建立新文档
char
path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString
strPath
=
path;
strPath
+=
"\\DataGridToExcel";
books.AttachDispatch(app.GetWorkbooks(),true);
book.AttachDispatch(books.Add(_variant_t(strPath)));
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets(),true);
//得到sheet1
sheet.AttachDispatch(sheets.GetItem(_variant_t("sheet1")),true);
CString
str1;
str1
=
"第1页";
sheet.SetName(str1);
for(
int
i=0;i<sheets.GetCount()-1;i++)
sheet
=
sheet.GetNext();
str1.Format("第%d页",i+2);
sheet.SetName(str1);
sheet.AttachDispatch(sheets.GetItem(_variant_t("第1页")),true);
//得到全部Cells
range.AttachDispatch(sheet.GetCells(),true);
CString
sText;
m_Adodc.GetRecordset().MoveFirst();
for(int
setnum=0;setnum<m_Adodc.GetRecordset().GetRecordCount()+1;setnum++)
for(int
num=0;num<m_DataGrid.GetColumns().GetCount();num++)
if(!setnum)
sText.Format("%d",num);
range.SetItem(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)),
_variant_t(m_DataGrid.GetColumns().GetItem((_variant_t)sText).GetCaption()));
else
sText.Format("%d",num);
range.SetItem(_variant_t((long)(setnum+1)),_variant_t((long)(num+1)),
_variant_t(m_DataGrid.GetColumns().GetItem((_variant_t)sText).GetText()));
m_Adodc.GetRecordset().MoveNext();
if(!setnum)
m_Adodc.Refresh();
//将表格保存
CString
name;
name.Format("\\%s.xls",m_Edit);
strPath
=
path
+
name;
sheet.SaveAs(strPath,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional);
app.SetVisible(true);
//释放对象
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
如何将复选框控件添加到 mfc 中的列表控件子项
【中文标题】如何将复选框控件添加到 mfc 中的列表控件子项【英文标题】:how to add checkbox control to the listcontrol subitems in mfc 【发布时间】:2014-06-05 11:23:51 【问题描述】:我需要将复选框控件添加到列表控件子项中。首先我会告诉你我做了什么,最初我添加了一个报表样式的列表控件并将复选框样式添加到列表视图中,如下所示。
m_MfpListControl.SetExtendedStyle(LVS_EX_CHECKBOXES);
这一步代码是将复选框添加到第一列。但是,我想像这样随机地将复选框添加到子项中,
第 1 列 |第 2 列 |第 3 列 |第 4 列
[]项目1 | []子项1 | []子项2 | [] 子项3
[]-表示复选框
添加“Item1”并不是什么大不了的事,但添加到子项让我失望,而且我尝试了多种方式,比如在插入项目后,我将特定项目的状态设置为,
m_MfpListControl.SetItemState(0,INDEXTOSTATEIMAGEMASK(3),LVIS_STATEIMAGEMASK);
但这也不能正常工作,因为我可以添加和删除第一列的复选框,我尝试采用与设置项目状态相同的方法,就像我使用“SetItemState( )" API 以便将复选框控件添加到子项,不幸的是它在子项的情况下不起作用。
谁能告诉我正确的方法,这样我就可以在子项中添加复选框。
【问题讨论】:
你试过设置LVS_EX_SUBITEMIMAGES吗?您需要提供一个复选框图像。 自定义绘制或所有者绘制是获得子项复选框功能的唯一方法。 是的,我使用 LVS_EX_SUBITEMIMAGES 检查它只是将复选框图像添加到子项,但我想要的是我必须能够选择复选框并取消选中它。由于我是 mfc 的新手,请告诉我如何绘制这个所有者。如果可能的话,用一段代码详细说明我。 【参考方案1】:我使用这个类在子项上添加复选框:
http://www.codeproject.com/Articles/8112/CQuickList
它需要 LVS_OWNERDATA。就我而言,这不是问题。
这个类还在子项上添加了复选框,但没有 LVS_OWNERDATA:
http://www.codeproject.com/Articles/29064/CGridListCtrlEx-Grid-Control-Based-on-CListCtrl
维尼修斯
【讨论】:
除此之外我们没有任何解决方案。我查看了您提供的链接,但它是如此巨大。我尝试调试该应用程序并尝试设置复选框,但每种方法都有一些链接与另一个,它像任何东西一样增长。你能告诉我任何其他方式来添加一段只能生成复选框的代码到我的项目中的子项:)以上是关于c++如何将DataGrid控件中的数据输出到Excel里面的主要内容,如果未能解决你的问题,请参考以下文章
vb中如何设置datagrid控件 中的数据库字体大小和行的高度怎么设置