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

2023-05-16

问题的由来是我想在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 LOGPIXELSY
            ReleaseDC(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

————————————————

版权声明:本文为CSDN博主「Garuda」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Garuda/article/details/53106632

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用c#在excel中插入图片和设置表格宽度 的相关文章

  • Apache POI - JAVA - 迭代 Excel 中的列

    这里是java新手 我正在编写一个代码 该代码读取 Excel 文件 查看列中的单元格 然后编写如下表所示的内容 我有一个 Excel 文件 如下所示 col1 col2 col3 col4 row1 2 3 1 1 w row2 3 2
  • 使用按钮从 Django 项目根下载文件

    So this is the webpage I m creating atm with Django 1 8 希望用户能够将数据导出为 csv 当用户 在框中写下 Reddit 子版块名称 按下 获取数据 按钮 会发生什么 它创建了一个
  • Javascript 链接在 selenium excel vba 中没有响应

    我正在尝试做这样一行点击 javascript 链接的操作 FindElementById ctl00 ContentPlaceHolder1 LinkButton4 WaitDisplayed True 3000 Click 这条线没有任
  • 通过php将MYSQL数据导出到Excel/CSV

    我想通过 php 将 MYSQL 数据导出到 Excel CSV 这样我以后就可以使用我的数据库 或者有人可以使用并理解它 要使用适合 EXCEL 的语法创建 CSV 文件 您可以使用基本 SQL SELECT FROM mytable I
  • 无法在函数内将数据写入 Excel 2007/2010 中的 VBA 单元格

    我想通过 VBA 设置单元格的值 我用谷歌搜索了一下 看到了一些解决方案 Sheets SheetName Range A1 value someValue Sheets SheetName Cells 1 1 value someValu
  • VBA添加图表标题

    我只想使用 vba 将图表标题添加到我的图表中 我实际上想对每张纸中的每个图表递归地执行此操作 但我什至无法让 1 个图表工作 这是我的代码 Dim chnam chnam Left ActiveSheet Name Len ActiveS
  • 索引多列并匹配不同的值,返回跨列的唯一值列表

    我已经在漫长的几周内广泛寻找解决我的问题的方法了 我提出了一个部分有效的解决方案 我将其包含在底部 供那些可能知道如何修改 扩展它们以解决问题的人使用 这就是我想要完成的任务 以下描述参考此屏幕截图https i stack imgur c
  • 如何检查单元格是否为空 (Excel\VisualC#)

    我的目标是逐行检查Sheet1为了发现有多少行 所以我放了一个 do while 一旦到达空白单元格就应该停止 Example 第 1 行数据第2行数据第3行数据第4行数据第5行数据 第 6 行数据第7行数据 在本例中 我只需要前 5 行
  • Excel VBA:通过快捷键运行打开文档后宏挂起,但从 VB 编辑器运行完美

    我遇到了一个奇怪的问题 我决定分配一个键盘快捷键Ctrl Shift P我的 VBA 例程之一 该例程假设打开一个现有的 Excel 工作簿 复制一些信息并 SaveAs另一个名字 当我在 Visual Basic 编辑器中点击 播放 时
  • 防止 Excel 公式中的单元格数量增加

    我在 Excel 中有一个公式 需要根据该行中的数字除以一个常数对该列的几行运行 当我复制该公式并将其应用于范围中的每个单元格时 所有单元格编号都会随行增加 包括常量 所以 B1 127 C4 IF B4 lt gt B4 B1 如果我复制
  • Excel Active-X 按钮无法单击

    我有一个在 Excel 中应该可以点击的按钮 当我尝试单击它时 什么也没有发生 我注意到 如果我单击并按住右下角的鼠标 则会出现第二个按钮 这种情况过去发生过 当我移动鼠标单击该按钮时 我可以单击 一切都会正常 但这一次 当我移动鼠标时 按
  • 您可以使用 Openpyxl 将全名拆分为名字和姓氏吗?

    我有一个 Excel 文件 我一直在尝试使用 openpyxl 将列 全名 拆分为两个单独的名字和姓氏列 例如 我有 from openpyxl import Workbook load workbook wb load workboo p
  • 使用 VBA 清除 Excel 单元格格式而不清除 NumberFormat

    是否可以在不改变 的情况下清除Excel单元格格式和内容 使用VBA NumberFormat 给定的单元格 我尝试过 ClearContents ClearFormats 但 ClearFormats 删除了数字格式细胞也 请建议 你可以
  • 有没有一种方法可以通过对一列求和并基于另一列来提取数据

    我正在尝试按帐户按月汇总金额 并将结果按帐户显示在另一个单元格中 AND E1 gt MONTH E1 E8 SUMPRODUCT F 1 F 8 gt MONTH E1 E8 6 D 1 F 8 D1 gt 0 6 Account Amo
  • 如何让 selenium 等待页面在 Selenium - Excel VBA 包装器中完全加载?

    Selenium Excel VBA 的包装器使用什么代码或函数 以便程序将等待页面完全加载然后执行其他命令 最新版本在执行所需操作之前隐式等待目标元素存在 例如 driver FindElementById Click 默认情况下会在抛出
  • Excel 2013 COM API 在服务帐户下挂起 ExportAsFixedFormat

    我有一个 NET Windows 服务 它调用 Excel 2013 COM API 以在 PDF 上导出 Excel 文档 我已尝试使用在两个不同域帐户下运行的 Windows 服务来执行此代码 这两个帐户都是运行代码的计算机上的本地管理
  • Mono for Android,读取和写入 XLSX

    我正在使用 Mono for Android 开发一个应用程序 我需要读取和创建 XLSX Excel 文件的功能 我尝试过EPPlus和NPOI 并快速浏览了一下微软的Open XML SDK 发现了以下问题 EPPlus 需要 Wind
  • 有没有办法使用 openpyxl 或 xlsxwriter 保护工作簿?

    我正在尝试自动化 Excel 报告 并且我希望用户不要尝试重命名或重新排序工作表 虽然我使用 xlsxwriter 保护单个单元格没有问题 但我没有看到保护工作簿本身的选项 我正在寻找 openpyxl 但教程似乎没有任何效果 编辑 我现在
  • 双击打开 Excel 工作簿时,Excel 2010 AddIn 未加载

    我为 Excel 2010 编写了一个加载项 如果我从 开始 菜单打开 Excel 它可以正常工作 但是 如果我双击 Excel 工作簿 则无法加载 AddIn 我签入了ThisAddIn cs 方法InternalStartup 没有参与
  • 使用 ClosedXML 附加到 excel 文件

    我需要将新数据附加到使用 ClosedXML 创建的现有 Excel 文件中 如何使用 ClosedXML 附加到 Excel 文件 如何获取最后一条记录的行号并将其附加到该行号上 或者还有其他内容 Thanks 打开现有工作簿 然后使用L

随机推荐

  • 人工智能会取代程序员吗?

    多亏了人工智能 xff08 AI xff09 xff0c 软件将在未来自行编写 至少 xff0c 这就是谷歌首席执行官桑达尔 皮查伊 xff08 Sundar Pichai xff09 对软件开发未来的看法 他是对的 xff01 这并不能使
  • 解决kotlin与databinding同时使用时 Unresolved reference问题(Unresolved reference RN)

    添加一下代码 xff1a 编译出现以下错误 需要添加一下代码 在app gradle中加入以下内容 xff0c 其中版本号 apply plugin 39 kotlin kapt 39 kapt generateStubs 61 true
  • QQ登录 110401:请求的应用不存在

    我出现的原因是在AndroidManifest里边没有把应用的名称改为与QQ开放平台上创建应用的名称相同
  • @Value和@Bean注解的执行顺序问题

    Springboot中使用 64 Configruation和 64 Bean一起将Bean注册到ioc容器中 xff0c 而 64 Value常用于将yml配置文件中的配置信息注入到类的成员变量中 当 64 Configruation 6
  • MTK平台 Sensor Hub配置(以stk3x3x光感为例)(Android 9.0)

    Sensor Hub 配置 alps mediateksample PROJECT ProjectConfig mk MTK SENSOR SUPPORT 61 yes 必须配置 MTK SENSOR HUB SUPPORT 61 yes
  • qemu-system-x86_64(1)-Linux手册页

    qemu system x86 64 名称概要描述选项printf 96 96 letmein 39 39 gt mypasswd txt qemu system x86 64 object secret id 61 sec0 file 6
  • 设置CMD窗口

    文章目录 1 图形界面设置1 1 打开CMD窗口1 2 点击属性设置 2 命令mode修改2 1 查看控制台信息2 2 修改控制台参数 3 注册表方式修改3 1 打开注册表3 2 修改参数 1 图形界面设置 1 1 打开CMD窗口 按下wi
  • 学习之旅——Android的onNewIntent()

    onNewIntent何时会被执行 xff1a 前提 xff1a 在该Activity的实例已经存在于Task和Back stack中 或者通俗的说可以通过按返回键返回到该Activity 时 当使用intent来再次启动该Activity
  • Getting Exception org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.l

    把下面的依赖去掉即可 xff01 log4j to slf4j 2 0 2 jar log4j to slf4j 2 0 2 sources jar log4j slf4j impl 2 0 2 jar log4j slf4j impl 2
  • C# 条件编译 (#if 和 Conditional)

    本文转载自 xff1a C 条件编译 xff08 if 和 Conditional xff09 腾讯云开发者社区 腾讯云 本文主要讲述C 中 xff0c 使用 if 和 Conditional 特性来按条件编译代码的不同原理和适用场景 本文
  • 网络时延的几个概念

    假设一个数据包X从路由器A到路由器B xff0c 我们来分析下 xff0c 在这种情况下 xff0c 数据包X从A到B的总时延 xff1a 当A接收到数据包时 xff0c 会检测数据包的首部 xff0c 决定将该数据包导向哪一个链路上 xf
  • C#自动引用Debug | Release版本的dll

    1 其它模块的的dll路径 存放路径 解决方案 43 lib 文件夹下 xff0c Debug存放Debug文件 xff0c Release目录存放Release文件 2 其他项目中如何自动加载对应版本的dll文件 文本格式打开 cspro
  • Visual Studio 远程调试

    条件 xff1a 应用程序和本机调试机器需在同一局域网内 1 找vs里面的远程工具文件夹 xff0c 复制到目标电脑 2 然后点进去进行对应的位数 xff0c 找下图此文件 xff0c 右键管理员运行 xff0c 并设置选项 xff08 部
  • c#离线安装NuGet包

    1 前言 在开发c 程序时 xff0c 有时会用到第三方库 xff0c 可以在VS中从NuGet直接下载 xff0c 但是这是在开发环境联网的情况下 xff0c 如果开发环境处于无网络连接的时候 xff0c 那应该如何安装NuGet包呢 x
  • C#如何实现读写ini文件

    本文转载自 xff1a https www jb51 net article 235534 htm 一 c 读写Ini操作类 using System using System Collections Generic using Syste
  • C#Office.Interop.Excel.dll读写表格

    本文摘自 xff1a C Office Interop Excel dll读写表格 笨鸟未必先飞的博客 CSDN博客 c microsoft office interop excel 一 写入excel lt summary gt 创建一个
  • C#组件系列——又一款Excel处理神器Spire.XLS(二)

    阅读目录 一 基础入门 1 新建Workbook2 读写Workbook3 保存Workbook二 样式 1 文本样式2 单元格样式3 表格样式4 富文本编辑框三 冻结行列 1 冻结行2 冻结列四 合并单元格五 选项过滤功能六 下拉框七 显
  • C#组件系列——又一款Excel处理神器Spire.XLS(一)

    阅读目录 一 组件介绍二 组件安装使用 1 官方下载安装2 Nuget安装三 组件功能介绍 1 Excel转PDF2 Excel生成图表3 其他功能介绍四 总结 正文 前言 xff1a 最近项目里面有一些对Excel操作的需求 xff0c
  • 小米蓝牙耳机airdots青春版双耳模式

  • 用c#在excel中插入图片和设置表格宽度

    问题的由来是我想在excel中自动插入图片 xff0c 插入图片后我想根据图片的大小调整cell的大小 xff0c 于是不经意间就来到了一个坑的面前 Range对象有ColumnWidth属性和RowHeight属性 xff0c 这两个属性