#excel #matlab #activex
#excel #matlab #activex
Вопрос:
Я хочу записать результаты анализа данных с помощью MATLAB в электронную таблицу Excel. Чтобы сделать его более удобным и приятным, я также попытался отформатировать содержимое.
Поскольку форматирование каждой отдельной ячейки или диапазона происходит очень медленно, я попытался отформатировать несколько диапазонов, но мне не удалось запустить его.
Я записал макрос непосредственно в Excel, который в принципе показывает, что я хотел сделать:
Range("B355:AG359,B365:AG369").Select
Range("B365").Activate
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With
Теперь я попытался перевести его в свой код MATLAB…
xls = actxserver('Excel.Application');
xlsDatei = xls.Workbooks.Open(xlsFileName);
myBook = xlsDatei.Sheets.Item(p);
myBook.Activate;
myRange = myBook.Range('B355:AG359,B365:AG369');
...
И в этом суть — я всегда получаю следующую ошибку MATLAB:
Ошибка при использовании интерфейса.000208D8_0000_0000_C000_000000000046/ Ошибка диапазона: объект вернул код ошибки: 0x800A03EC
Возможно, кто-то делал это раньше и может мне помочь.
Комментарии:
1. Не уверен в Matlab, но в Excel VBA вы должны
Set myRange = myBook.Range(...)
. Есть ли эквивалент, возможно, в Matlab? Кроме того, технически,myBook
насколько я могу судить, это не ссылка на рабочую книгу, возможно, потребуется изменить имя переменной только для удобства чтения… Кроме того, вы погуглили свой вопрос и попробовали какое-либо из предложенных решений?2. Обычно, если вы хотите установить диапазон в Matlab, вам нужно только написать что-то вроде
myRange = myBook.Range('B1:B3');
этого, работает идеально! Но в моем особом случае я не хочу настраивать несколько диапазонов — и это именно тот момент, который заканчивается ошибкой.3. Попробуйте
myRange = myBook.Range('B355:AG359','B365:AG369');
. Это работа для меня4. Я попробовал это самостоятельно и ваше право — вы не получаете сообщение об ошибке. Но если вы посмотрите на результат в своей таблице Excel, вы увидите, что затронут только первый диапазон (в данном случае ‘B355: AG359’). Я попытался изменить цвет фона на красный, и только первый из обоих диапазонов был изменен на красный. Что бы я ни пробовал — второй диапазон не был затронут.
5. Небольшое примечание: ваша
myBook
переменная на самом деле является ссылкой наWorksheet
объект, а не наWorkbook
объект. Это различие может помочь вам легче найти нужную документацию. К сожалению, соответствующий документ заключается в следующем — learn.microsoft.com/en-us/office/vba/api/excel.worksheet.range — и это, кажется, говорит о том, что ваш подход «запятая» должен сработать. Извините за это; работать с интерфейсами ActiveX из Matlab сложно.