我很难通过Matlab使用Matlab读出包含混合颜色文本的Excel单元格的字体信息。
以excel文件为例,其中包含字符串" GreenBlueRedBlack
"在单元格A1
中,字符串的各个部分为所述颜色。
MyExcel = actxserver('Excel.Application');
Workbook = MyExcel.Workbooks.Open('D:\data\Test.xlsx');
MySheet = MyExcel.ActiveWorkBook.Sheets.Item(1);
Text=get(MySheet.Range('A1').Characters,'Text');
Color=MySheet.Range('A1').Characters.Font.Color; % provides NaN
for m=1:size(Text,2) % read out letters seperately
Color(m)=MySheet.Range('A1').Characters(m,1).Font.Color;
end
当索引到整个单元格时,代码当然会提供NaN
。
我无法找到正确的子索引和遍历单元格中每个字母的方法。
如果我理解正确Characters(x,y)
应该被提供单元的有用子部分的起点和长度。但Characters(1,1)
仅返回NaN
和Characters(2,1)
以及Characters(1,2)
超出矩阵维度。
如何对单元格的子字符串进行子索引工作? 谢谢。
答案 0 :(得分:0)
我找到了一个解决方法,也许有人可以从中受益。 将以下代码添加到Excel文件的Module1中。
Public Function getCellInfo(Row As Variant, Col As Variant, Sheet As Variant)
ActiveWorkbook.Sheets(Sheet).Activate
Text = Cells(Col)(Row).Text
TextLength = Len(Cells(Col)(Row))
Dim Color() As Variant
ReDim Color(TextLength)
For m = 0 To TextLength - 1
Color(m) = Cells(Col)(Row).Characters(m + 1, 1).Font.Color
Next
getCellInfo = Color
End Function
然后使用:
从Matlab调用宏ColorVector=MyExcel.Run('getCellInfo',Sheet,Row,Col);
虽然不是很漂亮。如果有人知道一种更优雅的方式,而不需要调用一个非常棒的excel宏。
答案 1 :(得分:0)
可能为时已晚,但这是解决方案:
color = MySheet.Range('A1').get('Characters', start, length).Font.Color;