Как закрыть excel из matlab

Обновлено: 03.07.2024

Функция dlmread (чтение из текстовых файлов) предназначена для чтения матриц из текстовых файлов. Первый аргумент функции – имя файла. Результат записывается в матрицу.

Вторым аргументом можно явно указать разделитель чисел в файле, например ‘,’

Чтобы узнать размер прочитанной матрицы по каждому измерению используется функция size, которая возвращает массив двух значений: количество прочитанных строк и столбцов:

Чтобы узнать общее число прочитанных чисел можно перемножив размеры матрицы, используя функцию prod

или использовать функцию numel (количество всех элементов)

Третий и четвертый аргумент dlmread смещение строки и столбца, начиная с которых нужно начинать считывать данные из файла. Например, чтобы пропустить 1 строку и один столбец, необходимо вызвать функцию со следующими дополнительными параметрами

Чтение данных из Excel файлов

Для чтение данных из XLS файлов используется функция xlsread

Функция позволяет импортировать таблицы из файлов различных форматов. В отличие от результата работы функции xlsread результатом работы функции readtable является объект table, который содержит дополнительную информацию о таблице: об именах столбцов, строк. Без дополнительных указаний функция readtable считает, что в первой строке таблицы записаны имена её столбцов.

В рабочем каталоге MATLAB находится xls-файл следующего на листе “Лист1” которого находятся следующие данные:


Результатом работы функции readtable будет таблица (объект table)

Первая строка в первом столбце таблицы не содержит никаких значений (ячейка А1 пустая), поэтому первому столбцу было присвоено имя автоматически Var1. Второй и третий столбцы в таблице имеют имена COL1 и COL2 соответственно. Функция readtable рассматривает эти значения как имена столбцов. Если такое поведение функции readtable нежелательно, то можно передать функции значение ‘ReadVariableNames’ равное false

Видно, что в этом случае, поскольку столбцы исходной таблицы в таком представлении содержат неоднородные данные (и числа и строки), все значения в столбцах рассматриваются как строковые без попыток их преобразования в числовые значения. Для корректного чтения данных из таблицы ‘Книга1.xlsx’ необходимо использовать поведение функции readtable по умолчанию, т.е.

В этом случае можно получить содержимое столбца, используя его имя. Например data.COL1 представляет собой матрицу столбец

Столбец data.Var1 это матрица ячеек, содержащая строковые значения

Список имен столбцов содержится в атрибуте (свойстве) таблицы data.VariableNames, которое считывается следующим образом

Для того, чтобы значения в первом столбце рассматривались как имена строк, необходимо использовать опцию ReadRowNames

Для чтения извлечения данных из строки по её имени используется следующий синтаксис

Результатом является объект типа table. Можно извлечь несколько строк по их именам, например так

Чтобы извлечь данные в виде матрицы необходимо использовать свойство таблицы Variables

Для исходной таблицы это свойство вернет все числовые значения в виде матрицы

status = fclose( ___ ) возвращает status из 0 когда операция закрытия успешна. В противном случае это возвращает -1 . Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Примеры

Открытие и закрытие файла

Откройте badpoem.txt файл, прочитанный первая строка, и затем, закрывает файл.


Используйте fopen открыть файл. Эта функция присваивает уникальный идентификатор файла, чтобы использовать для чтения и записи в файл.

Прочитайте первую строку из файла с помощью fgetl .

fileID — Идентификатор файла
целое число

Идентификатор файла открытого файла в виде целого числа. Прежде, чем закрыть файл с fclose , необходимо использовать fopen открыть файл и получить его fileID .

Типы данных: double

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

© 1994-2021 The MathWorks, Inc.

Для просмотра документации необходимо авторизоваться на сайте
Войти

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

Запустите Excel, проверьте, что проделаны все необходимые настройки так, как описано в предыдущем разделе (MatLab должен быть закрыт). Задайте ячейкам с А1 по С3 числовой формат и введите в ячейки с A1 по C3 матрицу, для отделения десятичных знаков используйте точку в соответствии с требованиями Excel:


Выделите на листе данные ячейки и нажмите кнопку putmatrix, появляется окно Excel с предупреждением о том, что MatLab не запущен. Нажмите OK, дождитесь открытия MatLab. Появляется диалоговое окно Excel со строкой ввода, предназначенной для определения имени переменной рабочей среды MatLab, в которую следует экспортировать данные из выделенных ячеек Excel. Введите к примеру, М и закройте окно при помощи кнопки OK. Перейдите к командному окну MatLab и убедитесь, что в рабочей среде создалась переменная М, содержащая массив три на три:


