ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 39284|回复: 238

[求助] VSTO入门问题集

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-14 14:49 | 显示全部楼层 |阅读模式
本帖最后由 VBA万岁 于 2015-11-20 14:08 编辑

一、用C#给功能区comboBox控件添加选项老是不成功。

如题,试图用C#给功能区comboBox1控件添加下拉选项,可老是弹出如下出错提示,百思不得其解——百度了大量相关帖子,都是如此添加的啊?


1.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-14 14:57 | 显示全部楼层
本打算是通过单击功能区按钮(Se)将指定的Excel文件全名赋给编辑框(Pa),而指定的Excel文件中的所有工作表是准备赋值给comboBox1的下拉选项的,可后一功能就是出错。盼指点......
代码:
  1. private void Se_Click(object sender, RibbonControlEventArgs e)
  2.         {
  3.             using (System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog())
  4.             {
  5.                 openFileDialog.Filter = "Excel(*.xls;*.xlsx)|*.xls;**.xls*|All Files(*.*)|*.*";
  6.                 // 设置允许选择多个文件,该属性默认为false的,即只允许选择一个文件
  7.                 openFileDialog.Multiselect = true;
  8.                 if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  9.                 {
  10.                     Pa.Text = openFileDialog.FileName;
  11.                     // 获得所有选定文件的文件名
  12.                     Shts = openFileDialog.FileNames;
  13.                     plmenu.Visible = true;
  14.                     mb1.Enabled = false;
  15.                     mb5.Enabled = false;
  16.                     Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
  17.                     Workbook book = app.Workbooks.Open(Pa.Text);
  18.                     comboBox1.Items.Clear();
  19.                     string msg = "";
  20.                     foreach (Worksheet s in book.Worksheets)
  21.                     {
  22.                         comboBox1.Items.Add(s.Name);
  23.                         msg = msg + s.Name;
  24.                     }
  25.                     System.Windows.Forms.MessageBox.Show(msg);
  26.                     string[] array = { "软体学院", "经济管理学院", "外语学院", "公共管理学院", "体育学院", "化学学院", "计算技术学院", "人文科技学院", "法学学院", "文化传播学院", "物电科学技术学院" };
  27.                     //Sh.DataSource = array;
  28.                 }
  29.             }

  30.         }
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-14 14:58 | 显示全部楼层
本帖最后由 VBA万岁 于 2015-11-14 15:08 编辑
VBA万岁 发表于 2015-11-14 14:57
本打算是通过单击功能区按钮(Se)将指定的Excel文件全名赋给编辑框(Pa),而指定的Excel文件中的所有工作 ...

出错语句:第22句——即:comboBox1.Items.Add(s.Name);

TA的精华主题

TA的得分主题

发表于 2015-11-14 15:38 | 显示全部楼层
本帖最后由 excelhomesnake 于 2015-11-14 15:40 编辑

错误列表不是有说,Add方法的参数类型不是一个string
看起来是需要new一个 dropdownitem的对象,你设置好这个对象的属性,然后传到Add方法里面

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-15 11:13 | 显示全部楼层
excelhomesnake 发表于 2015-11-14 15:38
错误列表不是有说,Add方法的参数类型不是一个string
看起来是需要new一个 dropdownitem的对象,你设置好这 ...

