下面的函数f_excel_hb,可以实现“ 将工作簿filename_s中的工作表sheetname_s以新的工作表名称sheetname_t,复制到工作簿filename_t的最后”

[cpp] view plain copy print ?
  1. public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);
  2. //==========================================================
  3. // 合并两个工作簿中的某个工作表
  4. //==========================================================
  5. // 作者:yyoinge 2011-10-12 18:00
  6. //==========================================================
  7. // 将工作簿filename_s中的工作表sheetname_s以新的
  8. // 工作表名称sheetname_t,复制到工作簿filename_t的最后
  9. //==========================================================
  10. if not fileexists(filename_s) then
  11. messagebox('','工作簿【' + filename_s + '】(源)不存在')
  12. return false
  13. end if
  14. if not fileexists(filename_t) then
  15. messagebox('','工作簿【' + filename_t + '】(目标)不存在')
  16. return false
  17. end if
  18. long ll_val
  19. //声明ole对象
  20. oleobject ole_object_s
  21. //创建ole对象
  22. ole_object_s=create oleobject
  23. //连接到excel
  24. ll_val = ole_object_s.connecttonewobject("excel.application")
  25. if ll_val <> 0 then
  26. messagebox('','ole无法连接Excel!')
  27. goto error
  28. end if
  29. //打开源和目标工作簿
  30. ole_object_s.workbooks.open(filename_s)
  31. ole_object_s.workbooks.open(filename_t)
  32. string ls_t
  33. ls_t = filename_t
  34. filename_s = of_splitpath(filename_s, 2)
  35. filename_t = of_splitpath(filename_t, 2)
  36. //隐藏excel
  37. ole_object_s.visible = false
  38. ole_object_s.displayalerts = false
  39. int n,t
  40. int li
  41. boolean isexists=false
  42. oleobject lworksheet
  43. //判断源工作簿中的工作表是否存在
  44. try
  45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)
  46. isexists = true
  47. catch( oleruntimeerror er)
  48. isexists = false
  49. end try
  50. if isexists=false then
  51. messagebox('','工作簿【' + filename_s + '】中工作表不存在工作表[' + sheetname_s + ']')
  52. goto error
  53. end if
  54. //当目标工作簿中存在sheet名为sheetname_t的工作表时,为sheetname_t增加后缀(1),然后再重复进行判断,直到表名不存在
  55. isexists = true
  56. do while isexists
  57. try
  58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)
  59. isexists = true
  60. sheetname_t += '(1)'
  61. catch( oleruntimeerror er1)
  62. isexists = false
  63. end try
  64. loop
  65. //进行工作表合并(移到目标工作簿的最后)
  66. //int li
  67. setnull(li)
  68. ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)))
  69. //重命名工作表
  70. ole_object_s.workbooks(filename_t).sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)).name = sheetname_t
  71. //保存目标工作簿
  72. isexists = true
  73. //ole_object_s.visible = true
  74. //ole_object_s.displayalerts = true
  75. //messagebox('', '')
  76. try
  77. ole_object_s.workbooks(filename_t).save()
  78. catch( oleruntimeerror er2)
  79. messagebox('提示', '无法保存工作簿【' + filename_t + '】')
  80. isexists = false
  81. end try
  82. if not isexists then goto error
  83. //关闭工作簿
  84. ole_object_s.workbooks(filename_s).close
  85. ole_object_s.workbooks(filename_t).close
  86. //退出excel
  87. ole_object_s.workbooks.close
  88. ole_object_s.Application.quit();
  89. //断开连接
  90. ole_object_s.disconnectobject();
  91. //注销ole对象
  92. destroy ole_object_s;
  93. return true
  94. error:
  95. ole_object_s.workbooks(filename_s).close
  96. ole_object_s.workbooks(filename_t).close
  97. ole_object_s.workbooks.close
  98. ole_object_s.Application.quit();
  99. ole_object_s.disconnectobject();
  100. destroy ole_object_s;
  101. return false
  102. end function
