用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中插入图片和设置表格宽度 的相关文章

  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • 使用 ObjPtr(Me) 返回自定义类实例的名称?

    我明白那个ObjPtr http support microsoft com kb 199824将返回内存中对象的地址 并且它指向一个名为 IUNKNOWN 的结构 并且其中编码了某种接口定义以公开对象结构 但我不知道如何确定一个对象的接口
  • Excel 数字缩写格式

    这是我想要完成的任务 Value Display 1 1 11 11 111 111 1111 1 11k 11111 11 11k 111111 111 11k 1111111 1 11M 11111111 11 11M 11111111
  • 输入新行并复制上面单元格中的公式

    我正在尝试创建一个 Excel 宏来执行以下操作 在文档末尾输入新行 复制上面单元格中的公式 到目前为止我有这个 Sub New Delta Go to last cell Range A4 Select Selection End xlD
  • 使用输入作为显示日期的基础

    我需要一种方法来使用用户窗体上的输入来确定将在输出上显示的日期 这是我的代码 If StatusBox Value lt 23 59 And ShiftCode Value AP Then Cells emptyRow 8 Value Da
  • SQL Excel VBA 运行时错误 3709 无效连接

    这是我的第一个问题 欢迎提出建设性的批评 我正在尝试从 Excel VBA 查询 Access 数据库并将返回信息放入 Excel 范围中 我收到此错误 错误消息 运行时错误 3709 连接无法用于 执行此操作 在此情况下它已关闭或无效 语
  • 无法使用 VBA 代码从 Excel 连接到 Teradata - 无法通过网络访问 Teradata 服务器

    我一直在尝试使用 vba 代码从 Excel 连接到 Teradata 但收到以下错误 无法通过网络访问 Teradata Server 我已经能够从 Teradata SQL 助手成功连接 并且还成功 ping 通 Teradata 服务
  • 将 MS 转换为秒

    我发现这个公式可以用来将 MS 转换为秒 但它是为 Excel 2002 编写的 而我正在使用 2010 CONCATENATE TEXT INT B1 1000 86400 hh mm ss B1 INT B1 1000 1000 以下是
  • 使用“Openxml writer”合并 Excel 中的单元格

    我想合并单元格是excel 通过使用 DOM 方法 我可以轻松做到这一点 但由于我的 Excel 文件太大 当我尝试获取工作表时 它会抛出内存不足异常 所以我必须使用SAX方法来读取excel文件 但我不知道如何用这种方法合并单元格 查了很
  • 在工作表中合并行和求和值

    我有一个 Excel 工作表 其中包含以下数据 管道 来分隔列 A B C X 50 60 D E F X 40 30 A B C X 10 20 A B C Y 20 20 A B C X 20 70 D E F X 10 50 A B
  • 如何使用 Python 将多个文本文件中的数据提取到 Excel 中? (每张纸一个文件的数据)

    到目前为止 为了让我的代码读取文本文件并导出到 Excel 我有 import glob data for infile in glob glob txt with open infile as inf data infile l 1 fo
  • Excel 接受一些字符,而 OpenXml 有错误

    我有一个字符串 我想使用 C 中的 openxml 组件将其导出到 Excel 文件 我的文本有 u001f 字符 而 openxml 对此字符有错误 错误文本 十六进制值 0x1f 是无效字符 我将该测试直接复制到 Excel 中 没有问
  • Pandas.read_excel 有时会错误地将布尔值读取为 1/0

    我需要将一个非常大的 Excel 文件读入 DataFrame 中 该文件包含字符串 整数 浮点和布尔数据 以及丢失的数据和完全空的行 还值得注意的是 某些单元格值源自单元格公式和 或 VBA 尽管理论上这不会影响任何内容 正如标题所示 p
  • 从Excel单元格中提取固定长度的数字

    一些类似名称的线程 但仍然无法解决我的问题 我需要从 Excel 字符串中提取固定长度的 NUMBER 值 在我的场景中为 8 位数字 为此目的提供了以下 Excel 公式 MID A1 FIND SUBSTITUTE SUBSTITUTE
  • 使用 Excel VBA 循环工作簿文件夹并将所有工作表导出为制表符分隔文本

    我拼凑了一个 Excel VBA 脚本 该脚本将打开的工作簿中的所有工作表写入单独的制表符分隔文件 这仍然是 宏 吗 我正在 Excel 真空中学习这一点 它一次只处理一本工作簿 效果很好 这里是 Sub exportSheetsToTex
  • 有没有一种方法可以将这些列转换为数据格式?

    有没有办法将这些列转换为数据格式 gg mm aaaa 时 分 秒 日期 20220601 gt gt gt gt 2022 06 01 小时 3047 gt gt gt gt gt 00 30 47 时 分 秒 我对 B 列有严重问题 我
  • 如何在VBA中指定当前目录作为路径?

    我有一个启用宏的工作簿 我需要指定启用宏的文件所在的当前文件夹作为路径 我尝试设置 path ActiveWorkbook Path and path CurDir 但这些都不适合我 对此有什么想法吗 如果您想要的路径是运行宏的工作簿的路径
  • 如何解锁和锁定 Excel 单元格以运行宏

    我有一个电子表格 有两个按钮 从数据库检索记录 另一个按钮用于将更改从 Excel 上传到数据库 从数据库检索记录的宏如下 现在 在检索记录后 我希望用户仅编辑某些列 此处为从一月到场景的列 以便用户在更新这些单元格后可以单击更新按钮将更改
  • 使用 VBA 跟踪 Excel 2007/2010 中的样式更改

    我需要跟踪某些工作表中的单元格样式变化 我无法在 Excel 2007 2010 中使用内置跟踪 因为我需要自定义某些内容 我尝试通过 Workbook SheetChange 跟踪样式更改但失败了 当我将单元格从一种样式更改为另一种样式时
  • 使用 EPplus 在 Excel 中添加下拉菜单

    我需要帮助 如何使用 Epplus 在 Excel 中添加下拉列表 无需验证 我只需要把它添加到我的模板中 下拉列表中的记录不是动态的 using ExcelPackage p new ExcelPackage ExcelWorksheet

随机推荐

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

    多亏了人工智能 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 这两个属性