Проделайте некоторые операции в MatLab с матрицей М, например, обратите ее:

Вызов inv для обращения матрицы, как и любой другой команды MatLab можно осуществить прямо из Excel. Нажатие на кнопку evalstring, расположенную на панели Excel Link, приводит к появлению диалогового окна, в строке ввода которого следует набрать команду MatLab: IMM=inv(M). Если теперь вернуться в MatLAB и набрать IMM <Enter>, то получим результат обращения матрицы М, совпадающий с матрицей IM. Результат аналогичен полученному при выполнении команды в среде MatLab.

Вернитесь в Excel, сделайте текущей ячейку A5 и нажмите кнопку getmatrix. Появляется диалоговое окно со строкой ввода, в которой требуется ввести имя переменной, импортируемой в Excel. В данном случае такой переменной является IM. Нажмите OK, в ячейки с A5 по A7 введены элементы обратной матрицы.

Итак, для экспорта матрицы в MatLab следует выделить подходящие ячейки листа Excel, а для импорта достаточно указать одну ячейку, которая будет являться верхним левым элементом импортируемого массива. Остальные элементы запишутся в ячейки листа согласно размерам массива, переписывая содержащиеся в них данные, поэтому следует соблюдать осторожность при импорте массивов.

Вышеописанный подход является самым простым способом обмена информацией между приложениями — исходные данные содержатся в Excel, затем экспортируются в MatLab, обрабатываются там некоторым образом и результат импортируется в Excel.

Справочные данные

Набирая в любой ячейке следующие формулы, можно получать следующие результаты:

=MLAutoStart(«no») - MatLab не будет загружаться автоматически вместе Excel;

=MLClose() – закрывает Excel Link и MATLAB;

=MLOpen()– инициирует Excel Link и MATLAB.

=MLPutMatrix("var_name"; diap) – копирует в матрицу var_name данные из диапазона diap (пример: =MLPutMatrix("s"; A1:C5));

=MLAppendMatrix("var_name"; diap) – добавляет к существующей матрице var_name диапазона diap; функция сама определяет по размерности как добавить данные (справа или снизу);

=MLGetMatrix("var_name"; "diap") – копирует матрицу в Excel, на верхний левый угол указывает диапазон diap;

Задание 2. Данные о клиентах банка представлены в файле ДаныеКлиентов.xls. Требуется передать эти данные из Excel в MatLAB и там создать программу, которая выполняет следующую обработку.

Задание для студентов с четными номерами компьютеров:

- найти номера самого молодого и самого старого клиента;

- найти номер клиента, у которого размер кредита больше среднемесячного дохода в наибольшее число раз;

- построить поле точек, отражающее зависимость размера взятого кредита от веса клиента и его среднемесячного дохода.

Номера найденных клиентов вывести в Excel, поле точек построить в MatLAB.

Задание для студентов с нечетными номерами компьютеров:

- найти номера клиентов, предоставивших неверные сведения о стаже работы или возрасте. Для этого надо сравнить стаж работы и возраст. Предполагается, что работать человек может начинать с 18 лет;

- найти, во сколько раз суммарный размер кредитов, взятых мужчинами, больше чем суммарный размер кредитов, взятый женщинами;

Номера найденных клиентов и во сколько раз отличаются суммы кредитов вывести в Excel.

Внимание! В программе не следует использовать функцию clear, так как в противном случае переданная из Ecxel информация будет стерта!

В Excel2003 начинать процедуру запроса надо так: создать новый документ - «Данные» - «Импорт внешних данных» - «Создать веб-запрос». Далее аналогично.

Полученные данные передать в MatLABи в нем построить график изменения курса доллара, изобразить три первых уровня Фибоначчи и сделат заключение о целесообразности покупки или продажи валюты на сегодняшний день.

Задание 4. Решить задачу линейного программирования, представленную на карточке, выданной преподавателем. Построить многоугольник решений и поверхность целевой функции.

Пример построения многоугольника решений и поверхности целевой функции.

x = 0 : 80; % диапазон для построения

y1 = max(75 - x, 0); % x + y <= 75 ограничение на землю

y2 = max((4000 - 110 * x)/30, 0); % 110x + 30y <=4000 ограничение на хранение