public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);
//==========================================================
//  合并两个工作簿中的某个工作表
//==========================================================
//  作者:yyoinge 2011-10-12 18:00
//==========================================================
//  将工作簿filename_s中的工作表sheetname_s以新的
//  工作表名称sheetname_t,复制到工作簿filename_t的最后
//==========================================================
if not fileexists(filename_s) thenmessagebox('','工作簿【' + filename_s + '】(源)不存在')return false
end if
if not fileexists(filename_t) thenmessagebox('','工作簿【' + filename_t + '】(目标)不存在')return false
end if
long ll_val
//声明ole对象
oleobject ole_object_s
//创建ole对象
ole_object_s=create oleobject
//连接到excel
ll_val = ole_object_s.connecttonewobject("excel.application")
if ll_val <> 0 thenmessagebox('','ole无法连接Excel!')goto error
end if
//打开源和目标工作簿
ole_object_s.workbooks.open(filename_s)
ole_object_s.workbooks.open(filename_t)
string ls_t
ls_t = filename_t
filename_s = of_splitpath(filename_s, 2)
filename_t = of_splitpath(filename_t, 2)
//隐藏excel
ole_object_s.visible = false
ole_object_s.displayalerts = false
int n,t
int li
boolean isexists=false
oleobject lworksheet
//判断源工作簿中的工作表是否存在
try   lworksheet =  ole_object_s.Workbooks(filename_s).sheets(sheetname_s)isexists = true
catch( oleruntimeerror   er) isexists = false
end try
if isexists=false thenmessagebox('','工作簿【' + filename_s + '】中工作表不存在工作表[' + sheetname_s + ']')goto error
end if
//当目标工作簿中存在sheet名为sheetname_t的工作表时,为sheetname_t增加后缀(1),然后再重复进行判断,直到表名不存在
isexists = true
do while isexiststry   lworksheet =  ole_object_s.Workbooks(filename_t).sheets(sheetname_t)isexists = truesheetname_t += '(1)'catch( oleruntimeerror   er1) isexists = falseend try
loop
//进行工作表合并(移到目标工作簿的最后)
//int li
setnull(li)
ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)))
//重命名工作表
ole_object_s.workbooks(filename_t).sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)).name = sheetname_t
//保存目标工作簿
isexists = true
//ole_object_s.visible = true
//ole_object_s.displayalerts = true
//messagebox('', '')
tryole_object_s.workbooks(filename_t).save()
catch( oleruntimeerror   er2)messagebox('提示', '无法保存工作簿【' + filename_t + '】')isexists = false
end try
if not isexists then goto error
//关闭工作簿
ole_object_s.workbooks(filename_s).close
ole_object_s.workbooks(filename_t).close
//退出excel
ole_object_s.workbooks.close
ole_object_s.Application.quit();
//断开连接
ole_object_s.disconnectobject();
//注销ole对象
destroy ole_object_s;
return true
error:
ole_object_s.workbooks(filename_s).close
ole_object_s.workbooks(filename_t).close
ole_object_s.workbooks.close
ole_object_s.Application.quit();
ole_object_s.disconnectobject();
destroy ole_object_s;
return falseend function

其中用到的一个路径分割函数of_splitpath如下:

