C++如何给excel的单元付值?

qiangorqiang 2010-01-24 04:14:11
我已经取得了Excel::_Worksheet对象的指针,现在怎么给excel表中的某单元付值。
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianhe_he 2010-01-25
  • 打赏
  • 举报
回复
Range xlsCol,xlsCells;
xlsCells.AttachDispatch(sheet.GetCells(),true);//获取所有的单元格
xlsCells.SetItem(_variant_t((long)i),_variant_t((long)j),_variant_t(str));//参数为:row col value
qiangorqiang 2010-01-24
  • 打赏
  • 举报
回复
奇怪我看网上例子都是SetItem,但我开发环境对应函数是PutItem.
不知是开发环境的原因还是excel还是import参数不同导致的。
具体环境是:vs2005,office 2003.
希望大家来分析一下原因。
marrco2005 2010-01-24
  • 打赏
  • 举报
回复
我的是excel2003

Range rgMyRge;
.....
rgMyRge.SetItem(_variant_t((long)i), _variant_t((long)k), data);

======================================================
你把 . 换成 -> 试试
m_rangeExcel->SetItem( _variant_t( (long)(i+2) ),
_variant_t( (long)(j+1) ),
COleVariant(m_Report.m_plist->GetItemText(i,j)) );
qiangorqiang 2010-01-24
  • 打赏
  • 举报
回复
m_rangeExcel.SetItem( _variant_t( (long)(i+2) ),
_variant_t( (long)(j+1) ),
COleVariant(m_Report.m_plist->GetItemText(i,j)) );


m_rangeExcel是Excel::RangePtr对象吗?
在我的开发环境中提示RangePtr没有SetItem方法。
精锐掷矛手 2010-01-24
  • 打赏
  • 举报
回复

try
{
if (!m_appExcel.CreateDispatch("Excel.Application",NULL))
{
MessageBox("创建Excel服务失败!","提示",MB_OK|MB_ICONWARNING);
return;
}

m_appExcel.SetVisible(false);
m_wbExcels.AttachDispatch(m_appExcel.GetWorkbooks(),true);

m_wbExcelSingle.AttachDispatch(m_wbExcels.Add(covOptional));

//得到Worksheets
m_wsExcels.AttachDispatch(m_wbExcelSingle.GetWorksheets(),true);
//删除多余的表
m_wsExcelSingle.AttachDispatch(m_wsExcels.GetItem(COleVariant((short)3)));
m_wsExcelSingle.Delete();
m_wsExcelSingle.AttachDispatch(m_wsExcels.GetItem(COleVariant((short)2)));
m_wsExcelSingle.Delete();
//表改名
m_wsExcelSingle.AttachDispatch(m_wsExcels.GetItem(COleVariant((short)1)));
m_wsExcelSingle.SetName("report");
m_rangeExcel.AttachDispatch(m_wsExcelSingle.GetUsedRange(), TRUE);

//Range cols=m_rangeExcel.GetEntireColumn();
//cols.AutoFit();

if (m_Report.m_plist->GetItemCount ()>0)
{
int nItemCount,nColumnCount;

nColumnCount = m_Report.m_plist->GetHeaderCtrl()->GetItemCount();
nItemCount = m_Report.m_plist->GetItemCount();
int i;
LVCOLUMN columnData;
CString columnName;
int columnNum = 0;
CString strH;
CString strV;

columnData.mask = LVCF_TEXT;
columnData.cchTextMax =100;
columnData.pszText = columnName.GetBuffer (100);
//写列表头
for(i=0;m_Report.m_plist->GetColumn(i,&columnData);i++)
{
m_rangeExcel.SetItem(_variant_t((long)(1)), _variant_t((long)(i+1)),COleVariant(columnData.pszText) );
}
columnName.ReleaseBuffer ();

// 向Excel中写数据
for (i = 0; i < nItemCount; i++ )
{
for ( int j = 0; j < nColumnCount; j++ )
{
m_rangeExcel.SetItem( _variant_t( (long)(i+2) ),
_variant_t( (long)(j+1) ),
COleVariant(m_Report.m_plist->GetItemText(i,j)) );
}
}

//Range cols=m_rangeExcel.GetEntireColumn();
Range rgMyRge;
rgMyRge.AttachDispatch(m_wsExcelSingle.GetColumns(),true);
//col.Active();
rgMyRge.AutoFit();

m_wbExcelSingle.SaveAs(COleVariant(filePath),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
0,
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing));
}
else
{
//没有数据
MessageBox("没有数据,不能导出!","提示",MB_OK|MB_ICONWARNING|MB_TOPMOST);
return;

}

m_wbExcelSingle.Close( covOptional, COleVariant(filePath), covOptional );
m_wbExcels.Close();
m_rangeExcel.ReleaseDispatch();
m_wsExcelSingle.ReleaseDispatch();
m_wsExcels.ReleaseDispatch();
m_wbExcelSingle.ReleaseDispatch();
m_wbExcels.ReleaseDispatch();
m_appExcel.ReleaseDispatch();
m_appExcel.Quit();
MessageBox("导出成功!","提示");
}catch(...)
{
m_wbExcelSingle.Close( covOptional, COleVariant(filePath), covOptional );
m_wbExcels.Close();
m_rangeExcel.ReleaseDispatch();
m_wsExcelSingle.ReleaseDispatch();
m_wsExcels.ReleaseDispatch();
m_wbExcelSingle.ReleaseDispatch();
m_wbExcels.ReleaseDispatch();
m_appExcel.ReleaseDispatch();
m_appExcel.Quit();
MessageBox("导出失败!","提示");
}

让我抢了
qiangorqiang 2010-01-24
  • 打赏
  • 举报
回复
在线等。
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质?你是否想成为一名资深开发人员,想开发别人做不了的高性能程序?你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? 那么C++就是你个人能力提升,职业之路进阶的不二之选。【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署;2.吊打一切关于C++的笔试面试题;3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块基础篇本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。进阶篇本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。提升篇:本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