y3 = max((15000 - 120 * x)/210, 0); % 120x + 210y <= 15000 затраты

ytop = min([y1; y2; y3]); % нас интересуют нижние области, т.к. оператор меньше равно

area(x, ytop); % прорисовываем области

hold on; % включение режима сохранения графика

[u v] = meshgrid(0 : 80, 0 : 80);

z=143*u+ 60 *v; %целевая функция

contour(u,v,z,20); % изображение линий уровня

holdoff; % отключение режима сохранения графика

figure% создаем новое графическое окно

surf(u,v,z) % построение трехмерной поверхностити

Пример. Для решения задачи ЛП применяется команда linprog, а именно, для следующей формулировки задачи ЛП:

минимизировать minХ (f* Х) при условии A*Х≤b, где Х – вектор переменных.

При необходимости найти максимум целевой функции, надо перед ней поставит знак минус и искать минимум этой модифицированной целевой функции, то есть:


Программный код решения:

f= [-143 -60]; % коэффициенты при целевой функции

A= [120 210; 110 30; 1 1;-1 0; 0 -1];

b = [15000; 4000; 75; 0; 0];

[Х,fval] =linprog(f,A,b); %решение задачи ЛП

X % результат решения

-f*Х % значение целевой функции

В полученное решение имеет вид:

Значение целевой функции:

Задание 5. Количество обращений на станции технического обслуживания зависит от стоимости автомобиля. Анализу подверглось всего 28 авто разной цены. Статистические данные представлены в таблице. В клетках таблицы указано количество ситуаций, соответствующих данному числу обращений и стоимости авто. Например, двойка, выделенная красным цветом, означает, что 1 обращение на станцию ТО имело 2 машины, чья стоимость лежит в диапазоне от 100 000 до 600 000 руб.

Интегрирование MatLab и Excel позволяет пользователю Excel обращаться к многочисленным функциям MatLab для обработки данных, различных вычислений и визуализации результата. Надстройка excllink.xla реализует данное расширение возможностей Excel. Для связи MatLab и Excel определены специальные функции.

Конфигурирование Excel

Перед тем как настраивать Excel на совместную работу с MatLab, следует убедиться, что Excel Link входит в установленную версию MatLab. В подкаталоге exclink основного каталога MatLab или подкаталога toolbox должен находиться файл с надстройкой excllink.xla . Запустите Excel и в меню Tools выберите пункт Add-ins . Откроется диалоговое окно, содержащее информацию о доступных в данный момент надстройках. Используя кнопку Browse , укажите путь к файлу excllink.xla . В списке надстроек диалогового окна появится строка Excel Link 2.0 for use with MatLab с установленным флагом. Нажмите OK , требуемая надстройка добавлена в Excel.

Обратите внимание, что в Excel теперь присутствует панель инструментов Excel Link , содержащая три кнопки: putmatrix , getmatrix , evalstring . Эти кнопки реализуют основные действия, требуемые для осуществления взаимосвязи между Excel и MatLab — обмен матричными данными, и выполнение команд MatLab из среды Excel. При повторных запусках Excel надстройка excllink.xla подключается автоматически.

Согласованная работа Excel и MatLab требует еще нескольких установок, которые приняты в Excel по умолчанию (но могут быть изменены). В меню Tools перейдите к пункту Options , открывается диалоговое окно Options . Выберите вкладку General и убедитесь, что флаг R1C1 reference style выключен, т.е. ячейки нумеруются A1 , A2 и т.д. На вкладке Edit должен быть установлен флаг Move selection after Enter .

Обмен данными между MatLab и Excel

Запустите Excel, проверьте, что проделаны все необходимые настройки так, как описано в предыдущем разделе (MatLab должен быть закрыт). Введите в ячейки с A1 по C3 матрицу, для отделения десятичных знаков используйте точку в соответствии с требованиями Excel.


Выделите на листе данные ячейки и нажмите кнопку putmatrix , появляется окно Excel с предупреждением о том, что MatLab не запущен. Нажмите OK , дождитесь открытия MatLab.

Появляется диалоговое окно Excel со строкой ввода, предназначенной для определения имени переменной рабочей среды MatLab, в которую следует экспортировать данные из выделенных ячеек Excel. Введите к примеру, М и закройте окно при помощи кнопки OK . Перейдите к командному окну MatLab и убедитесь, что в рабочей среде создалась переменная М , содержащая массив три на три:


Проделайте некоторые операции в MatLab с матрицей М , например, обратите ее.

