EXCEL中有一个有用的功能,叫做“分列”,顾名思义,EXCEL中将一串文本根据选择的分隔符对文本进行分解,从而产生几列数据。这个功能最常用的地方应该是导入一些文本形式的数据时,特别有用。比如导入CSV格式的数据。

举个简单的例子,假设有一行数据是这样的,LIPF6:13%:Salt

原来的数据表示 第1列为LIPF6,是物质名称,文本性质; 第2列为该物质的含量,用13%表示;第3列为该物质的归类,Salt类。

导入到EXCEL中时,如果不分列,这样的一个文本串不便于计算。因此,选中这(些)个单元格,再点击“数据”菜单下的分列,根据向导,选择冒号作为分隔符,就可以将它分为三列了。

EXCEL的这个操作,正是Range对象的一个方法TextToColumns完成的。我们来看一下录制宏时记录下的代码

Selection.TextToColumnsDestination:=Range("A1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _

Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:=":",_

FieldInfo:=Array(Array(1, 2), Array(2, 1),Array(3,2)), TrailingMinusNumbers:=True

Selection表示我们选中的单元格对象,类型即Range, Destination参数指定拆解后的数据左上角的位置,此处为A1格;DataType表明数据为分隔类型(xlDelimited), 还有一种是定宽类型(xlFixedWidth表示);TextQualifier 参数 指定文本边界的符号为双引号类型;ConsecutiveDelimiter参数指定是否把连续的多个某分隔符视为一个,此处为否(false); Tab参数说明是否选用制表符作为分隔符,如果是则此参数为True,不是则为False. 后面几个参数是同样的意思:Semicolon 即分号;Comma为逗号,Space为空格,这几个的用法都是一样的,它们作为分隔符,则该参数指定为True,否则为False.    因为我们的例子中用冒号作为分隔符,不在这几个之列,因此后面的Other参数设置为True,表示使用其它字符作为分隔符,同时我们必须指定紧接着的OtherChar 参数为冒号.

再后面这个FieldInfo参数比较难理解,我研究了好久才弄明白,多写一点。

它是一个数组的数组,用于指定分列之后的各列的内容类型。这个例 子里数组有三个元素,每个元素为一对值。拿第一个元素Array(1,2)来说吧,第一个参数1代表说明这是拆解后的第1列的内容。 第二个参数2代表该列(即第1列)的内容类型。这个2对应是什么类型呢? 见下面的定义:

public enum XlColumnDataType

{

xlGeneralFormat = 1, //通用类型

xlTextFormat = 2,   //文本

xlMDYFormat = 3, //月日年

xlDMYFormat = 4, //日月年

xlYMDFormat = 5, //年月日

xlMYDFormat = 6,

xlDYMFormat = 7,

xlYDMFormat = 8,

xlSkipColumn = 9, //忽略此列

xlEMDFormat = 10

}

原来2代表分列后的内容是文本(xlTextFormat = 2)。

类似的,第2个元素Array(2,1)代表分列后第2列为通用类型即xlGeneralFormat(xlGeneralFormat = 1).

上述3~8均为日期的不同格式,D为日,M为月,Y为年,按顺序排列就明白了。

这里面比较有意思的有几点:

1.列的内容类型如果没有指定,就按通用类型解析(类型1)。

2.列的顺序可以可以打乱。比如上面的写成FieldInfo:=Array( Array(2, 1),Array(3,2),Array(1, 2))也是可以的。

3.如果你不想解析出这一列的内容,指定其类型为9也就是xlSkipColumn就可以。这样看来,所谓的第几列是根据文本的内容来推算的,不是实际解析完成后的列数。

接下来后面还有几个参数:

DecimalSeparator 为字符串,表示小数点的分隔符,默认为系统设置,你也可以不设(缺着就行);ThousandsSeparator也是字符串,指定千分位分隔符,默认也是系统设置。TrailingMinusNumbers为逻辑值,True表示认可负号开始的数字,False表示不接受负号开始的数字。

在C#中这样写的。

private void button1_Click(object sender, EventArgs e)

{

Excel.Worksheet asht = Globals.ThisWorkbook.Application.ActiveSheet;

asht.get_Range("A1:A6").Select();

Excel.Range selection = Globals.ThisWorkbook.Application.Selection;

int[,] myField = { { 1, 2 }, { 2, 1 },{ 3, 2 } };

selection.TextToColumns(asht.get_Range("A1"),Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote, false, false, false, false, false, true,":",myField,".",",",true);

}

针对上面的例子,比如说字串 “LIPF6:13%:Salt", 使用上面的方法进行分列,得到的13%被视为通用类型(对应中间的那个{2,1}即第2列为类型1即通用类型,分列之后的15% EXCEL会视为数字。如果你将{2,1} 改成{2,2},即第2列当成类型2(文本),EXCEL就会显示 提示这是以文本形式存储的数字。见下图的对比。

最后是EXCEL的文件例子(需要运行宏的权限才能)分列示例.rar

转载本文请联系原作者获取授权,同时请注明本文来自丁祥欢科学网博客。

链接地址:http://blog.sciencenet.cn/blog-1213210-1089734.html

上一篇:一个实用的电解液配方解析及中控计算小工具

下一篇:低温下电解液的粘度

html分列代码,科学网—EXCEL 分列 (TextToColumns) 的C#代码 - 丁祥欢的博文相关推荐

  1. python成绩统计系统xlwings_科学网—利用Python扩展Excel能力的xlwings库使用体会 - 丁祥欢的博文...

    科学网的文章只能在48小时内修改,以后再有更新只能重新发贴,这个不太方便,会导致不少重复文章,顺便吐槽一下. 当前最新0.18版(希望阅读者有基础的VBA开发经验,否则可能有点困难) ★xlwings ...

  2. html哭脸字符,科学网—Unicode中的符号 - 丁祥欢的博文

    可是,这句话基本上是正确的,只要你提到的符号不是组合符号或者是你自己临时创造的符号,你都可以在以下文件中找到,这个文件是就是Unicode 13.0的字符集. 提取码: vis3 当然,你也可以在线查 ...

  3. 计算机千分之一符号,科学网—万分之一符号, 千分之一符号 和PPM符号 - 丁祥欢的博文...

    前面博文中有一个很少用的符号,万分之一符(‱),接触基点这个概念之前, 我从来没有见过,更没用过. 既然网页上都能显示出来, 我想它肯定在Unicode编码体系中有自己的编码. 为了查证一下,做了点测 ...

  4. mysql记录和字段_科学网—MySQL学习笔记:计算同一条记录内各字段之和,并判断是否归一 - 丁祥欢的博文...

    ★计算同一记录中不同字段之和 背景说明:MainDB表内有几十个字段用于存放配方数据,需要将它们加起来看看是否归一. 由于MySQL没有类似高版本Access那样的计算字段,因为需要用SQL语法来处理 ...

  5. 代码发芽网:无需插件支持Blog代码高亮,支持近百种编程语言

        写博客时,没有代码高亮?     发邮件时,代码格式很乱?     有好代码,保存后很难找? 代码发芽网:     无需插件支持Blog代码高亮     支持近百种编程语言     多种配色主 ...

  6. matlab获取地图边界,科学网—提取百度地图县域的矢量边界 - 张乐乐的博文

    (1) 将以下代码存储为txt文件,后缀名改为html 获取地区轮廓线 var map = new BMap.Map("container"); map.centerAndZoom ...

  7. python中几种读取文件的方法_科学网—python中几类文件的读写 - 郗强的博文

    所使用python模块为json.csv等. 一.json文件读写 1.JSON简介:其全名为JavaScript Object Notation是一种轻量级的数据交换格式.Json最广泛的应用是作为 ...

  8. 荧光平均值计算matlab,科学网—使用Image J进行自动荧光定量分析 - 陆绮的博文...

    在这里我整理我最近使用ImageJ软件自动数细胞以及定量分析荧光强度的步骤. ImageJ的主面板: 打开文件 File → Open →'.zvi' 先把2D的所有图叠加起来,选项选max inte ...

  9. bam文件读取_科学网—Pacbio Sequel两种bam文件解析 - 卢锐的博文

    pacbio目前有两种主流的测序平台,RSII和Sequel,后者是前者的升级版. pacbio sequel下机是bam格式的reads文件,它和reads比对到参考基因组上生成的bam文件,内容有 ...

最新文章

  1. java dao层_JavaWeb Dao层架构设计
  2. Asp.net2.0实现Word转换Html,同时分享系列笑话
  3. Java Servlet的前100个问题
  4. Pi network到底怎么样?我们来深入剖析一下
  5. 能用机器完成的,千万别堆工作量|持续集成中的性能自动化测试
  6. Unknown system variable 'query_cache_size'
  7. LeetCode-三数之和
  8. java collection 遍历_Java for循环对集合的遍历
  9. spark 读取elasticsearch数据
  10. SQLServer数据库中截取字符串的常用方法
  11. 互联网做手机 伤国际品牌 救国内品牌
  12. 编译OpenWRT LEDE 固件的一些说明
  13. Gradle从入门到实战 - Groovy基础(by任玉刚)读后笔记
  14. 加载类型库/DLL 时出错。 (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)
  15. 无线宽带接入802.16技术简介(转)
  16. wow服务器维护通告,新一轮大服务器实装公告:4月2日凌晨维护
  17. matlab from workplace,关于使用From workspace的问题
  18. 48个值得推荐的免费英文有声读物网站
  19. 脉冲神经网络学习笔记(综述)
  20. php study计算闰年,IOS_IOS获取指定年月的当月天数,前言 在开发IOS中常常需要用 - phpStudy...

热门文章

  1. EXCEL如何固定住一行和一列
  2. RN常用UI组件技术选型
  3. cad版本怎么在线转换?软件操作更高效
  4. Python基础教程目录
  5. 拼多多,京东,1688一键铺货到淘宝
  6. 海行Newlifest M1骨传导耳机开箱,这音质真的碉堡了
  7. 热修复原理学习(1)热修复技术介绍
  8. 修改jar 注入_ORA00600[16703]安装介质注入型勒索病毒恢复案例
  9. 平面设计简化布局的要点是什么
  10. excel 获取股票价格_股票价格的Excel点图