Импорт данных из Excel в MATLAB: полное руководство с примерами

Зачем переносить данные из Excel в MATLAB и когда это необходимо

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

Типичные сценарии, когда требуется импорт из Excel:

  • 📊 Обработка экспериментальных данных (например, результатов лабораторных исследований или промышленных замеров)
  • 📈 Построение 3D-графиков и поверхностей на основе табличных данных
  • 🤖 Обучение нейронных сетей, где исходные данные хранятся в .xlsx или .csv
  • 🔄 Автоматизация отчётов с динамически обновляемыми данными из Excel

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

📊 Какой формат Excel вы используете чаще?
XLSX
CSV
XLS
TXT
Другой

Подготовка файла Excel к импорту в MATLAB

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

Основные моменты подготовки:

  • 📋 Удалите объединённые ячейки — MATLAB воспринимает их как ошибку структуры
  • 🔢 Замените пустые ячейки на NaN или 0 (в зависимости от контекста)
  • 📊 Разделите данные и метаинформацию: заголовки, комментарии и сами данные должны находиться на разных листах или в разных диапазонах
  • 🔤 Проверьте кодировку: если используете .csv, сохраните файл в UTF-8 без BOM

Особое внимание уделите форматам ячеек. Например, даты в Excel хранятся как числа, но MATLAB может интерпретировать их по-разному. Если дата записана как текст (например, "01.01.2026"), её придётся конвертировать в числовой формат вручную с помощью datenum или datetime.

Удалить объединённые ячейки|Заполнить пустые значения|Разделить данные и метаинформацию|Проверить кодировку CSV|Сохранить файл в актуальной версии-->

Способы импорта данных: сравнение методов

MATLAB предлагает несколько встроенных функций для импорта данных из Excel. Выбор метода зависит от формата файла, объёма данных и требуемой гибкости. Ниже — сравнительная таблица основных подходов:

Метод Поддерживаемые форматы Преимущества Недостатки
readtable .xlsx, .xls, .csv, .txt Сохраняет имена столбцов, поддерживает смешанные типы данных Медленнее xlsread для больших файлов
xlsread (устаревшая) .xlsx, .xls Быстрая работа с числовыми данными Не рекомендуется для новых проектов, не поддерживает .csv
readmatrix .xlsx, .csv, .txt Оптимизирован для числовых матриц Игнорирует текстовые заголовки
importdata .csv, .txt Гибкая настройка разделителей Не поддерживает .xlsx напрямую

Для большинства задач оптимальным выбором станет readtable — она сочетает удобство и функциональность. Однако если вам нужно прочитать только числовые данные без заголовков, readmatrix справится быстрее. Устаревшая функция xlsread сохранена для обратной совместимости, но в новых версиях MATLAB её использование не рекомендуется.

Почему xlsread устарела?

Функция xlsread была основным инструментом для импорта из Excel в старых версиях MATLAB (до R2019a). Однако она имела ряд ограничений:

- Не поддерживала новые форматы файлов (например, .xlsx с некоторыми особенностями).

- Не оптимизирована для больших данных (более 100 000 строк).

- Не предоставляла гибких опций для обработки заголовков и пропущенных значений.

В современных версиях её заменили на readtable и readmatrix, которые лишены этих недостатков.

Пошаговая инструкция: импорт с помощью readtable

Рассмотрим самый универсальный метод — использование функции readtable. Она подходит для большинства задач и позволяет гибко настраивать процесс чтения.

Базовый синтаксис:

data = readtable('путь_к_файлу.xlsx', 'Опции');

Пример с настройками:

% Чтение данных с 5-й строки, используя 3-й лист

data = readtable('experiment_data.xlsx', ...

'Sheet', 3, ...

'Range', 'A5:D100', ...

'ReadVariableNames', true, ...

'MissingRule', 'fill');

Разберём ключевые опции:

  • 📄 'Sheet' — номер или имя листа (например, 'Sheet', 'Лист1')
  • 📏 'Range' — диапазон ячеек (например, 'B2:E500')
  • 🏷️ 'ReadVariableNames' — если true, первая строка диапазона станет именами столбцов
  • 'MissingRule' — правило обработки пустых ячеек ('fill' заполнит их предыдущим значением)

После импорта данные будут доступны в виде таблицы (table), с которой можно работать как с обычной переменной. Например, чтобы вывести первые 5 строк:

head(data, 5)

Работа с большими файлами: оптимизация производительности

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

1. Чтение по частям:

Используйте опцию 'Range' для постраничной загрузки. Например, читайте данные блоками по 10 000 строк:

for i = 1:10

startRow = (i-1)*10000 + 1;

endRow = i*10000;

chunk = readtable('big_data.xlsx', 'Range', sprintf('A%d:Z%d', startRow, endRow));

% Обработка блока

end

2. Преобразование в .csv:

Файлы .csv читаются быстрее, чем .xlsx, особенно если в них только числовые данные. Экспортируйте данные из Excel в CSV и используйте:

data = readmatrix('big_data.csv');

3. Использование datastore:

Для крайне больших наборов данных (более 100 000 строк) создайте datastore:

ds = tabularTextDatastore('big_data.csv', 'SelectedVariableNames', {'Var1', 'Var2'});

data = readall(ds); % или обрабатывайте данные порциями с помощью read(ds)

Типичные ошибки и их решения

Даже при правильной подготовке файла могут возникать ошибки. Рассмотрим наиболее распространённые проблемы и способы их устранения.

