C#读写EXCEL单元格的问题实现
最近, 我在用C#开发一个EXCEL Add-In的时候,发现了一些害人不浅的坑,特来总结列举如下:
这里我读写EXCEL引用的是using Excel = Microsoft.Office.Interop.Excel;
问题一、如何判断一个单元格去除首尾空格后是不是空的
在获取单元格内的文本内容进行判断时,总觉得最好用Text属性,少用或不用Value和Value2属性
if (cur_sht.Range["A1"].Text.Trim() == "") {}
Text属性是只读,没有任何参数,会读取单元格的表面内容,表面内容是指当单元格的格式发生变化时,Text属性读取到的内容也会发生变化
Value属性可读可写,有一个可选参数(XlRangeValueDataType),会读取单元格的实际内容,实际内容是指给单元格赋值时是怎么样的内容,实际内容就一直保持不变,除非重新赋值
这个可选参数有三个值可选,第一个值是默认的,其他两个值没试过,估计永远也不会去用
xlRangeValueDefault=10:cur_sht.Range["A1"].Value[Excel.XlRangeValueDataType.xlRangeValueDefault] xlRangeValueMSPersistXML=12:cur_sht.Range["A1"].Value[Excel.XlRangeValueDataType.xlRangeValueMSPersistXML] xlRangeValueXMLSpreadsheet=11:cur_sht.Range["A1"].Value[Excel.XlRangeValueDataType.xlRangeValueXMLSpreadsheet]
Value2属性也是可读可写,跟Value属性一样,但没有参数
对于实际内容不为空的单元格,使用cur_sht.Range["A1"].Value.Trim()或者cur_sht.Range["A1"].Value2.Trim()是完全没问题的,但如果是一个完全为空的单元格,Value和Value2属性就会返回一个空对象,这时候后面再接Trim()方法就会报错了,要用Value或Value2属性找出这种完全为空的单元格,可以这样:
if (cur_sht.Range["A1"].Value is null) {}
但是这样就不能把去除空格后的情况考虑进去了,而Text属性又有一个弊端,因为它是读取单元格的表面内容,所以有时候读取到的内容用来判断并不能反映真实的情况:
比如单元格存储的是一个长日期,但是单元格宽度不够的话就会显示成"##########",这时候Text属性获取到的就是一串井号,这种情况可以在前面添加一句代码:
cur_sht.Columns.AutoFit();
总之,两种方法皆有利有弊,视具体情况选择吧。
问题二、给一个单元格赋值为空有多少种方法
这三种方法效果都是一样的,用cur_sht.Range["A1"].Value取值都会返回null。
cur_sht.Range["A1"].Value = null; cur_sht.Range["A1"].Value = ""; cur_sht.Range["A1"].Value =string.Empty;
问题三、如何利用数组快速读写单元格区域内容
如果要向行向区域的单元格写入东西,可以用一维数组,比如:
int[] arr1 = new int[4] { 1, 2, 3, 4 }; cur_sht.Range["a1:d1"].Value = arr1;
如果要向列向区域的单元格写入东西,可以用二维数组,比如:
int[,] arr2 = new int[4, 1] { { 4, },{ 3, },{ 2, },{ 1, } }; //int[,] arr2 = new int[4, 1] { {4},{3},{2},{1} };这个也可以 cur_sht.Range["a1:a4"].Value = arr2;
如果要向矩形区域的单元格写入东西,更要用二维数组,比如:
int[,] arr3 = new int[4, 2] { { 4, 3}, { 3, 2}, { 2, 1}, { 1, 4} }; cur_sht.Range["a1:b4"].Value = arr3;
如果要从单元格区域读出内容,放进数组中,不管一二维,都可以这么写:
object[,] arr4 = (object[,])cur_sht.Range["a1:b4"].Value2;
MessageBox.Show(arr4.GetValue(1,1).ToString());//这里输出的是A1单元格,index从1开始
好了,拿去用吧,不谢^ ^
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:C#利用缓存分块读写大文件
栏 目:C#教程
本文标题:C#读写EXCEL单元格的问题实现
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/4768.html
您可能感兴趣的文章
- 01-10C#读写INI文件的方法
- 01-10c#读写App.config,ConfigurationManager.AppSettings 不生效的解决方法
- 01-10C#读取Excel的三种方式以及比较分析
- 01-10轻松学习C#的读写操作
- 01-10C#定制Excel界面并实现与数据库交互的方法
- 01-10举例说明Java多线程编程中读写锁的使用
- 01-10C#读写指定编码格式的文本文件
- 01-10C#使用Aspose.Cells控件读取Excel
- 01-10Windows系统中C#读写ini配置文件的程序代码示例分享
- 01-10C#实现Excel动态生成PivotTable
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-11ajax实现页面的局部加载
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 04-02jquery与jsp,用jquery
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10SublimeText编译C开发环境设置
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10C#中split用法实例总结
- 01-10delphi制作wav文件的方法