Выберите несколько диапазонов с помощью сервера matlab activex

#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 сложно.