Matlab的struct与excel互转

struct输出为excel

struct转为table

  • 生成名为frag1的table,此时属性名为Var1,Var2,…
frag1=table(fragment(1).id',fragment(1).phi',fragment(1).theta',fragment(1).velocity0',fragment(1).mass',fragment(1).k',fragment(1).x0',fragment(1).y0',fragment(1).z0',fragment(1).vx0',fragment(1).vy0',fragment(1).vz0',fragment(1).vector_x',fragment(1).vector_y',fragment(1).vector_z')

注意:转化为table时,table中的元素必须是列向量,如果A是1*N的行向量,记得A'将其转置为列向量。否则会报错“从单元格 'A1' 开始的数据块超出工作表边界 0 行和 12854 列。”

  • 属性名指定
frag1.Properties.VariableNames = {'破片编号','方位角','仰角','破片初速度','破片质量','速度衰减系数','破片初始位置坐标-x','破片初始位置坐标-y','破片初始位置坐标-z','破片相对初速度-x','破片相对初速度-y','破片相对初速度-z','破片射迹线方向向量-x','破片射迹线方向向量-y','破片射迹线方向向量-z'} 

注意:表头,注意要与table的变量数一致,不然会报错“对于表中的每个变量,VariableNames 属性必须包含一个名称。”

table输出为excel

  • 输出为EXCEL
writetable(frag1,'frag1.xlsx')

注意:要写入当前文件夹,请在 filename 中指定文件名。要写入不同于当前文件夹的文件夹,请在 filename 中指定完整或相对路径名称,如:'C:\myFolder\myTextFile.csv'。

  • 输出为EXCEL中的指定sheet
writetable(frag1,'F:\frag1_1.xlsx','sheet',1) //写到指定sheet

注意:'sheet',1——1为所指定sheet数

多个table输出为excel的多个sheet(struct数组每个struct转化为一个table)

  • struct数组有四个元素,转化为4个table,并转为EXCEL的四个 sheet
//4类破片存到四个sheet
for i=1:4
   fragm = table(fragment(i).id',fragment(i).phi',fragment(i).theta',fragment(i).velocity0',fragment(i).mass',fragment(i).k',fragment(i).x0',fragment(i).y0',fragment(i).z0',fragment(i).vx0',fragment(i).vy0',fragment(i).vz0',fragment(i).vector_x',fragment(i).vector_y',fragment(i).vector_z');
   fragm.Properties.VariableNames = {'破片编号','方位角','仰角','破片初速度','破片质量','速度衰减系数','破片初始位置坐标-x','破片初始位置坐标-y','破片初始位置坐标-z','破片相对初速度-x','破片相对初速度-y','破片相对初速度-z','破片射迹线方向向量-x','破片射迹线方向向量-y','破片射迹线方向向量-z'};  
   writetable(fragm,'F:\frag.xlsx','sheet',i)
end

注意:通过i与第几个元素关联就输出到哪个sheet,来输出到指定路径文件的指定sheet。

excel输入为struct

EXCEL读取不同sheet为不同table

  • 使用readtable读取excel的某个sheet为table
for i=1:4
   fragm = readtable('F:\frag_4.xlsx','sheet',i,'ReadVariableNames',false);
end

注意:因为属性名是中文,所以不能读取其作为变量名,使用'ReadVariableNames',false来读取,属性名为Var1,Var2,...

table每个属性列读取为1*N的行向量

  • 取table的某列
fragm.Var1

注意:取出的某列为N*1的列向量,如果要当数组处理要将其转化为行向量

  • 取table某列为行向量,赋值给struct对象的某个属性
fra(i).id = fragm.Var1';

注意:'sheet',1——1为所指定sheet数

excel的多个sheet转化为struct数组

  • 完整实例
for i=1:4
   fragm = readtable('F:\frag_4.xlsx','sheet',i,'ReadVariableNames',false);
   fra(i).id = fragm.Var1';
   fra(i).phi = fragm.Var2';
   fra(i).theta= fragm.Var3';
   fra(i).velocity0= fragm.Var4';
   fra(i).mass= fragm.Var5';
   fra(i).k= fragm.Var6';
   fra(i).x0= fragm.Var7';
   fra(i).y0= fragm.Var8';
   fra(i).z0= fragm.Var9';
   fra(i).vx0= fragm.Var10';
   fra(i).vy0= fragm.Var11';
   fra(i).vz0= fragm.Var12';
   fra(i).vector_x= fragm.Var13';
   fra(i).vector_y= fragm.Var14';
   fra(i).vector_z= fragm.Var15'; 
end

注意:综合前面的方法,即可得到此。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值