当前位置: 首页 > news >正文

VSTO(C#)Excel开发3:Range对象 处理列宽和行高

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        前一篇VSTO(C#)Excel开发2:Excel对象模型和基本操作-CSDN博客

        前一篇我们已经知道可以获取行和列的集合并得到行和列的个数,但是还没有注意到行和列竟然是Range对象。什么都是Range这一点埋下了很多坑。

        本篇我们来设置列宽和行高。

目录

一、确认UsedRange

1.1 编写测试代码

2.2 Range的几个属性

2.3 运行测试

二、设置列宽和行高

2.1 编写测试代码

2.2 Range相关的属性

2.3 WorkSheet获取行和列

2.4 运行测试

三、自动调整列宽和行高


一、确认UsedRange

1.1 编写测试代码

        我们已经知道UsedRange是用到的范围,但是没有内容的单元格算不算呢?

        我们来用程序验证一下,就像第一篇的操作一样,先增加一个按钮“button2”:

        在设计器双击按钮生成按钮的事件代码,然后添加内容如下:

		private void button2_Click(object sender, RibbonControlEventArgs e)
		{
			string str = "开始操作。。。。。。\n";
			try
			{
				Range usedRange = Globals.ThisAddIn.Application.ActiveSheet.UsedRange;
				str += " UsedRange:" + usedRange.Address + "\n";
				str += " UsedRange.Column:" + usedRange.Column + "\n";
				str += " UsedRange.Columns.Count:" + usedRange.Columns.Count + "\n";
				str += " UsedRange.Row:" + usedRange.Row + "\n";
				str += " UsedRange.Rows.Count:" + usedRange.Rows.Count + "\n";

				str += "操作成功完成\n";
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.ToString());
			}
			MessageBox.Show(str);
		}

2.2 Range的几个属性

  • Address 单元格范围
  • Column 第一个列的编号(从1开始)
  • Columns 列的集合(Range),Columns.Count即列的个数
  • Row 第一个行的编号(从1开始),Rows.Count即行的个数

2.3 运行测试

        编译运行,新建空工作簿,执行button2:

        虽然新建空工作簿什么都没有,UsedRange返回的是第一个单元格。

        然后我们执行一下button1,这个按钮会自动生成一些内容,然后再执行button2:

        现在显示的范围是A1到C10,符合预期。

        再选中左上角的几个单元格:

        按一下键盘的“del”键删除,然后再执行buffton2:

        删掉的单元格没有出现在UsedRange里。

        现在我们给一个空单元格加上边框:

        再执行button2:

         现在设置格式的格子也在UsedRange里面了。再改回无边框也没用,还是在UsedRange里面。

        实测拉宽列不会导致列出现在UsedRange里。

二、设置列宽和行高

2.1 编写测试代码

        将刚才的代码增加点内容,替换成如下代码:

		private void button2_Click(object sender, RibbonControlEventArgs e)
		{
			string str = "开始操作。。。。。。\n";
			try
			{
				Worksheet worksheet = Globals.ThisAddIn.Application.ActiveSheet;
				Range usedRange = worksheet.UsedRange;
				str += " UsedRange:" + usedRange.Address + "\n";
				str += " UsedRange.Column:" + usedRange.Column + "\n";
				str += " UsedRange.Columns.Count:" + usedRange.Columns.Count + "\n";
				str += " UsedRange.Row:" + usedRange.Row + "\n";
				str += " UsedRange.Rows.Count:" + usedRange.Rows.Count + "\n";

				for (int i = 0; i < usedRange.Columns.Count; ++i)
				{
					Range colum = worksheet.Columns[usedRange.Column + i];
					colum.ColumnWidth = 15;
				}
				for (int i = 0; i < usedRange.Rows.Count; ++i)
				{
					Range row = worksheet.Rows[usedRange.Row + i];
					row.RowHeight = 30;
				}
				str += "操作成功完成\n";
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.ToString());
			}
			MessageBox.Show(str);
		}

        增加了设置列宽和行高的代码。

2.2 Range相关的属性

  • ColumnWidth 列宽,以标准字符宽度为单位(大概就是英文字符的意思吧),设置时全部设置为同一值,获取时如果不一致返回空(这谁想出来的啊?)
  • RowHeight 行高,以像素为单位(这又是谁想出来的啊,宽和高的单位不一样),坑是一样的,如果多个行的行高不一致返回空

2.3 WorkSheet获取行和列

  • Columns[i],i是基于1的索引
  • Rows[i],i是基于1的索引

2.4 运行测试

        编译运行,先执行button1再执行button2:

        看到有数据的区域的宽和高都修改了。 

三、自动调整列宽和行高

        使用Range的AutoFit方法即可,按照官方文档是设置列宽“或”设置行高,我直接替换上面的代码,因此只是对单一列或单一行操作,都是有效的。

        代码如下:

				for (int i = 0; i < usedRange.Columns.Count; ++i)
				{
					Range colum = worksheet.Columns[usedRange.Column + i];
					colum.ColumnWidth = 15;//被下一句覆盖
					colum.AutoFit();
				}
				for (int i = 0; i < usedRange.Rows.Count; ++i)
				{
					Range row = worksheet.Rows[usedRange.Row + i];
					row.RowHeight = 30;//被下一句覆盖
					row.AutoFit();
				}

         动手拉拉宽度,再执行能更清楚地看到效果。


(这里是文档结束)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/56840.html

相关文章:

  • three.js 在 webGL 添加纹理
  • 学习笔记:Python网络编程初探之基本概念(一)
  • leetcode77.组合
  • mac本地安装运行Redis-单机
  • Hadoop、Spark、Flink Shuffle对比
  • 《Python实战进阶》No15: 数据可视化:Matplotlib 与 Seaborn 的高级用法
  • 系统架构设计师—系统架构设计篇—SOA架构
  • Linux环境通过1Panel连接Maxkb接入AI(千帆大模型)
  • 基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享
  • 电力项目:电力日负荷曲线预测(文末有程序、数据)
  • 实用建模技术
  • 题解:洛谷 AT_dp_c Vacation
  • 软件测试的基础入门(二)
  • 【2025】基于Python+Django的酒店民宿预订管理系统(源码+调试+答疑+学习资料)
  • 【AI】基于扩散方案的大语言模型研究报告
  • 2025 Linux系统安装docker后安装docker-compose
  • 玩转ChatGPT:GPT 深入研究功能
  • LVGL开发说明
  • 深度生成模型(五)——生成对抗网络 GAN
  • 3月8日星期六今日早报简报微语报早读
  • mpirun指令使用
  • 【OpenCV】005、查看图像的形状(图像高度、宽度、通道数)shape()函数,img.shape[0]、[1]、[2]
  • vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
  • PPT 小黑第32套
  • Cyborg Hawk Linux自学
  • 护网中shiro常问的问题
  • 阿里云操作系统(AliOS)
  • C#控制台应用程序学习——3.8
  • Java Spring MVC (2)
  • Lab17_ Blind SQL injection with out-of-band data exfiltration