酋长 发表于 2008-4-7 09:14:12

关于写入电子表格文件

将采集到的数据记录在Excel表格时,如何控制数据适当地换行或者换列?
现在遇到的情况是:在记录数据时,如果有1000个数据,则生成的Excel表格就有1000行。我想要每一行的开头先记录一个系统时间,每10个数据作为一组在一行,接下来10组另起一行记录,以此类推。
请版主高手指教,谢谢。:)

不好意思,在新手区发帖没反应,所以在这里再发一次。

飞雨天 发表于 2008-4-7 10:17:43

Excel支持的电子表格有很多形式,如果你是用file io下面的那个write to spreedsheet file来做的话,那么,它所指的spreedsheet file其实应该是一个以特定分隔符分隔的txt文件,是纯粹的ascii文件,而不是我们传统想象中的excel文件。也就是说,在这个时候,你不能在硬盘上用右键建立一个xls文件,然后用这个vi写入。因为你右键建立的文件是微软自己定义的一种格式文件,不是纯粹的ascii文件。。。
上述表述感觉有点烦,其实你可以按如下去做个试验:
右键建立一个xls文件,然后往里面输入点内容,随便什么,然后你用16进制编辑软件,如UltraEdit将它打开,你应该没办法找到你输入的内容,因为它淹没在很多信息当中了。。。。
xls文件内容:

xls文件UE截图:

而同样,如果你建立一个txt文件,输入内容,用UltraEdit打开,你很容易就看到你的输入,它原模原样在那里,请看下图:
txt(tab分隔)内容:

txt文件UE截图:

为什么要说tab分隔的txt文件呢?因为它是被excel支持的,你可以用excel将它打开,在txt文件上右键,选择打开方式,找到excel,确定打开,可以看到下图,注意,它是txt被excel打开之后的显示:
txt文件用excel打开:

可以看到,它在显示方式上和在硬盘右键建立起的xls文件没什么区别,但它本质上是不一样的,这点可以从两个文件的UE截图看出。

在labview中,比较好的方法,就是指定文件全路径,注意文件后缀为xls,然后用new file来创建这个文件,然后用write tospreedsheet file/read from spreed file来进行读写,这样做的目的是避开微软的xls格式。

另外,你也可以看到比如说write to spreedsheet file数据输入有2D和1D两种选择,它们都是double类型的,无法完成你的任务(写日期和数据),这就需要用比较底层的vi,比如我附件里的write spreedsheet string,日期和数据都转化为string,这样就可以统一写入了。肯定还有更好的方法,比如调用office包,或者用activex调用office的公共接口(这两者本质一样),那样要说的就多了,而且我也不是很会:L 。

[ 本帖最后由 飞雨天 于 2008-4-7 10:35 编辑 ]

wdyjz 发表于 2008-4-7 13:01:05

在labview中,比较好的方法,就是指定文件全路径,注意文件后缀为xls,然后用new file来创建这个文件,然后用write tospreedsheet file/read from spreed file来进行读写,这样做的目的是避开微软的xls格式。

赞成这样实现,最好用底层的文件操作VI去实现,底层的可以支持任何类型的数据,比如:字符串、字符串数组、簇、数字、数组等;这样我们可以把1D的字符串数组用for loop操作即可,按照你的意思,也就是for 的count=11(每一行的开头先记录一个系统时间,每10个数据作为一组在一行),每次for后,添加一个回车键标识字符即可。

酋长 发表于 2008-4-8 12:23:02

我也是用write tospreedsheet file 来写的
但是还是只有一行。
谢谢飞雨天的详细解释,但是你提供的程序最后的记录结果也只有一行。
wdyjz的for loop循环我还是不太理解......:'(

飞雨天 发表于 2008-4-8 12:34:16

sorry,我改来改去,忘了哪个版本的,结果给你一个还没改好的。。。
你在那个写文件的vi左端append to file设置下,见附图:

酋长 发表于 2008-4-8 13:21:07

回复 5# 的帖子

嗯,非常感谢!!
如果不嫌麻烦的话,可否再解释一下for loop循环计数的设定?

飞雨天 发表于 2008-4-8 13:23:34

如果用for的话,那是不用进行循环次数设定的,在你这个场合,只要把11元素的string数组连接到for循环进行自动索引就可以了

酋长 发表于 2008-4-8 13:24:49

就是这块

没看懂.......

飞雨天 发表于 2008-4-8 14:25:35

还是sorry。。。。。
那个下面的大于等于1判断给去了,直接把为零判断输入给case就可以了。取余为零,说明是10的整数倍:10、20、30、。。。。。
按你的要求:10个数据一行
至于i自加1,这样做是为了好处理,难道不是吗?呵呵

酋长 发表于 2008-4-8 16:47:09

原来case可以这样控制的啊....
这样控制会丢数据吗?我对移位寄存器的用法傻傻分不清........
长见识了,谢谢~~

zksd1315 发表于 2008-4-9 15:10:28

Labview有一个Report Generation的工具包,有专门读写Excel的VI,很方便。

小歪歪111 发表于 2008-7-11 22:11:53

二楼说的好详细,谢谢了

需要学习 发表于 2008-7-26 19:13:24

哈哈 正好要做这样的东东直接DOWN来用了
谢谢 飞雨天版主allqq-mogudiandian-34all

lizi 发表于 2010-5-6 18:49:55

dddddddddddddd
页: [1]
查看完整版本: 关于写入电子表格文件