声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2504|回复: 12

[综合讨论] xlswrite将matlab数据导出时excel文档为空

[复制链接]
发表于 2009-6-15 16:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我想将matlab算出的元包数据R导出到excel里,可是用xlswrite命令时,导出是成功的,但excel里是空的,没有任何数据,请大侠们帮帮忙。我的语句是
[SUCCESS,MESSAGE]=xlswrite('D:\MATLAB704\work\CA0011ASdatacollection.xls',R,'sheet1','A1');
R是7×7的元包数据,所有均为数字,没有字符,空格或运算式等等。
但如果将R中任意一个矩阵取出,却可以正确导出。如:
[SUCCESS,MESSAGE]=xlswrite('D:\MATLAB704\work\CA0011ASdatacollection.xls',R{1,1},'sheet1','A1');
请问到底什么原因啊?

[ 本帖最后由 wanra 于 2009-6-15 17:46 编辑 ]

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2009-6-15 21:22 | 显示全部楼层
在2008a可以正确写入:
clc
clear
a=rand(7);
R=mat2cell(a,ones(1,7),ones(1,7));
[SUCCESS,MESSAGE]=xlswrite('my.xls',R,'sheet1','A1');
发表于 2009-6-15 22:55 | 显示全部楼层
还点不确定的, 好像旧版不支援cell !?
建议楼主help下, 仔细确定!
 楼主| 发表于 2009-6-16 10:47 | 显示全部楼层

回复 沙发 friendchj 的帖子

我试过您的例子,是可以的。但是我的程序依然不行。我的R的结构是
<160x1 double>  <160x1 double>  <160x1 double>  <160x1 double>  <160x1 double> <160x1 double> <160x1 double>
<160x1 double>  <160x1 double>  <160x1 double>  <160x1 double>  <160x1 double> <160x1 double>   [ ]
<160x1 double>  <160x1 double>  <160x1 double>  <160x1 double>   <160x1 double>        [ ]        [ ]
<160x1 double>  <160x1 double>  <160x1 double>  <160x1 double>        [ ]        [ ]        [ ]
<160x1 double>  <160x1 double>  <160x1 double>        [ ]        [ ]        [ ]        [ ]
<160x1 double>   <160x1 double>        [ ]        [ ]        [ ]        [ ]        [ ]
<160x1 double>        [ ]        [ ]        [ ]        [ ]        [ ]        [ ]
导出后,SUCCESS的值是true,但是excel文件里依然是空的。为什么啊?
请问对文件的路径有要求吗?还有我的版本是支持cell的

[ 本帖最后由 wanra 于 2009-6-16 10:49 编辑 ]
 楼主| 发表于 2009-6-16 19:08 | 显示全部楼层
哪位大侠帮帮忙啊?:'(
发表于 2009-6-16 21:10 | 显示全部楼层

回复 地板 wanra 的帖子

这时的确是空的,看来写入时,不支持细胞元素是矩阵的情况,可设法使细胞元素矩阵转化为一个个元素。例如:
clc
clear
R1=cell(2);
R1{1,1}=[1;1];
R1{1,2}=[2;2];
R1{2,1}=[3;3];
R(1:2,:)=mat2cell([R1{1,:}],[1 1],[1 1]);
R(3:4,1)=mat2cell([R1{2,:}],[1 1],1);
[SUCCESS,MESSAGE]=xlswrite('my.xls',R,'sheet1','A1');

[ 本帖最后由 friendchj 于 2009-6-16 21:25 编辑 ]

评分

1

查看全部评分

发表于 2009-6-16 21:29 | 显示全部楼层

回复 7楼 ChaChing 的帖子

嗯,需要使用循环把它赋给细胞元素为标量的cell矩阵,这样才可以正确保存
或者
把那些空矩阵赋给一个无关的数值,保存成excel之后,把那些数值替换成空即可
发表于 2009-6-16 22:00 | 显示全部楼层

回复 7楼 friendchj 的帖子

回覆後才知道6F已回覆! 感觉LZ回覆的比较好, 所以已自行删帖!
竟被LZ回覆, LZ动作真快!
说明下, 免得别人看帖感觉怪怪
 楼主| 发表于 2009-6-17 10:07 | 显示全部楼层

回复 6楼 friendchj 的帖子

感谢您的回复。由于我的元包数组比较大,所以如果用您贴出的方法相对麻烦。但我觉得您说的给空矩阵赋无关值的方法很好,因此就一试。但发现了错误。
[rowR,colR]=size(R);%元包数组的尺寸
[matrow,matcol]=size(R{1,1});%元包数组中每一个矩阵的尺寸
for m=1:rowR
    for n=1:colR   
                if R{m,n}==[]
                    R{m,n}=ones(matrow,matcol);
                end
    end
end
运行后报错:
??? Error using ==> eq
Matrix dimensions must agree.

Error in ==> Untitled at 106
                if R{m,n}==[]
不知道是什么原因?请帮忙解答
发表于 2009-6-17 10:23 | 显示全部楼层
把if R{m,n}==[]
改成
if isempty(R{m,n})
试试

评分

1

查看全部评分

 楼主| 发表于 2009-6-17 11:16 | 显示全部楼层

回复 10楼 friendchj 的帖子

已经试过改成if isempty(R{m,n}),运行成功,但是excel仍然是空的。为什么会这样?
发表于 2009-6-17 11:19 | 显示全部楼层
help cell2mat
那样做的目的是置换后可以应用cell2mat函数
 楼主| 发表于 2009-6-17 11:29 | 显示全部楼层
终于成功了,虽然我还有很多地方不甚明白,但是能够成功太高兴了。谢谢大家的帮助,更谢谢 friendchj不厌其烦的解答。再次谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-15 22:57 , Processed in 0.068217 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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