首页/文章/ 详情

Matlab导入Excel数据技巧

2年前浏览7171

本文摘要(由AI生成):

本文首先介绍了使用Matlab向Excel写入数据的基本方法,然后通过实例展示了如何调整题头显示和合并单元格。针对写入多列数据时的问题,文章提出了一种有效的解决方案,即通过创建一个大矩阵,并指定写入数据的起始列,从而实现了多列数据的完美衔接。此外,文章还提到了如何存储和写入包含特殊符号的题头数据。最后,作者分享了在实际应用中不断学习和探索Matlab深层次知识的经历,鼓励读者在应用中发现问题并寻找解决办法。


Matlab导入Excel数据技巧

过冷水近期在工作需要将Matlab计算结果自动输入到Excel中,已知导入函数语句为:

xlswrite(filename,A,sheet,xlRange) %将数据写入指定的工作表和范围。

实际操作中遇到了以下两个问题。

image.png 

1表格中的每列数据不是一次计算出来的,每做一次计算按照排序往下一列写入数据,一次只写入一列数据,通常程序写入Y列数据对应程序为:

xlswrite(filename,A,sheet,Y3:Y18) %将数据写入指定的工作表和范围。

再写入一次则是:

xlswrite(filename,A,sheet,Z3:Z18)

每次写入的时候需要更改数据范围语句进行更改,这就相当于一个半自动化程序,在应用中过冷水就觉得好烦,能不能实现每次运行自动将写入范围改到下一列。

已知A~Z明显字母序列,可 Matlab无法识别字母序,它不知道A后面应该是B,B后面是C,只能识别1、2、3、4、5

1 Excel中表头有各种字符,实际也是需要Matlab进行写入的,总不能只用Matlab写入数据,然后再自己打开 Excel进行表头添加吧!也太不智能化了。可是怎么实现Matlab往Excel中写入字符串?甚至大多数人都不会在Matlab中输入特殊字符(希腊字符):ε本期过冷说详细告诉大家如何解决上述两个问题,更智能化写入数据。

过冷水在推文matlab不同类型数据互换实例有和大家分享不同数据类型之间互换关系

image.png 

    图中详细给出了各种数据类型之间的相互转换关系,其中需要注意字符串表达式ASCII码,我们的问题就需要其解决

ASCII在计算机中,所有的数据在存储和运算时都要使用二进制数表示像a、b、c、d这样的52个字母以及0、1等数字还有一些常用的符号美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示 

通俗一点讲,ASCII码实现了数值和字符之间联系,我们熟悉的是十进制,已知:二进制十进制;二进制字符串,自然:二进制字符串,过冷水整理出大家比较常用到的字符和数值之间的对应关系表,方便大家查找翻阅。

十进制

字符

十进制

字符

十进制

字符

十进制

字符

十进制

字符

50

 '0'

67

 'A'

99

a'

947

α'

40

&

51

 '1'

68

 'B'

100

b'

948

β'

39

%

52

 '2'

69

 'C'

101

c'

949

γ'

38

$'

53

 '3'

70

 'D'

102

d'

950

δ'

35

!'

54

 '4'

71

 'E'

103

e'

951

ε'

165

£'

55

 '5'

72

 'F'

104

f'

952

ζ'

183

µ'

56

 '6'

73

 'G'

105

g'

953

η'

402

Ɛ'

57

 '7'

74

 'H'

106

h'

954

θ'

403

Ƒ'

58

 '8'

75

 'I'

107

i'

955

ι'

404

ƒ'

59

 '9'

76

 'J'

108

j'

956

κ'

408

Ɩ'

42

('

77

 'K'

109

k'

957

λ'

416

ƞ'

43

)'

78

 'L'

110

l'

958

μ'

427

Ʃ'

44

*'

79

 'M'

111

m'

959

ν'

435

Ʊ'

45

'

80

 'N'

112

n'

960

ξ'

634

ɸ'

49

/'

81

 'O'

113

o'

961

ο'

933

Σ'

63

='

82

 'P'

114

p'

962

π'

934

Τ'

93

['

83

 'Q'

115

q'

963

ρ'

935

Υ'

94

\'

84

 'R'

116

r'

964

ς'

936

Φ'

95

]'

85

 'S'

117

s'

965

σ'

937

Χ'

96

^'

86

 'T'

118

t'

966

τ'

938

Ψ'

125

{'

87

 'U'

119

u'

967

υ'

939

Ω'

126

|'

88

 'V'

120

v'

968

φ'



127

}'

89

 'W'

121

w'

969

χ'



128

~'

90

 'X'

122

x'

970

ψ'



179

±'

91

 'Y'

123

y'

971

ω'





92

 'Z'

124

