技术含量较低,主要是通过VBA代码转换成c#代码而来,从而实现图片批量插入、删除、另存为的批量操作,增加文档使用的通用性。

插件主要界面如下:

主要代码如下:

   private void button8_Click(object sender, RibbonControlEventArgs e)
{
if (checkBox4.Checked == true)
{
覆盖图片名称插入();
}
else
if (checkBox4.Checked == false)
{
excelapp = Globals.ThisAddIn.Application;
excel.Worksheet wst = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
excel.Range inrow = excelapp.InputBox("选择单元格[行]", Type: );
excel.Range incol = excelapp.InputBox("选择单元格[列]", Type: );
excel.Range oucol = excelapp.InputBox("选择单元格[列]", Type: );
int in_row = inrow.Row;
int in_col = incol.Column;
int ou_col = oucol.Column;
float PicLeft, PicTop, PicWidth, PicHeight;
int n = wst.Cells[incol.Rows.Count, in_col].End().Row;
MessageBox.Show("共:" + n.ToString() + "张图片需要插入");
for (int i = ; i < n + ; i++)
{
if (incol.Columns.Count > || inrow.Rows.Count > || oucol.Columns.Count > )
{
MessageBox.Show("所有的选择:只能为1行或者1列");
break;
}
string str = Convert.ToString(wst.Cells[i, in_col].Value2);
if (str == null || str == string.Empty)
{
continue;
}
wst.Cells[i, ou_col].RowHeight = editBox2.Text;
wst.Cells[i, ou_col].ColumnWidth = editBox1.Text;
string filename = Settings.Default.图片插入文件夹路径 + "\\" + wst.Cells[i, in_col].Value2;
PicLeft = Convert.ToSingle(wst.Cells[i, ou_col].Left);
PicTop = Convert.ToSingle(wst.Cells[i, ou_col].Top);
PicWidth = Convert.ToSingle(wst.Cells[i, ou_col].Width);
PicHeight = Convert.ToSingle(wst.Cells[i, ou_col].Height);
if (checkBox2.Checked == true)
{
wst.Shapes.AddPicture(filename, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, -, -);
float r;
foreach (excel.Shape shp in wst.Shapes)
{
if (shp.Type == MsoShapeType.msoPicture)
{
float rh = PicHeight / shp.Height;
float rw = PicWidth / shp.Width;
if (rw > rh)
{
r = rh;
}
else
{
r = rw;
}
//shp.Left = PicL;
//shp.Top = PicT;
shp.ScaleWidth(r, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft);
}
}
}
else
{
wst.Shapes.AddPicture(filename, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, PicWidth, PicHeight);
}
}
if (checkBox1.Checked == true)
{
跟随单元格();
}
else
{
不随单元格();
}
}
}

c# 创建Excel com加载项图片对象批量操作的更多相关文章

  1. c# 创建Excel com加载项Ribbon动态加载工作簿和工作表

    使用 VSTO 创建外接程序,Gallery控件动态加载工作簿名称 代码如下: 加载工作簿名称: private void Gallery1_ItemsLoading(object sender, R ...

  2. VSTO - 使用Excel加载项生成表和图表

    此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ...

  3. Office加载项安装

    出自我的个人主页 Alvin Blog 前言 Excel加载项离不开安装,Excel加载项本身安装及其简单,但这是在申请下来Office开发者账户之后,再次之前都得自行安装 线上安装 微软申请开发者账 ...

  4. 下载安装与配置Excel 2013数据挖掘加载项(SQL Server 2012 SP1 + SQLServer2012_DMAddin.msi)

    一.系统要求 在安装这个数据挖掘加载项前,你的机器必须要可以支持如下的相关系统设备: (1)操作系统:windows 7 和  windows 8,暂时不支持 windows 10. (2)excel ...

  5. Excel催化剂开源第3波-修复ExcelCom加载项失效问题及WPS可调用Com加载项的方法

    为了还原一个干净无侵扰的网络世界,本文将不进行大规模地分发,若您觉得此文有用,不妨小范围地分享到真正有需要的人手中 功能概述 修复ExcelCom加载项常见问题,如每次需重新勾选COM加载项或COM加 ...

  6. Office加载项

    出自我的个人主页 Alvin Blog 前言 前一段时间公司做了有关Excel 加载项的开发,也遇到了很多坑,所以在此记录一下,有两个原因,1.留给以后在用到加载项的时候,复习所用,避免 跳进同一个坑 ...

  7. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  8. Android ListView 图片异步加载和图片内存缓存

    开发Android应用经常需要处理图片的加载问题.因为图片一般都是存放在服务器端,需要联网去加载,而这又是一个比较耗时的过程,所以Android中都是通过开启一个异步线程去加载.为了增加用户体验,给用 ...

  9. 图片_ _Android有效解决加载大图片时内存溢出的问题 2

    Android有效解决加载大图片时内存溢出的问题 博客分类: Android Android游戏虚拟机算法JNI 尽量不要使用setImageBitmap或 setImageResource或 Bit ...

随机推荐

  1. Java动态代理(一)

    好久没有动笔了,最近想巩固一下自己的基础知识,最近听到一同事问为什么JDK动态代理不能代理类,一听感觉懵逼呀!自己好像也不能很好的描述出来,所以想用2篇文章来复习一下动态代理知识: 一.什么是静态代理 ...

  2. linux内核堆栈

    一:进程的堆栈 内核在创建进程的时候,在创建task_struct的同时会为进程创建相应的堆栈.每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存 在于内核空间.当进程在用户空间运行时,c ...

  3. java中Number类理解

    一般我们使用数字的时候,会使用内置的数据类型,比如int.float.double.但在实际的开发当中,我们有时候会遇到需要使用数字对象,而不是数据类型的时候.为解决这个问题,java为每一种数据类型 ...

  4. 探讨SELECT语句的元数据&amp;动态取样&amp;读一致性导致的一致性读和递归操作

    前几天,论坛上的同行在讨论SELECT语句的元数据,动态取样和读一致性导致的一致性读和递归问题,今天有时间,就试着进行了测试,本人测试环境如下: win7_64+Oracle11.2.0.4_64 那 ...

  5. 深入理解SpringBoot之装配条件

    我们知道自动装配是SpringBoot微服务化的核心,它会把META-INF/spring.factoires里配置的EnableAutoConfiguration注册到IOC容器里.但是,请大家考虑 ...

  6. 20个大大节省你时间的HTML5开发工具

    Rendera 如果你希望有个环境可以测试.浏览和体验各种不同的 CSS/HTML 和 JavaScript 代码,Rendera 为你提供了实时的运行结果.类似 RunJS. Patternizer ...

  7. 关于extern的用法

    extern表示该变量或者函数时在另一个地方定义了. 在C++编程中,如果将程序分为多个文件,则需要有在文件间共享代码的方法,这时如果一个变量或者函数需要在多个文件中使用,则可以使用extern来声明 ...

  8. copy.copy()与copy.deepcopy()的详解

    copy.copy() 元组和列表调用这个方法效果也不一样. 元组的效果: a = [1,2,3] b = [4,5,6] c = (a,b) e = copy.copy(c) 可以看到:e和c是指向 ...

  9. B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij

    B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...

  10. BZOJ_3289_Mato的文件管理_莫队+树状数组

    BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 .为了防止他人 ...