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

插件主要界面如下:

主要代码如下:

  1. private void button8_Click(object sender, RibbonControlEventArgs e)
  2. {
  3. if (checkBox4.Checked == true)
  4. {
  5. 覆盖图片名称插入();
  6. }
  7. else
  8. if (checkBox4.Checked == false)
  9. {
  10. excelapp = Globals.ThisAddIn.Application;
  11. excel.Worksheet wst = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet;
  12. excel.Range inrow = excelapp.InputBox("选择单元格[行]", Type: );
  13. excel.Range incol = excelapp.InputBox("选择单元格[列]", Type: );
  14. excel.Range oucol = excelapp.InputBox("选择单元格[列]", Type: );
  15. int in_row = inrow.Row;
  16. int in_col = incol.Column;
  17. int ou_col = oucol.Column;
  18. float PicLeft, PicTop, PicWidth, PicHeight;
  19. int n = wst.Cells[incol.Rows.Count, in_col].End().Row;
  20. MessageBox.Show("共:" + n.ToString() + "张图片需要插入");
  21. for (int i = ; i < n + ; i++)
  22. {
  23. if (incol.Columns.Count > || inrow.Rows.Count > || oucol.Columns.Count > )
  24. {
  25. MessageBox.Show("所有的选择:只能为1行或者1列");
  26. break;
  27. }
  28. string str = Convert.ToString(wst.Cells[i, in_col].Value2);
  29. if (str == null || str == string.Empty)
  30. {
  31. continue;
  32. }
  33. wst.Cells[i, ou_col].RowHeight = editBox2.Text;
  34. wst.Cells[i, ou_col].ColumnWidth = editBox1.Text;
  35. string filename = Settings.Default.图片插入文件夹路径 + "\\" + wst.Cells[i, in_col].Value2;
  36. PicLeft = Convert.ToSingle(wst.Cells[i, ou_col].Left);
  37. PicTop = Convert.ToSingle(wst.Cells[i, ou_col].Top);
  38. PicWidth = Convert.ToSingle(wst.Cells[i, ou_col].Width);
  39. PicHeight = Convert.ToSingle(wst.Cells[i, ou_col].Height);
  40. if (checkBox2.Checked == true)
  41. {
  42. wst.Shapes.AddPicture(filename, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, -, -);
  43. float r;
  44. foreach (excel.Shape shp in wst.Shapes)
  45. {
  46. if (shp.Type == MsoShapeType.msoPicture)
  47. {
  48. float rh = PicHeight / shp.Height;
  49. float rw = PicWidth / shp.Width;
  50. if (rw > rh)
  51. {
  52. r = rh;
  53. }
  54. else
  55. {
  56. r = rw;
  57. }
  58. //shp.Left = PicL;
  59. //shp.Top = PicT;
  60. shp.ScaleWidth(r, MsoTriState.msoFalse, MsoScaleFrom.msoScaleFromTopLeft);
  61. }
  62. }
  63. }
  64. else
  65. {
  66. wst.Shapes.AddPicture(filename, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, PicWidth, PicHeight);
  67. }
  68. }
  69. if (checkBox1.Checked == true)
  70. {
  71. 跟随单元格();
  72. }
  73. else
  74. {
  75. 不随单元格();
  76. }
  77. }
  78. }

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. css多类选择器

    <!DOCTYPE html> <html lang="zh-CN"> <head> <style type="text/css ...

  2. 解决AES算法CBC模式加密字符串后再解密出现乱码问题

    问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...

  3. python_选择结构

    >>> if 3>2:print('ok') ok>>> if True:print(3);print(5) >>> chTesst=['1 ...

  4. java多线程对CountDownLatch的使用实例

    介绍 CountDownLatch是一个同步辅助类,它允许一个或多个线程一直等待直到其他线程执行完毕才开始执行. 用给定的计数初始化CountDownLatch,其含义是要被等待执行完的线程个数. 每 ...

  5. CSS position(定位)属性

    关于CSS position,来自MDN的描述: CSS position属性用于指定一个元素在文档中的定位方式.top.right.bottom.left 属性则决定了该元素的最终位置. 然后来看看 ...

  6. html5中让页面缩放的4种方法

    1.viewport 这种方法,不是所有的浏览器都兼容<meta name="viewport" content="width=640,minimum-scale= ...

  7. 唱吧DevOps的落地,微服务CI/CD的范本技术解读

    1.业务架构:从单体式到微服务 K歌亭是唱吧的一条新业务线,旨在提供线下便捷的快餐式K歌方式,用户可以在一个电话亭大小的空间里完成K歌体验.K歌亭在客户端有VOD.微信和Web共三个交互入口,业务复杂 ...

  8. Using variables inside Postman and Collection Runner

    Variables are among the most powerful features in Postman. Using variables in your Postman requests, ...

  9. Node.js 专题

    前提电脑中已经安装过NodeJS, npm.现在需要进行升级操作.1.查看当前的npm和NodeJs的版本: C:\Users\Administrator>node -v v4.4.3 C:\U ...

  10. 浅谈服务间通信【MQ在分布式系统中的使用场景】

    解决的问题 一项技术的产生必然是为了解决问题而生,了解了一项技术解决的问题,就能够很轻松的理解这项技术的设计根本,从而更好地理解与使用这项技术. 消息中间件和RPC从根本上来说都是为了解决分布式系统的 ...