wanra 发表于 2009-6-15 16:04

xlswrite将matlab数据导出时excel文档为空

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

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

friendchj 发表于 2009-6-15 21:22

在2008a可以正确写入:
clc
clear
a=rand(7);
R=mat2cell(a,ones(1,7),ones(1,7));
=xlswrite('my.xls',R,'sheet1','A1');

ChaChing 发表于 2009-6-15 22:55

还点不确定的, 好像旧版不支援cell !?
建议楼主help下, 仔细确定!

wanra 发表于 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 编辑 ]

wanra 发表于 2009-6-16 19:08

哪位大侠帮帮忙啊?:'(

friendchj 发表于 2009-6-16 21:10

回复 地板 wanra 的帖子

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

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

friendchj 发表于 2009-6-16 21:29

回复 7楼 ChaChing 的帖子

嗯,需要使用循环把它赋给细胞元素为标量的cell矩阵,这样才可以正确保存
或者
把那些空矩阵赋给一个无关的数值,保存成excel之后,把那些数值替换成空即可

ChaChing 发表于 2009-6-16 22:00

回复 7楼 friendchj 的帖子

回覆後才知道6F已回覆! 感觉LZ回覆的比较好, 所以已自行删帖!
竟被LZ回覆, LZ动作真快!
说明下, 免得别人看帖感觉怪怪

wanra 发表于 2009-6-17 10:07

回复 6楼 friendchj 的帖子

感谢您的回复。由于我的元包数组比较大,所以如果用您贴出的方法相对麻烦。但我觉得您说的给空矩阵赋无关值的方法很好,因此就一试。但发现了错误。
=size(R);%元包数组的尺寸
=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}==[]
不知道是什么原因?请帮忙解答

friendchj 发表于 2009-6-17 10:23

把if R{m,n}==[]
改成
if isempty(R{m,n})
试试

wanra 发表于 2009-6-17 11:16

回复 10楼 friendchj 的帖子

已经试过改成if isempty(R{m,n}),运行成功,但是excel仍然是空的。为什么会这样?

friendchj 发表于 2009-6-17 11:19

help cell2mat
那样做的目的是置换后可以应用cell2mat函数

wanra 发表于 2009-6-17 11:29

终于成功了,虽然我还有很多地方不甚明白,但是能够成功太高兴了。谢谢大家的帮助,更谢谢 friendchj不厌其烦的解答。再次谢谢
页: [1]
查看完整版本: xlswrite将matlab数据导出时excel文档为空