在VC中如何合并excel的单元格

seuhiker 2002-04-20 04:32:32
比如我想将excel中中间的4行4 列合并,形成一个表的名称。
用Range中的Merge函数不行呀,而且我在合并同一行的几列单元格时,总是
出现一个对话框,我不希望它出现,我的报表要在后台运行。
怎么办,请高手指点!
...全文
659 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen780831 2002-04-22
  • 打赏
  • 举报
回复
表示xlCenter
还可以取1,2等值,你可以自己试试看
seuhiker 2002-04-21
  • 打赏
  • 举报
回复
给分了,还有SetHorizontalAlignment(_variant_t((long)3));参数表示什么呀?
chen780831 2002-04-20
  • 打赏
  • 举报
回复
1、居中:
应该先定义一个要居中的区域,我用的是_Worksheet对象,具体操作如下:
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
MessageBox("创建Excel服务失败!","错误",MB_OK|MB_ICONERROR);
return;
}
//利用模板文件建立新文档
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
filename=strFilePath+"Template.xlt";
//我创建的是Template.xlt文件
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(filename)));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
CString strlt,strrd;
strlt="A1";
strrd="E4";
rgMyRge.AttachDispatch(wsMysheet.GetRange(_variant_t(strlt),_variant_t(strrd)),true);
rgMyRge.SetHorizontalAlignment(_variant_t((long)3));
// HorizontalAlignment = xlCenter
//这样就可以把A1---E4区域的所有内容居中了,如果直接用
//rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1)
//,vtMissing).pdispVal,true);得到要居中的列,在调用
//SetHorizontalAlignment可能会不好使(至于原因,我没有找到)

2、保存
我没有做过保存方面的工作,所以很抱歉可能无法帮你了。
这里只提供一些参考意见:
在做完一次操作之后,一般都要做释放操作:
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
我想在你做完一次操作后,应该调用一下这些函数。
等下次往里写数据的时候,在从新打开这些对象,
至于每小时执行一次,用定时器试试看。
seuhiker 2002-04-20
  • 打赏
  • 举报
回复
SetHorizontalAlignment这个我怎么不能实现居中呀?
还有我想每小时向一个xls文件中写一次,每天保存一个.xls文件,怎样实现呀。我第一次调用saveas没有问题,到我再次调用就出现异常,为什么?
chen780831 2002-04-20
  • 打赏
  • 举报
回复
rgMyRge.AttachDispatch(wsMysheet.GetRange(_variant_t"A"+str1),_variant_t("G"+str2)),true);
rgMyRge.SetMergeCells(_variant_t(true));
//str1,str2为第几行
rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);
rgMyRge.SetHorizontalAlignment( _variant_t((long)2));
//居中
在处理Excel时,时刻要注意的是当前选中的range,只有被选中的部分才能
响应后面的操作。
另外,如果你要进行比较复杂的控制(如打印设置,颜色,字体等),
我建议你采用调用宏的方法,新建一个*.xlt的模板,在其中预定义好宏,
然后再Vc中再调用它来进行格式控制。
seuhiker 2002-04-20
  • 打赏
  • 举报
回复
Merge()和SetMergeCells()两介函数中的参数是什么意思呀
seuhiker 2002-04-20
  • 打赏
  • 举报
回复
还有如何让单元格中数据居中呀?

16,472

社区成员

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

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

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