[cpp] view plain copy print ?
  1. public function string of_splitpath (string as, integer ai);//==========================================================
  2. // 分割文件名
  3. // ai: 1返回路径,2返回文件名(带后缀名),32返回文件名(不带后缀名)
  4. //==========================================================
  5. // 作者:yyoinge 2011-10-12 18:00
  6. //==========================================================
  7. choose case ai
  8. case 1
  9. if posw(as, '.') = 0 then return as
  10. return leftw(as,lenw(as) - posw(reverse(as), '\') + 1)
  11. case 2
  12. if posw(as, '\') = 0 then return as
  13. return rightw(as,posw(reverse(as), '\') - 1)
  14. case 3
  15. if posw(as, '\') > 0 then as = rightw(as,posw(reverse(as), '\') - 1)
  16. return leftw(as, lastpos(as, '.') - 1)
  17. case else
  18. return as
  19. end choose
  20. end function
public function string of_splitpath (string as, integer ai);//==========================================================
//  分割文件名
// ai:  1返回路径,2返回文件名(带后缀名),32返回文件名(不带后缀名)
//==========================================================
//  作者:yyoinge 2011-10-12 18:00
//==========================================================choose case aicase 1 if posw(as, '.') = 0 then return asreturn leftw(as,lenw(as) - posw(reverse(as), '\') + 1)case 2 if posw(as, '\') = 0 then return asreturn rightw(as,posw(reverse(as), '\') - 1)case 3 if posw(as, '\') > 0 then as = rightw(as,posw(reverse(as), '\') - 1)return leftw(as, lastpos(as, '.') - 1)case elsereturn as
end choose
end function

pb复制excel工作表的功能,可以帮助我们实现:将1个数据窗口导出到1个excel工作簿的多个工作表sheet中。实现的步骤大致如下:
(1)将datawindow的数据,按照平均行数(每个sheet中需要保存的行数),依次复制到临时的datastore中。如:将1个有10行数据的datawindow,导出为每个sheet包含3行数据的多sheet工作簿,则需要依次将1-3行、4-6行、7-9行、10至10行分别复制到临时的datastore中。
(2)然后将datastore中的数据saveas导出为单个单sheet的excel文件。
(3)将第2次开始导出的excel文件(也就是上述例子中的4-6行开始的excel文件),依次合并到第1次导出的excel文件(1-3行)中,并删除导出的excel文件(1-3行对应的文件暂时不删除)。
(4)待所有数据都导出,并复制到第1次导出的excel文件后,将第1次导出的excel文件改名并复制目标导出路径上,然后删除第1次导出的excel文件。

具体源码可以参照 PB9将数据窗口导出到一个EXCEL文件的多个工作表中 。

该源码使用的是从后到前的导出方法,也就是先导出10-10行,然后导出7-9行。。。最后导出1-3行,因为在该源码中,复制工作表时使用的方法是:

[cpp] view plain copy print ?
  1. ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(ole_object_s.workbooks(filename_t).Sheets(1) //将源工作表复制到目标工作簿的第1个工作表前面
ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(ole_object_s.workbooks(filename_t).Sheets(1) //将源工作表复制到目标工作簿的第1个工作表前面

而上述函数复制工作表的方法为:

[cpp] view plain copy print ?
  1. int li
  2. setnull(li)
  3. ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count))) //将源工作表复制到目标工作簿的最后1个工作表后面
int li
setnull(li)
ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)))   //将源工作表复制到目标工作簿的最后1个工作表后面

这边需要对copy方法进行说明,在VBA中,工作表复制的写法为:

[cpp] view plain copy print ?
  1. Sheets("工作表名称").Copy Before := Sheets(1) //将工作表“工作表名称”复制到第1个工作表前面
  2. Sheets("工作表名称").Copy After := Sheets(1) //将工作表“工作表名称”复制到第1个工作表后面
Sheets("工作表名称").Copy Before := Sheets(1) //将工作表“工作表名称”复制到第1个工作表前面
Sheets("工作表名称").Copy After := Sheets(1)  //将工作表“工作表名称”复制到第1个工作表后面

而在pb中对应的写法为:

[cpp] view plain copy print ?
  1. int li setnull(li)
  2. Sheets("工作表名称").Copy(Sheets(1), li) //将工作表“工作表名称”复制到第1个工作表前面
  3. Sheets("工作表名称").Copy(li, Sheets(1)) //将工作表“工作表名称”复制到第1个工作表后面
int li setnull(li)
Sheets("工作表名称").Copy(Sheets(1), li) //将工作表“工作表名称”复制到第1个工作表前面
Sheets("工作表名称").Copy(li, Sheets(1)) //将工作表“工作表名称”复制到第1个工作表后面
[cpp] view plain copy print ?
  1. <div style="top: 1694px;"><pre style="margin: 4px 0px; background-color: rgb(240, 240, 240);" class="cpp" name="code"><pre></pre>
  2. <pre></pre>
  3. <div></div>
  4. <pre></pre>
  5. <pre></pre>
  6. <div></div>
  7. <pre></pre>
  8. <pre></pre>
  9. <div></div>
  10. <pre></pre>
  11. <pre></pre>
  12. <div></div>
  13. <pre></pre>
  14. </pre></div>
  15. <!-- Baidu Button BEGIN -->
  16. <div style="float: right;" class="bdsharebuttonbox bdshare-button-style0-16" data-bd-bind="1422070586745">
  17. <a style='background-image: url("http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png") !important;' class="bds_more" href="#" data-cmd="more"></a>
  18. <a style="background-position: 0px -52px !important;" class="bds_qzone" title="分享到QQ空间" href="#" data-cmd="qzone"></a>
  19. <a style="background-position: 0px -104px !important;" class="bds_tsina" title="分享到新浪微博" href="#" data-cmd="tsina"></a>
  20. <a style="background-position: 0px -260px !important;" class="bds_tqq" title="分享到腾讯微博" href="#" data-cmd="tqq"></a>
  21. <a style="background-position: 0px -208px !important;" class="bds_renren" title="分享到人人网" href="#" data-cmd="renren"></a>
  22. <a style="background-position: 0px -1612px !important;" class="bds_weixin" title="分享到微信" href="#" data-cmd="weixin"></a>
  23. </div>
  24. <script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script>
  25. <!-- Baidu Button END -->
  26. <!--192.168.100.35-->
  27. <ul class="article_next_prev">
  28. <li class="prev_article"><span οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian']);location.href='/yyoinge/article/details/6936598';">上一篇</span><a οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian'])" href="/yyoinge/article/details/6936598">与MSSQL的dateadd函数功能一致的pb加强版时间函数:f_dateadd</a></li>
  29. <li class="next_article"><span οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian']);location.href='/yyoinge/article/details/7267592';">下一篇</span><a οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian'])" href="/yyoinge/article/details/7267592">PB9写的一个拆解SQL语句的通用函数</a></li>
  30. </ul>
  31. <!-- Baidu Button BEGIN -->
  32. <script id="bdshare_js" type="text/javascript" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=395020" data="type=tools&uid=1536434"></script>
  33. <script type="text/javascript">
  34. document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)
  35. </script>
  36. <!-- Baidu Button END -->
  37. <div id="digg" ArticleId="6942254">
  38. <dl id="btnDigg" class="digg digg_enable">
  39. <dt οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_ding'])">顶</dt>
  40. <dd>3</dd>
  41. </dl>
  42. <dl id="btnBury" class="digg digg_enable">
  43. <dt οnclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_cai'])">踩</dt>
  44. <dd>0</dd>
  45. </dl>
  46. </div>

