最近, 我在用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[] { , , ,  };
cur_sht.Range["a1:d1"].Value = arr1;

如果要向列向区域的单元格写入东西,可以用二维数组,比如:

int[,] arr2 = new int[, ] { { , },{ , },{ , },{ , } };
//int[,] arr2 = new int[4, 1] { {4},{3},{2},{1} };这个也可以
cur_sht.Range["a1:a4"].Value = arr2;

如果要向矩形区域的单元格写入东西,更要用二维数组,比如:

int[,] arr3 = new int[, ] { { , }, { , }, { , }, { , } };
cur_sht.Range["a1:b4"].Value = arr3;

如果要从单元格区域读出内容,放进数组中,不管一二维,都可以这么写:

object[,] arr4 = (object[,])cur_sht.Range["a1:b4"].Value2;
MessageBox.Show(arr4.GetValue(,).ToString());//这里输出的是A1单元格,index从1开始

好了,拿去用吧,不谢^ ^

C#读写EXCEL单元格的问题的更多相关文章

  1. 转:Java修改Excel单元格的数据及格式

    https://blog.csdn.net/aking21alinjuju/article/details/6001153?locationNum=2 继前两节的Java读取.写入Excel后,本期将 ...

  2. 转载 NPOI Excel 单元格背景颜色对照表

    NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...

  3. C# ASP.NET 读取EXCEL 单元格 读取 空值 不显示

    跟大家分享一下,[摘自]:http://blog.csdn.net/li185416672/article/details/8213729 读取excel时,某些单元格为空值 原来如此: 当我们用ol ...

  4. NPOI Excel 单元格背景颜色对照表

    NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...

  5. Excel 单元格自定义格式技巧总结

    第一部分 Excel 中的单元格格式是一个最基本但是又很高级的技能,说它基本是因为我们几乎天天都会用到它,会用它来设置一些简单的格式,比如日期,文本等等:高级是因为利用 Excel 单元格的自定义格式 ...

  6. <转载>NPOI Excel 单元格背景颜色对照表

    我转载地址:http://www.holdcode.com/web/details/117 NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 ...

  7. C# 对Excel 单元格格式, 及行高、 列宽、 单元格边框线、 冻结设置

    一.对行高,列宽.单元格边框等的设置 这篇简短的文字对单元格的操作总结的比较全面,特此转载过来. private _Workbook _workBook = null; private Workshe ...

  8. Excel单元格内容太多会覆盖遮住下一单元格范围

    Excel单元格内容太多会覆盖遮住下一单元格范围分步阅读 Excel中的单元格内容,有着不同的对齐方式.用户可根据自己的需求,在处理数据的时候,自行设置所需要的对齐方式. 当您在处理数据的时候,如果设 ...

  9. excel单元格中批量加入固定字符

    excel单元格前怎么批量加字母 现在我要在联系人这列,每个姓名前加入衡阳的首字母简写(HY). 3 在同行上面随便找列,我找D列.输入公式:="HY"&A2. 5 输入后 ...

随机推荐

  1. Django模型层之字段查询参数及聚合函数

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 字段查询是指如何指定SQL WHERE子句的 ...

  2. CSS学习笔记五:display,position区别

    最近常用css,经常在位置方面使用导display与position这两个属性,所以想要弄清楚它们之间的意思. 一.display 作用是规定元素应该生成的框的类型.意思是定义建立布局时元素生成的显示 ...

  3. 通过jdbc完成单表的curd操作以及对JDBCUtils的封装

    概述:jdbc是oracle公司制定的一套规范(一套接口),驱动是jdbc的实现类,由数据库厂商提供.所以我们可以通过一套规范实现对不同的数据库操作(多态) jdbc的作用:连接数据库,发送sql语句 ...

  4. xml、网络编程、 反射

    XML 常用于配置文件.传输数据. <?xml version="1.0" encoding="UTF-8"?><persons> &l ...

  5. mondrian 4.7 源码部署

    mondrian是一个开源的数据分析工程, 网上有关mondrian3.X的源码部署比较多, 有关4.X的部署较少. 目前官方推荐使用的时mondrian3.7的修订版, 可以再github上下载到最 ...

  6. PAT1032: Sharing (25)

    1032. Sharing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To store Engl ...

  7. EXCEL解析之终极方法WorkbookFactory

    Selenium做自动化测试当然不能避免和Excel打交道. 由于Excel版本的关系,文件扩展名分xls和xlsx, 以往的经验都是使用HSSFWorkbook和XSSFWorkbook来分别处理. ...

  8. (七)SpringBoot2.0基础篇- application.properties属性文件的解析及获取

    默认访问的属性文件为application.properties文件,可在启动项目参数中指定spring.config.location的参数: java -jar myproject.jar --s ...

  9. node.js面向对象实现(二)继承

    http://blog.sina.com.cn/s/blog_b5a53f2e0101nrdi.html 继承是面向对象中非常重要的一个概念,那么在Node.js中如何实现继承呢? node.js在u ...

  10. Ubuntu 16.04 为 root 帐号开启 SSH 登录

    1.先用普通账号登录 2.安装 open ssh: sudo apt-get install openssh-server 3.修改密码: sudo passwd root 4.切换到root账户 s ...