ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: VBA万岁

[求助] VSTO入门问题集

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-22 09:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
excelhomesnake 发表于 2015-11-22 02:49
你需要在第二参数使用通配符,然后第三参数指定遍历所有子文件夹
具体可以参考附件

想问一下,楼上附件代码(如下)中的“WorkBookMessage”是什么,出错提示“上下文没有WorkBookMessage”:
  1. private void button1_Click(object sender, RibbonControlEventArgs e)
  2.         {
  3.             var diaFolder = new FolderBrowserDialog();
  4.             if (diaFolder.ShowDialog() == DialogResult.OK)
  5.             {
  6.                 MessageBox.Show(WorkBookMessage.GetSheetProtectMessage(diaFolder.SelectedPath));
  7.              MessageBox.Show(WorkBookMessage.GetCellsHasFormulaMessage(diaFolder.SelectedPath));
  8.             }
  9.        }
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-22 09:07 | 显示全部楼层
VBA万岁 发表于 2015-11-22 09:05
想问一下,楼上附件代码(如下)中的“WorkBookMessage”是什么,出错提示“上下文没有WorkBookMessage” ...

为了方便说明问题,特附上源码及截图:

1.jpg

ExcelHelpTaskPane.rar

425.83 KB, 下载次数: 52

TA的精华主题

TA的得分主题

发表于 2015-11-22 10:30 | 显示全部楼层
VBA万岁 发表于 2015-11-22 09:05
想问一下,楼上附件代码(如下)中的“WorkBookMessage”是什么,出错提示“上下文没有WorkBookMessage” ...

WorkBookMessage是我自己写的类,代码也在昨晚附件中的解决方案里面.
获取文件夹里面的所有文件路径,大概是这样
  1. Directory.GetFiles(folderPath, "*", SearchOption.AllDirectories)
复制代码

用的是静态类的方法,要先using System.IO 这个命名空间

TA的精华主题

TA的得分主题

发表于 2015-11-22 11:46 | 显示全部楼层
终于可以用vs2012打开vsto的设计时界面了{:soso_e127:}
原来是,因为机器安装了vs2010,因此在excel的设置上,只是勾选了vs2010的设计时加载项.

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-23 14:09 | 显示全部楼层
excelhomesnake 发表于 2015-11-22 10:30
WorkBookMessage是我自己写的类,代码也在昨晚附件中的解决方案里面.
获取文件夹里面的所有文件路径,大概 ...

才注意到你附件中的WorkBookMessage类,有空测试或借用一下看看......
另,我用53楼的方法,出现如下错误,不知为何?

7.jpg

TA的精华主题

TA的得分主题

发表于 2015-11-23 14:29 | 显示全部楼层
VBA万岁 发表于 2015-11-23 14:09
才注意到你附件中的WorkBookMessage类,有空测试或借用一下看看......
另,我用53楼的方法,出现如下错 ...

因为静态方法出来的是每个文件的完全路径,而不是fileinfo对象.把foreach的枚举变量类型设置为string就可以了.
我有个地方想请教一下,为什么你要新开一个excel实例的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-23 14:39 | 显示全部楼层
excelhomesnake 发表于 2015-11-22 10:30
WorkBookMessage是我自己写的类,代码也在昨晚附件中的解决方案里面.
获取文件夹里面的所有文件路径,大概 ...

还有,经测试发现:Directory.GetFiles(folderPath, "*.xlsx", SearchOption.AllDirectories)的文件实为指定路径(olderPath)下的所有(包括子文件夹下的)xlsx文件,如果我只需要olderPath所指向的文件夹下(不包括子文件夹)的xlsx文件,该怎样表示呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-23 14:57 | 显示全部楼层
本帖最后由 VBA万岁 于 2015-11-24 08:45 编辑
VBA万岁 发表于 2015-11-23 14:39
还有,经测试发现:Directory.GetFiles(folderPath, "*.xlsx", SearchOption.AllDirectories)的文件实为 ...


        虽然用我自己的方法(以下代码中的第11句——加了一个If判断语句)可解决这一问题,但感觉应该有更简捷的方法。
      另,不知道我49楼的问题是否与此有关(因暂时无法测试,故有此一问)?
  1. private void mb6_Click(object sender, RibbonControlEventArgs e)
  2.         {
  3.             Fi.Visible = true;
  4.             Application app = new Application();
  5.             DirectoryInfo dir = new DirectoryInfo(Pa.SuperTip.Substring(0, Pa.SuperTip.LastIndexOf("\") + 1));
  6.             Fi.Items.Clear();
  7.             try
  8.             {
  9.                 foreach (FileInfo f in dir.GetFiles("*.xls*", SearchOption.AllDirectories))
  10.                 {
  11.                    <FONT color=red><STRONG> if (f.FullName.Substring(0, f.FullName.LastIndexOf("\") + 1) == Pa.SuperTip.Substring(0, Pa.SuperTip.LastIndexOf("\") + 1))
  12. </STRONG></FONT>                   {
  13.                         Microsoft.Office.Tools.Ribbon.RibbonDropDownItem item = Globals.Factory.GetRibbonFactory().CreateRibbonDropDownItem();
  14.                         item.Label = f.Name;
  15.                         Fi.Items.Add(item);
  16.                     }
  17.                 }
  18.             }
  19.             catch (Exception ex)
  20.             {
  21.                 throw ex;
  22.             }
  23.             finally
  24.             {
  25.                 app.Quit();
  26.                 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
  27.                 app = null;
  28.                 GC.Collect();
  29.             }
  30.         }
复制代码

TA的精华主题

TA的得分主题

发表于 2015-11-23 15:15 | 显示全部楼层
VBA万岁 发表于 2015-11-23 14:39
还有,经测试发现:Directory.GetFiles(folderPath, "*.xlsx", SearchOption.AllDirectories)的文件实为 ...

SearchOption.AllDirectories,是一个枚举类型,有不同的设置,具体你打SearchOption.  智能列表会出来选择的

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-23 15:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
excelhomesnake 发表于 2015-11-23 15:15
SearchOption.AllDirectories,是一个枚举类型,有不同的设置,具体你打SearchOption.  智能列表会出来选择 ...

我说呢,原来在SearchOption里有设置......
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-4 01:23 , Processed in 0.036750 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表