本帖最后由 青城山苦丁茶 于 2014-2-9 13:42 编辑
现在我们来做个自定义功能菜单。
新建一工程VSTO_C2,右击VSTO_c2------添加-----新建项,选功能区(可视化设计器) 默认为group1,可随意改,改的地方在右下边的属性label中,改一下,如my。
添加按钮:点最左边的工具箱-----button点两下就增加了一个按钮button1(同样可改,改为如first。而且可以给它加个图片,都在属性中),右击first----查看代码,则进入编制代码界面。编制代码界面同样已经有一大堆东东了。我们在其中的 private void Ribbon1_Load(object sender, RibbonUIEventArgs e) {
} 中加代码,输入this.button1.Click +=按两次tab(和前面的事件一样操作)自动完成一些工作,再输入些东东,完成的结果如下: private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { this.button1.Click += button1_Click; }
void button1_Click(object sender, RibbonControlEventArgs e) { System.Windows.Forms.MessageBox.Show("Test"); } 运行一下,EXCEL中多了个“加载项”,点他,点一下first,就有提示框了。 下面我们将这个按钮的功能实用化一点:将当前工作薄的所有表名写到当前工作表A1起的一列单元格中。右击sheet1.cs-----查看代码进入sheet1.cs的代码界面,添加一段代码(红色部份): private void Sheet1_Startup(object sender, System.EventArgs e) { } public void listsheetname()//VBA:public sub listsheetname() { int i = 0; Excel.Range rng = Application.get_Range("a1"); //VBA:set rng=range(“a1”) foreach (Excel.Worksheet sht in this.Application.Worksheets) //VBA:for each sht in worksheets { rng.get_Offset(i++, 0).Value = sht.Name; //VBA:rng.offset(i,0).value=sht.name:i=i+1 } }
private void Sheet1_Shutdown(object sender, System.EventArgs e) { } 然后再将前面写在ribbon1.cs中的代码改成: void button1_Click(object sender, RibbonControlEventArgs e) { Globals.Sheet1.listsheetname(); //就改成这句 } 运行一下,多加几张sheet,看结果对不对。成了吧?
列出所有表名的代码还可改成以下几种方式(只是为了多体现几种表示方法): 方法A: int i = 1; Excel.Range rng; foreach(Excel.Worksheet sht in this.Application.Worksheets ) { rng = Application.get_Range("a" + i); rng.Value = sht.Name; i++; } 方法B: int i = 0; //此处的初值为0,所以下面为++i,与i++不同 foreach(Excel.Worksheet sht in this.Application.Worksheets ) Application.ActiveSheet.cells[++i,1]= sht.Name; //由于循环体只有一句,{}可省 方法C: for (int i = 1; i <= Application.Worksheets.Count; i++) Application.ActiveSheet.cells[i, 1] = Application.Worksheets.name; 方法D:显示数组的定义、应用。将名称先写进数组,再将数组写进单元格,用了resize、数组最大下标、数组转置 string[] ar = new string[Application.Worksheets.Count]; for (int i = 0; i < Application.Worksheets.Count; i++) ar = Application.Worksheets[i+1].name; Application.get_Range("a1").get_Resize(ar.GetUpperBound(0) + 1).Value = Application.WorksheetFunction.Transpose(ar);
发布问题就不再说了,同上面。
待续……
|