Вызов inv для обращения матрицы, как и любой другой команды MatLab можно осуществить прямо из Excel. Нажатие на кнопку evalstring , расположенную на панели Excel Link , приводит к появлению диалогового окна, в строке ввода которого следует набрать команду MatLab

Результат аналогичен полученному при выполнении команды в среде MatLab.

Вернитесь в Excel, сделайте текущей ячейку A5 и нажмите кнопку getmatrix . Появляется диалоговое окно со строкой ввода, в которой требуется ввести имя переменной, импортируемой в Excel. В данном случае такой переменной является IM . Нажмите OK , в ячейки с A5 по A7 введены элементы обратной матрицы.

Итак, для экспорта матрицы в MatLab следует выделить подходящие ячейки листа Excel, а для импорта достаточно указать одну ячейку, которая будет являться верхним левым элементом импортируемого массива. Остальные элементы запишутся в ячейки листа согласно размерам массива, переписывая содержащиеся в них данные, поэтому следует соблюдать осторожность при импорте массивов.

Вышеописанный подход является самым простым способом обмена информацией между приложениями — исходные данные содержатся в Excel, затем экспортируются в MatLab, обрабатываются там некоторым образом и результат импортируется в Excel. Пользователь переносит данные при помощи кнопок панели инструментов Excel Link . Информация может быть представлена в виде матрицы, т.е. прямоугольной области рабочего листа. Ячейки, расположенные в строку или столбец, экспортируются, соответственно, в вектор ы -строки и вектор ы -столбцы MatLab. Аналогично происходит и импорт векторов-строк и векторов-столбцов в Excel.

мой код matlab создает новый файл и записывает в него некоторые вещи. Я использую fclose () для освобождения дескриптора файла, но по некоторым причинам, когда я пытаюсь удалить созданный файл после завершения выполнения программы, я получаю файл в ошибке использования. Файл может быть удален после закрытия matlab.

проблема не является постоянной. Я попробовал то же самое снова без каких-либо изменений, и это работает.

вероятная проблема, которая у вас есть, является общей, и я часто попадаюсь, потому что ее легко пропустить.

предположим, у вас есть функция или скрипт, который открывает файл, считывает из него некоторые данные, а затем снова закрывает файл:

Теперь, при первом запуске вышеуказанного кода Вы можете обнаружить, что сделали ошибку в том, как вы загружаете данные (в конце концов, никто не идеален). Когда эта ошибка возникает, функция / скрипт завершает работу, пренебрегая выполните любой код, следующий за строкой, в которой есть ошибки (например, вызов функции fclose). Это означает, что у вас все еще есть открытый дескриптор файла.

когда вы исправляете свою ошибку и повторно запускаете свой код, вы открываете новая дескриптор файла, который Вы читаете, а затем закрываете, и все это время старый открыть файл дескриптор все еще там. As kwatford указывает, вы можете увидеть этот открытый дескриптор файла, используя функции fopen функция.

одно решение-просто использовать fclose all as Иаков предлагает, заключение открыть файл обработки. Вы также можете выйти из MATLAB, который закрывает старый дескриптор файла и позволяет вам удалить файл. При перезапуске MATLAB и повторном запуске кода (теперь без ошибок) у вас больше нет проблем с задержкой дескрипторов файлов.

Я обсуждаю более отказоустойчивый способ работы с файлом IO в мой ответ: к связанному вопросу SO: как вы обрабатываете ресурсы в MATLAB безопасным способом исключения? мой ответ там показывает, как onCLeanup объекты может помочь вам автоматически закрыть файлы, открытые в функции, независимо от того, выходит ли эта функция нормально или из-за ошибки. Этот подход может помочь вам избежать проблемы затягивания открытых дескрипторов файлов.

у меня была эта проблема так много раз. Вместо закрытия MATLAB вы можете просто ввести fclose all .

большую часть времени я использую fclose all в моих программах - - - да, я знаю, что закрывает все файлы, открытые MATLAB, но иногда в моем приложении, это нормально. Рассматривайте этот ответ как рекомендацию, а не как полное решение.

возможно, что вы случайно открываете файл несколько раз.

использовать fopen('all') чтобы получить список открытых дескрипторов файлов. Затем для данного дескриптора файла используйте fopen(fid) чтобы увидеть его имя. Используйте их, чтобы определить, если вы открываете тот же файл несколько раз.

Читайте также: