使用Qt如何在Excel的最后插入一个sheet页,注意是最后

huyaowu 2010-09-02 11:03:24
昨天使用
QAxObject* newSheet = worksheets->querySubObject("Add()"); 

成功创建了一个sheet页,但默认是创建在第一个的,我想把newSheet创建在最后一个
试了Move方法好像不起作用:
QAxObject* newsheet = worksheets->querySubObject("Add()"); 

QAxObject *before = worksheets->querySubObject("Item(QVariant)", "Sheet1");
QAxObject *after = worksheets->querySubObject("Item(QVariant)", "Sheet2");

newsheet->dynamicCall("Move(QVariant, QVariant)", before->asVariant(), after->asVariant());


网上查了下好像Add()方法就有位置可设定,vba中是Add after := worksheets(1) 像这样的,不知Qt中该如何操作?
还有Add()都有哪些变量啊?网上查了没查到啊!期待高手帮忙
...全文
1023 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoqiya 2011-09-14
  • 打赏
  • 举报
回复
额,没看到说是最后一列,我试了下代码,插入不到最后一列,在VBA中说明如下
Remarks
If Before and After are both omitted, the new sheet is inserted before the active sheet.
所以只能插入到原来最后一列的前面,不好意思哈,没具体去测试。
要想插入到最后一列,我个人认为只能先插入后,在移动到最后一列,也就是楼主使用的方法
在VBAX11的文档中,Before,和After不存在默认值,在VB中知道怎么来用after,但是在Qt下我还真不
了解,也google了下,没有收获,╮(╯▽╰)╭
要是没有VB中没有move这个函数,那还真不知道咋办。。。
blankc 2011-09-14
  • 打赏
  • 举报
回复
楼上给的方法可以插入到最后一列吗?没记错的话,应该是插入到最后一列的前面。
我的方法费劲点,先插入到最后一列的前面,然后将最后一列移到插入那列的前面。
	    QAxObject * last = excelSheets->querySubObject("Item(int)", count);
excelSheets->dynamicCall("Add(QVariant)", last->asVariant());
QAxObject * newSheet = excelSheets->querySubObject("Item(int)", count);
last->dynamicCall("Move(QVariant)", newSheet->asVariant());

之所以这样做,是因为add和move的有个默认参数是before,即默认插入(移动)到指定列的前面,至于怎么修改为after,暂时还没研究出来。
luoqiya 2011-09-14
  • 打赏
  • 举报
回复 1
通过阅读VBA给出的excel接口API,在英文版本上面有个对add方法的说明,说的意思是add方法在当前获取焦点的sheet增加,所以只要激活你要添加sheet的位置即可。方法如下

QAxObject *p_WdApp = new QAxObject("Excel.Application");
QAxObject *p_WordBooks = p_WdApp->querySubObject("Workbooks");
QAxObject *p_WordBook = p_WordBooks->querySubObject("Open(QString)", "E:\\a.xls");
QAxObject *p_sheets = p_WorkBook->querySubObject("WorkSheets");
QAxObject *p_sheet = p_sheets->querySubObject("Item(int)", 3);

p_sheet->dynamicCall("Activate()");
p_sheets->dynamicCall("Add()");

p_WorkBooks->dynamicCall("Close()");
p_WdApp->dynamicCall("Quit()");

上例代码在第3个sheet上添加新的sheet,修改3,即可添加到想添加的位置
pp0354030 2011-09-06
  • 打赏
  • 举报
回复
老早以前做过一个操作EXCEL的。excel = new QAxObject( "Excel.Application",this );用generateDocumentation()把产生的QStrng放入一个QTextBrower中,里面就是全部操作EXCEL的函数了,那是一个相当的多哈。
gateslu 2011-08-25
  • 打赏
  • 举报
回复
我也遇到这个问题,虽然隔了一年多了,不知道楼主如何解决的呢?
JHJJHJ4A554E 2010-11-20
  • 打赏
  • 举报
回复
帮顶,没接触过,来学习一下。
车太靓 2010-11-19
  • 打赏
  • 举报
回复
哥们走在前面了,这方面没接触
huyaowu 2010-09-06
  • 打赏
  • 举报
回复
没有人有碰到过这个问题吗??亟待解决啊!!

16,787

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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