Для горизонтальной конкатенации листов
Шаг 1: Сделать один массив ячеек, содержащих повторы вашего файла (такое же количество, как количество листов, которые вы хотите объединить), и один массив ячеек с номера листов. Затем используйте cellfun
, чтобы прочитать все листы.
Шаг 2: Определите, из какой колонки вы хотели бы написать данные. Первый лист, который вы читаете, должен быть написан из столбца «А», я полагаю. Вероятно, вы хотите начать с первой строки, поэтому range
- это «A1» в первый раз (т. Е. k = 1
), вы записываете данные в новый файл. Для k > 1
это немного сложнее. Вам нужно следить за количеством столбцов всех прочитанных вами листов, чтобы узнать, где будет новый диапазон, когда вы пишете листы 2, 3, ..., n в новом файле. Преобразуйте свои подсчеты в имена столбцов Excel. Это можно сделать с помощью команды char
. Удостоверьтесь, что позаботились об обертывании (после Z идет AA).
Решение:
% STEP 1
n = 3; %number of sheets you want to combine
filename = strcat(cell(1,n), 'C:\Example.xlsx');
sheets = num2cell(1:n);
combinedSheets = cellfun(@xlsread,filename, sheets,'un',0);
% STEP 2
range = {'A1'};
cols = 0;
for k = 1:n
xlswrite('C:\TEST.xlsx',combinedSheets{k},1, cell2mat(range))
cols = cols + size(combinedSheets{k},2);
q = floor(cols/26);
d = mod(cols,26);
range = strcat(cell(1,q+1), 'A');
range{end} = [char(d+'A'),'1'];
end
Для вертикальной конкатенации листов
Это немного проще, так как нам не нужно обрабатывать имена столбцов и упаковку и т.д.
Solution :
n = 3; %number of sheets you want to combine
filename = strcat(cell(1,n), 'C:\Example.xlsx');
sheets = num2cell(1:n);
combinedSheets = cellfun(@xlsread,filename, sheets,'un',0);
range = 'A1';
rows = 1;
for k = 1:n
xlswrite('C:\TEST.xlsx',combinedSheets{k},1, range)
rows = rows + size(combinedSheets{k},1);
range = sprintf('A%s', num2str(rows));
end