不太明白......
另,为什以下代码(出处:http://bbs.csdn.net/topics/380113062)可以在下comboBox1添加下拉选项?
  1. private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
  2.         {
  3.             string temp;
  4.             comboBox1.Items.Clear();
  5.             if(dateTimePicker1.Value.Year==2007)
  6.             {
  7.                  
  8.                 for(int i=1;i<=10;i++)
  9.                 {
  10.                     temp="V"+i.ToString().PadLeft(2,'0');
  11.                     comboBox1.Items.Add(temp);
  12.                 }
  13.             }
  14.             if (dateTimePicker1.Value.Year == 2011)
  15.             {

  16.                 for (int i = 1; i <= 5; i++)
  17.                 {
  18.                     temp = "S" + i.ToString().PadLeft(2, '0');
  19.                     comboBox1.Items.Add(temp);
  20.                 }
  21.             }
  22.         }
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-15 12:16 | 显示全部楼层
VBA万岁 发表于 2015-11-15 11:13
不太明白......
另,为什以下代码(出处:http://bbs.csdn.net/topics/380113062)可以在下comboBox1添 ...

受一个帖子(C#读取Excel数据表数据)的启示写出如下代码却仍出错:
  1. private void Se_Click(object sender, RibbonControlEventArgs e)
  2.         {
  3.             using (System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog())
  4.             {
  5.                 openFileDialog.Filter = "Excel(*.xls;*.xlsx)|*.xls;**.xls*|All Files(*.*)|*.*";
  6.                 // 设置允许选择多个文件,该属性默认为false的,即只允许选择一个文件
  7.                 openFileDialog.Multiselect = true;
  8.                 if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  9.                 {
  10.                     Pa.Text = openFileDialog.FileName;
  11.                     // 获得所有选定文件的文件名
  12.                     Shts = openFileDialog.FileNames;
  13.                     plmenu.Visible = true;
  14.                     mb1.Enabled = false;
  15.                     mb5.Enabled = false;
  16.                     OleDbConnection oledbcConnection;//Excel连接
  17.                     try
  18.                     {
  19.                         string filename;
  20.                         filename = Pa.Text;
  21.                         string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0";
  22.                         oledbcConnection = new OleDbConnection(strConn);
  23.                         oledbcConnection.Open();
  24.                         DataTable table = oledbcConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
  25.                         Sh.Items.Clear();

  26.                         foreach (DataRow dr in table.Rows)
  27.                         {
  28.                             Sh.Items.Add((String)dr["TABLE_NAME"]);
  29.                         }
  30.                         Sh.Text = Sh.Items[0].ToString();
  31.                     }
  32.                     catch (Exception exception)
  33.                     {
  34.                         System.Windows.Forms.MessageBox.Show(exception.Message);
  35.                     }
  36.                 }
  37.             }
  38.         }
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-15 13:22 | 显示全部楼层
VBA万岁 发表于 2015-11-15 12:16
受一个帖子(C#读取Excel数据表数据)的启示写出如下代码却仍出错:

出错主要在于24、27两句,分别为:24(无法将类型“System.Data.DataTable”隐式转换为“Microsoft.Office.Interop.Excel.DataTable”。存在一个显式转换(是否缺少强制转换?);
27(Microsoft.Office.Interop.Excel.DataTable”不包含“Rows”,并且不可接受类型为“Microsoft.Office.Interop.Excel.DataTable”的第一个参数的拓展方法“Rows”(是否缺少using指令或程序集引用?)。
如下图(想知道如何“强制转换”、要添加什么“using指令”或“程序集引用”?期待指点!......)


1.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-15 13:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VBA万岁 发表于 2015-11-15 12:16
受一个帖子(C#读取Excel数据表数据)的启示写出如下代码却仍出错:

说明:
代码中的“Sh”是自定义选项卡中的一个comboBox1控件名称;“Pa”是一个编辑框控件的名称;“plmenu”是菜单控件(menu)的名称;“mb1”、“mb2”是两个按钮控件的名称。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-15 13:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VBA万岁 发表于 2015-11-15 13:30
说明:
代码中的“Sh”是自定义选项卡中的一个comboBox1控件名称;“Pa”是一个编辑框控件的名称;“plm ...

想要实现的功能如下图(现主要想将功能区编辑框所显示的Excel文件的所有工作表名称显示在comboBox控件下拉选项中):



2.jpg

TA的精华主题

TA的得分主题

发表于 2015-11-15 15:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA万岁 发表于 2015-11-15 11:13
不太明白......
另,为什以下代码(出处:http://bbs.csdn.net/topics/380113062)可以在下comboBox1添 ...

上面代码的comboBox1,应该是WindowsForm或wpf的控件,不是你楼顶贴中vsto的Ribbon控件.因此,是不一样的.
你有试过new一个RibbonDropdownItem对象吗?

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 23:15 , Processed in 0.036641 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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