cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 5240|回复: 13

关于写入电子表格文件

[复制链接]
发表于 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 to  spreedsheet file/read from spreed file来进行读写,这样做的目的是避开微软的xls格式。

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-4-7 13:01:05 | 显示全部楼层
在labview中,比较好的方法,就是指定文件全路径,注意文件后缀为xls,然后用new file来创建这个文件,然后用write to  spreedsheet file/read from spreed file来进行读写,这样做的目的是避开微软的xls格式。

赞成这样实现,最好用底层的文件操作VI去实现,底层的可以支持任何类型的数据,比如:字符串、字符串数组、簇、数字、数组等;这样我们可以把1D的字符串数组用for loop操作即可,按照你的意思,也就是for 的count=11(每一行的开头先记录一个系统时间,每10个数据作为一组在一行),每次for后,添加一个回车键标识字符即可。
 楼主| 发表于 2008-4-8 12:23:02 | 显示全部楼层
我也是用write to  spreedsheet file 来写的
但是还是只有一行。
谢谢飞雨天的详细解释,但是你提供的程序最后的记录结果也只有一行。
wdyjz的for loop循环我还是不太理解......
发表于 2008-4-8 12:34:16 | 显示全部楼层
sorry,我改来改去,忘了哪个版本的,结果给你一个还没改好的。。。
你在那个写文件的vi左端append to file设置下,见附图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 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 | 显示全部楼层
就是这块

没看懂.......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-4-8 14:25:35 | 显示全部楼层
还是sorry。。。。。
那个下面的大于等于1判断给去了,直接把为零判断输入给case就可以了。取余为零,说明是10的整数倍:10、20、30、。。。。。
按你的要求:10个数据一行
至于i自加1,这样做是为了好处理,难道不是吗?呵呵
 楼主| 发表于 2008-4-8 16:47:09 | 显示全部楼层
原来case可以这样控制的啊....
这样控制会丢数据吗?我对移位寄存器的用法傻傻分不清........
长见识了,谢谢~~
发表于 2008-4-9 15:10:28 | 显示全部楼层
Labview有一个Report Generation的工具包,有专门读写Excel的VI,很方便。
发表于 2008-7-11 22:11:53 | 显示全部楼层
发表于 2008-7-26 19:13:24 | 显示全部楼层
哈哈 正好要做这样的东东  直接DOWN来用了
谢谢 飞雨天版主
发表于 2010-5-6 18:49:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-5-4 19:21 , Processed in 0.879164 second(s), 9 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表