c# 创建Excel com加载项Ribbon动态加载工作簿和工作表
使用 VSTO 创建外接程序,Gallery控件动态加载工作簿名称
代码如下:
加载工作簿名称:
private void Gallery1_ItemsLoading(object sender, RibbonControlEventArgs e)
{
app = Globals.ThisAddIn.Application;
gallery1.Items.Clear();
int n = ;
foreach (excel.Workbook workbook in app.Workbooks)
{
//RibbonGallery gallery = this.Factory.CreateRibbonGallery();
RibbonDropDownItem downItem = this.Factory.CreateRibbonDropDownItem();
downItem.Tag = workbook.Name + n.ToString();
gallery1.Items.Add(downItem);
downItem.Label = workbook.Name;
downItem.Image = Properties.Resources.Excel_32px_1185985_easyicon_net;
n++;
}
}
选择子项目激活工作簿:
private void Gallery1_Click(object sender, RibbonControlEventArgs e)
{ string tg = gallery1.SelectedItem.Label;
//MessageBox.Show(tg);
app = Globals.ThisAddIn.Application;
excel.Workbook workbook = app.Workbooks[tg];
workbook.Activate();
}
使用 VSTO 创建外接程序,dropDown控件动态加载工作表名称
代码如下:
加载工作表名称:
private void DropDown1_ItemsLoading(object sender, RibbonControlEventArgs e)
{
try
{ app = Globals.ThisAddIn.Application;
int n = ;
dropDown1.Items.Clear();
foreach (excel.Worksheet worksheet in app.Worksheets)
{
RibbonDropDownItem downItem = this.Factory.CreateRibbonDropDownItem();
downItem.Tag = worksheet.Name + n.ToString();
dropDown1.Items.Add(downItem);
downItem.Label = worksheet.Name;
downItem.Image = Properties.Resources.office_excel_24px_1116424_easyicon_net;
n++;
}
if (app.ActiveWorkbook.Path != "")
{
RibbonDropDownItem downItem1 = this.Factory.CreateRibbonDropDownItem();
downItem1.Label = "打开工作簿所在文件夹";
dropDown1.Items.Add(downItem1);
downItem1.Image = Properties.Resources.folder_32px_1229424_easyicon_net;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
选择子项目激活工作表:
private void DropDown1_SelectionChanged(object sender, RibbonControlEventArgs e)
{
try
{
string tg = dropDown1.SelectedItem.Label;
//MessageBox.Show(tg);
app = Globals.ThisAddIn.Application;
if (tg == "打开工作簿所在文件夹")
{
string FilePath = app.ActiveWorkbook.Path;
string FileName = app.ActiveWorkbook.Name;
//System.Diagnostics.Process.Start(FilePath);
System.Diagnostics.Process.Start("Explorer.exe", "/select," + FilePath + "\\" + FileName);
}
else
{
excel.Worksheet worksheet = app.ActiveWorkbook.Worksheets[tg];
worksheet.Protect(DrawingObjects: MsoTriState.msoTrue, Contents: MsoTriState.msoTrue, Scenarios: MsoTriState.msoTrue, AllowFiltering: MsoTriState.msoTrue, AllowUsingPivotTables: MsoTriState.msoTrue);
worksheet.Protect(DrawingObjects: MsoTriState.msoTrue, Contents: MsoTriState.msoTrue, Scenarios: MsoTriState.msoTrue, AllowFiltering: MsoTriState.msoTrue, AllowUsingPivotTables: MsoTriState.msoTrue);
worksheet.Protect(DrawingObjects: MsoTriState.msoTrue, Contents: MsoTriState.msoTrue, Scenarios: MsoTriState.msoTrue, AllowFiltering: MsoTriState.msoTrue, AllowUsingPivotTables: MsoTriState.msoTrue);
worksheet.Protect(DrawingObjects: MsoTriState.msoTrue, Contents: MsoTriState.msoTrue, Scenarios: MsoTriState.msoTrue, AllowFiltering: MsoTriState.msoTrue, AllowUsingPivotTables: MsoTriState.msoTrue);
worksheet.Unprotect();
worksheet.Visible = excel.XlSheetVisibility.xlSheetVisible;
worksheet.Activate();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
c# 创建Excel com加载项Ribbon动态加载工作簿和工作表的更多相关文章
- Delphi静态加载DLL和动态加载DLL示例
下面以Delphi调用触摸屏动态库xtkutility.dll为例子,说明如何静态加载DLL和动态加载DLL. 直接上代码. 1.静态加载示例 unit Unit1; interface uses W ...
- Excel催化剂开源第7波-VSTO开发中Ribbon动态加载菜单
在VS开发环境中,特别是VSTO的开发,微软已经现成地给开发者准备了设计器模式的功能区开发,相对传统的VBA.ExcelDna和其他方式的COM加载项开发来说,不需要手写xml功能区,直接类似拖拉窗体 ...
- vc静态加载dll和动态加载dll
如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib, &quo ...
- Vue加载组件、动态加载组件的几种方式
https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...
- [办公自动化]excel工作簿内的表无法删除,单击右键无删除键
今天同事问,我自己的工作簿,没有设置保护,但是就是无法删除其中的工作表. 后来发现,她的excel工作簿打开的文件名后面显示[共享]. 原因找到了. 取消共享就可以了.
- Excel 工作簿、工作表与单元格
工作簿 工作簿是指在 Excel 中用来存储并处理数据的文件,其扩展名是.xlsx.工作簿是由工作表组成的,每一个工作簿都可以包含一个或多个工作表,默认为 3 个工作表.Excel 2007 之前的版 ...
- 【C#】Excel导出合并行和列并动态加载行与列
简单的Excel导出比较好做,只要设置表头,循环在表格中赋值添加数据即可,但是如果表头是不固定的,并且个数是不确定的,这就需要根据查询出数据的特点来添加导出了. 导出效果图: 如上图所示,商品的个数是 ...
- android左右滑动加载分页以及动态加载数据
android UI 往右滑动,滑动到最后一页就自动加载数据并显示 如图: package cn.anycall.ju; import java.util.ArrayList; import java ...
- excel破解工作簿与工作表保护
1.工作簿保护 1.1.使用压缩文件打开文件
随机推荐
- 高并发&高可用系统的常见应对策略
解耦神器:MQ MQ是分布式架构中的解耦神器,应用非常普遍.有些分布式事务也是利用MQ来做的.由于其高吞吐量,在一些业务比较复杂的情况,可以先做基本的数据验证,然后将数据放入MQ,由消费者异步去处理后 ...
- mysql日期存储格式int,timestarmp,datetime
int (1).4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int索引存储空间也相对较小,排序和查询效率相对较高一点点 (2)可读性极差,无法直观的看到数据. TIMESTA ...
- qtcreator VLD内存检测
简介 Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具.相比较其它的内存泄露检测工具,它在检测到内存泄漏的同时,还具有如下特点: 可以得到内存泄漏点的调用 ...
- 关于pytest的命令行传参
#conftest.py import pytest def pytest_addoption(parser): #parser:用户命令行参数与ini文件值的解析器 # group = parser ...
- linux后台运行相关命令
1.nohup & 让程序后台运行,nohup 命令 & 2.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, ...
- debug模式不报错,release模式报错
经常会 char * pMem = new char[icount]; 其中icount为变量,然后对该内存段猛的操作.release编译出来,出现莫名奇妙的错误.但是debug没问题. 后面查了别人 ...
- springboot2.0整合logback日志(详细)
<div class="post"> <h1 class="postTitle"> springboot2.0整合logback日志(详 ...
- html-前端内容初识
HTML解释: HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的规则(W3C),大家都来遵守他,这 ...
- [codevs2460]树的统计
题目描述 Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHAN ...
- three.js 居中-模型
api: 代码: <!DOCTYPE html> <html lang="en"> <head> <title>three.js w ...