z'





利用该表结合数据类型转化函数

double('A')
char(67)
ans =
    65
ans =
    'C'

这样就可以实现表格写入范围自动变化了

n=n 1
[char(n),'4',':',char(n),'19']
n =
    66
ans =
    'B4:B19'

    完美!同时表格也给出了特殊字符对应的转换数值,所以需要在Matlab中打入某个特殊字符的时候就可以使用char(r)这个方法在Matlab绘图时候以及赋予变量的时候特别有用。

    甚至可以用使用该转化关系输入函数比如“过冷水”数对应的数值为:

double('过冷水')
ans =
       36807       20919       27700
char([ 36807,20919,27700])
ans =
    '过冷水'

    过冷水实例给大家演示下表中的数据该如何导入。为了方便在这里我所有数据放在一个矩阵中,通过写循环模拟不同运算数据依次写入的过程

image.png

A=[8.24     8.24    8.24    8.24    8.24    8.24 
5.29    5.29    5.29    5.29    5.29    5.29 
2.27    2.27    2.27    2.27    2.27    2.27 
4.32    4.32    4.32    4.32    4.32    4.32 
893.12  893.12  893.12  893.12  893.12  893.12 
245.52  245.52  245.52  245.52  245.52  245.52 
245.52  245.52  245.52  245.52  245.52  245.52 
200.63  200.63  200.63  200.63  200.63  200.63 
0.27    0.27    0.27    0.27    0.27    0.27 
1.22    1.22    1.22    1.22    1.22    1.22 
4.45    4.45    4.45    4.45    4.45    4.45 
1.41    1.41    1.41    1.41    1.41    1.41 
1.41    1.41    1.41    1.41    1.41    1.41 
3.57    3.57    3.57    3.57    3.57    3.57 
-3.04   -3.04   -3.04   -3.04   -3.04   -3.04 
-2.15   -2.15   -2.15   -2.15   -2.15   -2.15 
];
for i=1:6
    xlswrite('导入数据.xls',A(:,i),'Sheet1',[char(68 i),'3',':',char(68 i),'18']) ;
end
str={'A11';'A12';'A21';'A22';'B11';'B12';'B21';'B22';'B12/B11';'B21/B22';[char(949),'11'];[char(949),'12'];[char(949),'21'];[char(949),'22'];[char(949),'12','-',char(949),'11'];[char(949),'21','-',char(949),'22']};
xlswrite('导入数据.xls',str,'Sheet1','D3:D18') ;
B=double('Matlab导入Excel数据技巧');%反向生成数据
str1={char(B)};
xlswrite('导入数据.xls',str1,'Sheet1','D2:G2') ;

image.png 

    基本完美!可是题头稍微有点问题,本意是D2:J2只显示一个题头,可是现在是每个表格同输入了一次,可以理解为,没有做合并,所以如果能够用Matlab控制单元格合并就完美了,过冷水,通过查找,用Matlab控制Excel合并单元格的方法程序为:

a= actxserver('Excel.Application');                                 
b = a.Workbooks.Open('C:\Users\wayne\Desktop\导入数据.xls');      
b.Worksheets.Item(1).Name = 'Sheet1';                                                                                                                       
b.Worksheets.Item(1).Range('D2:J2').MergeCells=1;                                        
b.Save                                                              
b.Close(false)
a.Quit


image.png 

完美的实现了我们的需求。解决了一个问题现在解决另外一个问在写入数据的时候如何实现Z列和AA,AZ,BA列完美衔接?过冷水想到了这么一个办法将我们要写入的数据当做一个大矩阵,写入数据列数>26,但是我们只指定写入数据开头,意思就是只指定矩阵中第一列应该写入表格中的第几行,然后依次填入即可

A=rand(5,40)
xlswrite('导入数据.xls',A,'Sheet1','N3')

image.png 

    如图所示这样就实现了多列数据写入的问题,真对过冷水的问题,过冷水可以先将计算结果储存成矩阵,最后一次将数据写入Excel中即可。

    在日常中过冷水也是一遍应用Matlab一遍学习更深层的知识,本期给大家分享的技巧也是过冷水是实际应用中发现写入数据存在问题,不能很好衔接,以及题头的特殊符号有没有办法也写入,然后就查找资料,看有什么解决的办法。本期过冷水要和大家分享的Matlab方面知识就这么多,希望大家喜欢。

 


MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-12-12
最近编辑:2年前
过冷水
博士 | 讲师 讨论号:927550334
获赞 361粉丝 184文章 107课程 11
点赞
收藏
作者推荐

¥5 5.0
未登录
1条评论
谢伟云
签名征集中
2年前
其实还是没有解决Z到AA的循环切换问题……
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