使用Matlab读出混合文本颜色的Excel单元格

时间:2015-01-09 15:15:03

标签: excel matlab fonts activex

我很难通过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)仅返回NaNCharacters(2,1)以及Characters(1,2)超出矩阵维度。

如何对单元格的子字符串进行子索引工作? 谢谢。

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;