很少见我写程序设计方面的经验吧?
今天在老师的指点下研究一个网页的小功能,目标是把Excel单元格复制粘贴到网页上的<textarea>(多行文本框)中,提交到后台,并在后台分析字符串,得到数据集。——我是用ASP.NET开发,因此就可以生成System.Data.DataSet,然后指定其为某个GridView的DataSource,以便DataBind呈现;或是把数据集提交到后台数据库,等等……
其中要点就在于分析从Excel表复制粘贴到<textarea>中的字符串,对其进行分析。
其实还是比较简单的,用16进制编辑器打开可以发现Excel表内容复制过来后,单元格之间是用ASCII码09号字符分割的,而每一行之间则是用ASCII码0D和ASCII码0A来分割的。
因此对于这样两格单元格,其16进制代码为:61 09 31 0D 0A 。
这个则是:61 09 31 0D 0A 62 09 32 0D 0A 。
下划线就是单元格结束符或列结束符。
好,到这里都没问题。
问题发生在:当一个单元格里存在换行的内容,此时拷贝到<textarea>中的单元格内换行也会变成OD OA ,因此此时无法判断究竟是单元格内的换行还是列的换行。在Windows记事本同样是如此,但在UltraEdit中则是将单元格内的换行变为0A。
想出一个解决方法:若是知道列数为n且n≠1,则可以通过断言在0D 0A与之前最近的一个0D 0A间存在n-1个09(也就是列换行之前存在n-1个单元格分割),断定此处0D 0A是列的换行。
经楼下回复提醒,发现上面的解决方法是错的。