问题的由来是我想在excel中自动插入图片,插入图片后我想根据图片的大小调整cell的大小,于是不经意间就来到了一个坑的面前。。。。
Range对象有ColumnWidth属性和RowHeight属性,这两个属性的单位不同,并且都不是像素。。。
RowHeight的单位是point,可以这样换算
        public static int PixelToPointY(int pixels){return (int)((((double)pixels) * 1440.0) / ((double)GetPPIVertical() * 20));}public static int GetPPIVertical(){int ppi;IntPtr dc = GetDC(IntPtr.Zero);ppi = GetDeviceCaps(dc, 90); //DEVICECAP LOGPIXELSYReleaseDC(IntPtr.Zero, dc);return ppi;}

ColumnWidth的单位是在默认字体中,0-9这几个字符中最宽的宽度。这个值在C#中好像没有直接获取的方法,最后找了一个trick的办法

            System.Drawing.Font font = new System.Drawing.Font("宋体", 11.0f, FontStyle.Regular);int w0 = System.Windows.Forms.TextRenderer.MeasureText("____", font).Width;int w = System.Windows.Forms.TextRenderer.MeasureText("__0__", font).Width;digitWidth = w - w0;
好在宋体中数字的字符宽度都一样。另外注意直接用MeasureText("0", font).Width是不行的,中间会有padding。
故事到这里还没有结束。真正的pixel到ColumnWidth的计算公式是这样的:Truncate(({pixels}-5)/{Maximum Digit Width} * 100+0.5)/100
写出来就是这样
        public static float PixelsToColumnWdthX(int pixels){return (float)((int)((float)(pixels - 5) / (float)digitWidth * 100f + 0.5f)) / 100f;}
另外,想把图片保存到excel中有两个方法
方法1
Pictures pictures = worksheet.Pictures() as Pictures;
Picture pic = pictures.Insert(fileName);
这样保存的是图片的链接,图片文件的位置不能变
方法2会将文件内容保存到xls文件中
Microsoft.Office.Interop.Excel.Shape shape = worksheet .Shapes.AddPicture(fileName,
MsoTriState.msoFalse, MsoTriState.msoTrue, l, t, -1, -1);
先是用参数-1, -1将图片按原大小插入,然后再保持比例缩放
shape.Height = PixelToPointY(height);

最后的宽度还有有一点点对不上,不过问题不大。

参考

https://support.office.com/en-us/article/change-the-column-width-and-row-height-72f5e3cc-994d-43e8-ae58-9774a0905f46
https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.column.aspx
http://stackoverflow.com/questions/7716078/formula-to-convert-net-pixels-to-excel-width-in-openxml-format

用c#在excel中插入图片和设置表格宽度相关推荐

  1. [转载] 使用openpyxl模块向Excel中插入图片

    参考链接: Python | 使用openpyxl模块在Excel工作表中绘制图表 2 使用openpyxl模块向Excel中插入图片 示例Python实现结果展示 示例 向一个Excel表格中A1位 ...

  2. excel poi 加背景图_java 在Excel中插入图片 POI实现

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  3. python下载图片插入excel_Python向Excel中插入图片的简单实现方法

    本文实例讲述了Python向Excel中插入图片的简单实现方法.分享给大家供大家参考,具体如下: 使用Python向Excel文件中插入图片,这个功能之前学习xlwt的时候通过xlwt模块实现过.那时 ...

  4. NPOI在Excel中插入图片

    NPOI在Excel中插入图片 for (int i = 0; i < FeatureMapList.Count; i++){// 第二步:确定图片索引int pictureIdx = wk.A ...

  5. java poi 在excel中插入图片

    java web中导出excel数据是常见的功能,最近遇到一个需求是在excel中插入图片.处理excel及其他微软办公系列软件常用的就是apache poi,它也是支持图片插入的.插入图片最主要的用 ...

  6. java中excel导入图片_java POI实现向Excel中插入图片

    做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片,就是这个加入 ...

  7. java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  8. poi 向Excel中插入图片

    使用poi向excel中插入图片 直接上代码,我这里的图片是项目中的一个logo图片,所以是直接springboot读取本地文件的方式 主要解释一下定位图片位置的八个参数int dx1, int dy ...

  9. Spire.Doc在Word中插入图片时,自适应宽度设置

    需求:往Word中插入图片,需要铺满可编辑区域的宽度,此时需要根据文档的宽度自适应图片的大小了,核心代码如下: Paragraph paragraph = doc.createParagraph(); ...

最新文章

  1. seaborn使用jointplot函数为散点图添加边缘图、添加回归线、为边缘直方图添加密度曲线、自定义边缘直方图的箱体个数bins(Number of Bins to Marginal Plot )
  2. Mongoose源码剖析:Introduction and Installation
  3. richtextbox自动滚动到最下面_工业自动化直线运动部件大全,导轨、轴承、衬套、丝杠、导向轴简介说明...
  4. 13张PPT带你了解主动式消息队列处理集群
  5. 求最大公约数问题(信息学奥赛一本通-T1207)
  6. 性能提升120倍!滴滴东北大学提出自动结构化剪枝压缩算法框架
  7. ROS学习笔记13(测试一个简单的消息发布和消息订阅)
  8. qtitanribbon注册_Qt组件QtitanRibbon教程:如何运用office 2016类
  9. Java课设对对碰_java实现对对碰小游戏
  10. Dojo学习2 dojo快速安装
  11. struts2学到屎挫死-学习笔记(4)
  12. MySQL 主外键关系
  13. 翻译记忆软件-塔多思TRADO经典教程_4
  14. java 读取xls、xlsx文件
  15. 使用云服务器搭建Linux学习环境
  16. 【区块链108将】流量之王的48小时生死转折
  17. PS怎么旋转图片方向
  18. AtCoder Beginner Contest 126
  19. keyshot怎么贴logo_KeyShot图文教程,三步教你如何使用添加有织纹的Logo
  20. [句子成分] 三、宾语

热门文章

  1. 中国(EV)电动汽车的“影子”(上)
  2. PHP支付宝服务窗API接口的开发
  3. HyperMesh生成Flac3D的剖分网格
  4. 存储控制器(SDRAM操作)
  5. 结合Jqery UI autocomplete实现featurelayer关键词的查询与展示
  6. 他是马云最敬佩的人,白手起家,28岁已经成为世界名人
  7. 一百以内质数的输出。(java)
  8. 信息安全技术 网络安全事件应急演练指南
  9. Mysql——进阶语法
  10. JMH204剑网2+精品怀旧端游【剑侠情缘2】降龙端优化汉化+任务GM工具+视频安装教程