pb9实现在两个工作簿之间进行工作表复制相关推荐

  1. excel合并多个工作表_如何快速的合并多个 Excel 工作簿至一个工作簿中的工作表?...

    作者:汪汪家的宝贝 链接:https://www.jianshu.com/p/c8ae6852f1da 前言 在日常工作过程中,我们有可能需要把多个Excel工作簿的内容汇总到一张Excel工作表中. ...

  2. Python+Excel系列:批量处理Excel文件的模块—xlwings:创建、保存、打开工作簿,操控工作表和单元格

    文章目录 认识xlwings模块 1.创建工作簿 2.保存工作簿 3.打开工作簿 4.操控工作表和单元格 综合实例 认识xlwings模块 可以用来处理Excel文件的python模块很多,如Xlsx ...

  3. 关于Excel下通过VBA实现工作簿文件下工作表的合并

    对于普通使用者而言,Excel是一个比较强大的数据处理工具.一般公司的普通职员常使用它来完成数据的录入分析,但是当面对处理经由多人按统一模板统计完成的录入数据分析时,数据将分散存放在多个.xlsx文件 ...

  4. Excel 2010 VBA 入门 067 导入多个工作簿中的工作表

    目录 示例 实现代码 导入多个工作簿中的工作表 Application. ScreenUpdating属性 示例 如图所示,在同一个目录下有多个工作表名称相同的工资汇总月报.现希望通过VBA建立该多个 ...

  5. 删除 多个表_合并汇总多个工作簿多个工作表,删除修改新增更新内容只需刷新...

    要求:1.把多个工作簿的多个工作表内容合并汇总 2.后续在任一工作表内删除修改新增内容,无需再重新做表 3.后续在任一工作簿中新增一个或多个工作表,无需再重新做表 4.后续在文件夹中添加一个或多个Ex ...

  6. 方法range作用于对象worksheet时失败_VB.NET Excel操作类(获取工作簿列表和工作表列表及工作表对象)...

    效果展示 引用excel类 Imports Microsoft.Office.Interop Excel类代码开始 Public Class Cls_excel 返回Excel对象 ''' ''' 返 ...

  7. Excel·VBA工作簿拆分所有工作表单独保存

    对Excel活动工作簿进行拆分,每个工作表单独保存为工作簿文件,文件保存在该工作簿同一文件夹下单独文件夹内 Sub 工作簿拆分所有工作表单独保存文件()'将活动工作簿wb拆分,每个ws单独保存为文件, ...

  8. Excel2003工作簿密码和工作表保护的加密和解密

    前段时间,一个朋友从政府部门相关网站下载一个申请的表格,想贴照片时却一直无法粘贴,后来才发现原来是在工作表保护,避免大家都随便改,把格式搞乱了.如果没有密码,直接工具-保护-撤消工作表保护就可以了.如 ...

  9. Excel技能培训-INDIRECT实现拼接动态引用单元格,trl+pageDown速切换工作簿,多工作表求和,多个工作簿合并和拆分

    1. 使用INDIRECT实现拼接动态引用单元格内容 =INDIRECT("E"&COUNTA(G14:G17)) 2. 使用ctrl+pageUp ,ctrl+pageD ...

