Проблемы с xlsread и xlswrite в MATLAB
Я пытаюсь написать скрипт, который загружает файл Excel и записывает 10 вложенных файлов либо в 10 отдельных файлов, либо на отдельные листы. Я новичок в MATLAB, и у меня возникли некоторые проблемы.
Нужно найти способ загрузить файл и получить доступ только к A1:B1000 в файле Excel, а затем записать эту информацию в новый файл Excel. Затем загрузите A1000:B2000 и т. Д.
Моя идея и код следующие:
i=1;
j=1000;
TenTimes=1;
master= 'Master.xlsx';
while TenTimes < 10
num = xlsread('File1.xlsx');
Time = num(:,1);
Current = num(:,2);
xlswrite(master,[Time Current]);
i == j;
j = j +1000;
TenTimes = TenTimes + 1;
end
Я устал от следующего:
num=num = xlsread('File1.xlsx', 'Ai:Bj');
Это разбило MATLAB и заморозило мой ноутбук.
num = xlsread('File1.xlsx');
Time = num('Ai:Aj',1);
Current = num('Bi:Bj",2);
Это производит мусор
Я также не уверен, как закодировать цикл для создания отдельных файлов или отдельных листов.
Любая помощь будет наиболее ценной.
1 ответ
Вот код для чтения из файла и записи первых двух столбцов, независимо от того, какие данные в них (числовые или символьные).
% parameters
infile = 'File1.xlsx'; % file to read from
infile_sheet = 'Sheet1'; % sheet to read from
outfile = 'Master.xlsx'; % file to write to
col_index = 1:2; % index of columns to write
block_size = 1000; % size of blocks to write
% the work
[~, ~, data] = xlsread(infile, infile_sheet); % read from the file
num_rows = size(data, 1);
num_blocks = ceil(num_rows/block_size);
for block = 1:num_blocks
% get the index of rows in the current block
start_row = (block-1) * block_size + 1;
end_row = min(block * block_size, num_rows);
row_index = start_row : end_row;
% write the current block to sheet Sheet<block>
xlswrite(outfile, data(row_index, col_index), sprintf('Sheet%.0f', block));
end
Тильды в строке [~, ~, data] просто означают, что первые два значения, возвращаемые функцией xlsread, следует игнорировать; все, что мы хотим, это третий вывод, который будет массивом ячеек.