⚠️ Внимание: Если MATLAB выдаёт сообщение "Error using xlsread (line X): File not found or permission denied", проверьте:
  • 📁 Правильность пути к файлу (используйте абсолютный путь, если файл не в рабочей папке)
  • 🔒 Права доступа — файл не должен быть открыт в Excel или другом приложении
  • 🔄 Расширение файла — иногда Excel сохраняет файлы с двойным расширением (например, data.xlsx.xlsx)

Другая частая ошибка — неверная интерпретация типов данных. Например, столбец с числами и текстом (например, "100" и "N/A") будет прочитан как текстовый. Решение:

% Явное указание типов столбцов

opts = detectImportOptions('mixed_data.xlsx');

opts = setvartype(opts, 'Var3', 'double'); % Принудительно задаём числовой тип для 3-го столбца

data = readtable('mixed_data.xlsx', opts);

Если в данных есть специальные символы (например, %, ), они могут искажаться при чтении. В этом случае сохраните файл в UTF-8 и укажите кодировку:

data = readtable('special_chars.csv', 'FileEncoding', 'UTF-8');
Что делать если MATLAB не видит файл?

1. Убедитесь, что файл находится в текущей рабочей папке MATLAB (проверьте с помощью команды pwd).

2. Если файл в другой папке, укажите полный путь:

data = readtable('C:\Data\myfile.xlsx');

3. Для путей с пробелами используйте одинарные кавычки:

data = readtable('C:\My Documents\data.xlsx');

4. В Linux/Mac пути указываются с прямым слэшем:

data = readtable('/home/user/data.xlsx');

Автоматизация импорта: скрипты и функции

Если вам регулярно приходится импортировать данные из Excel в MATLAB, имеет смысл создать универсальный скрипт или функцию. Это сэкономит время и уменьшит риск ошибок.

Пример функции для импорта с гибкими настройками:

function data = importExcel(filePath, sheetName, dataRange, hasHeaders)

% filePath - путь к файлу

% sheetName - имя листа (опционально)

% dataRange - диапазон (например, 'A1:C100')

% hasHeaders - логическое значение (есть ли заголовки)

if nargin < 4

hasHeaders = true;

end

opts = detectImportOptions(filePath, ...

'Sheet', sheetName, ...

'DataRange', dataRange);

if ~hasHeaders

opts.VariableNamesLine = 0;

end

data = readtable(filePath, opts);

end

Вызов функции:

% Импорт данных с листа "Sheet1", диапазон B2:D100, без заголовков

myData = importExcel('experiment.xlsx', 'Sheet1', 'B2:D100', false);

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

files = {'data1.xlsx', 'data2.xlsx', 'data3.xlsx'};

allData = cell(1, length(files));

for i = 1:length(files)

allData{i} = importExcel(files{i}, 1, 'A1:Z1000');

% Дополнительная обработка

end

Такой подход особенно полезен, если файлы имеют одинаковую структуру, но разные данные (например, результаты экспериментов за разные дни).

FAQ: ответы на частые вопросы

Можно ли импортировать данные из Excel Online или Google Sheets?

Прямого импорта из Excel Online или Google Sheets в MATLAB нет, но есть обходные пути:

  1. Экспортируйте данные в .csv или .xlsx и загрузите локально.
  2. Используйте Google Sheets API для программного экспорта (требует навыков работы с API).
  3. Для Excel Online сохраните файл на диск через веб-интерфейс.

Наиболее надёжный способ — скачать файл вручную и использовать стандартные методы импорта.

Как импортировать только определённые столбцы?

Используйте опцию 'SelectedVariableNames' в detectImportOptions:

opts = detectImportOptions('data.xlsx');

opts.SelectedVariableNames = {'Time', 'Temperature'}; % Имена столбцов

data = readtable('data.xlsx', opts);

Или укажите номера столбцов через 'SelectedVariableIndices':

opts.SelectedVariableIndices = [1, 3, 5]; % 1-й, 3-й и 5-й столбцы
Почему после импорта даты отображаются как числа?

Excel хранит даты как числа (количество дней с 1 января 1900 года). MATLAB читает их "как есть", поэтому требуется преобразование:

% Предположим, даты в первом столбце

dates = datetime(data.Var1, 'ConvertFrom', 'excel');

Если даты записаны как текст (например, "01/01/2026"), используйте:

dates = datetime(data.Var1, 'InputFormat', 'dd/MM/yyyy');
Как импортировать данные с русскими буквами в заголовках?

MATLAB поддерживает кириллицу в именах переменных, но могут возникнуть проблемы с кодировкой. Решения:

  • Сохраните файл в UTF-8 (особенно для .csv).
  • Используйте 'FileEncoding', 'UTF-8' в readtable.
  • Если имена столбцов не читаются, переименуйте их после импорта:
data.Properties.VariableNames = {'Время', 'Температура', 'Давление'};
Можно ли импортировать данные из защищённого паролем файла Excel?

MATLAB не поддерживает прямой импорт из защищённых файлов. Варианты:

  1. Снимите защиту в Excel (Файл → Сведения → Защита книги → Удалить пароль).
  2. Используйте VBA-скрипт для автоматического снятия защиты и сохранения в новый файл.
  3. Для .csv парольной защиты нет, поэтому экспортируйте данные в этот формат.

Важно: Хранение паролей в скриптах MATLAB небезопасно. Избегайте автоматизации работы с защищёнными файлами, если это нарушает политику безопасности вашей организации.