最新文章

  1. 计算机系统结构 网易云课堂,计算机系统结构 (三) CPU及其结构分析
  2. 《算法导论》中parallel for 的时间复杂度
  3. 微软考虑将 Python 作为 Excel 官方脚本语言
  4. iOS培训章节——C++函数的重载
  5. Android高级开发专题晋升班
  6. 1. 根据输出的数据,对各个阶维度的反推+2.tf中生成根据指定的shape,tensor的各个阶的维度判断
  7. hook NSArray 方法在debug模式下会崩溃, 在release模式下会返回nil
  8. python日常能做什么-为什么Python这么火?看看它能做什么你就知道了
  9. leaflet 加载百度离线瓦片
  10. 【正点原子MP157连载】第四章 ATK-STM32MP157功能测试-摘自【正点原子】STM32MP157快速体验
  11. java 实现pdf转换成图片
  12. 2022茶艺师(中级)考题及模拟考试
  13. 机器学习为什么也可以像人一样认识cang老师
  14. 【Java SE】封装的详解
  15. commvault备份mysql_CommVault备份到华为云对象存储实践
  16. vue 天气插件的使用
  17. Survey of intrusion detection systems:techniques, datasets and challenges
  18. ubuntu下安装极品五笔
  19. 运行Xshell 提示没有MSVCP100.dll问题
  20. Tomcat的部署、虚拟主机及优化

热门文章

  1. 史上最强像素画教程「Pixel Art2」像素食物構圖教學本
  2. win7计算机同步中心怎么打开,win7同步中心怎么关闭_关闭win7同步中心如何卸载...
  3. CLIP论文拜读及理解
  4. 内网环境基于 k8s 的大型网站电商解决方案(一)
  5. 全球及中国电子信息产业投资项目需求及重点规划建议报告2021-2027年
  6. [JAVA毕业设计]幼儿早教系统软件设计与实现源码获取和系统演示
  7. el-select下拉加载(实现懒加载)自定义loadmore事件
  8. 我的NVIDIA开发者之旅-Jetson在没有显示器的状态下使用Vnc操控GUI界面开发的三种实用技巧
  9. Cesium学习五:使用entity绘制cylinder
  10. BiometricPrompt之六 - BiometricDialogView锁屏显示