65 lines
2.2 KiB
Matlab
65 lines
2.2 KiB
Matlab
function getEnumfromExcel(filepath, fileSavePath, filename,HeaderFile)
|
|
% @ filename: the name of the excel to be read (e.g. '*.xlsx')
|
|
% @ HeaderFile: the name of saved head file (e.g. '*.h')
|
|
%% Setup the Import Options
|
|
[~,sheets,~] = xlsfinfo([filepath, filename]);
|
|
headFileFullName = [fileSavePath, HeaderFile];
|
|
fid = fopen(headFileFullName,'w','n','GB2312');
|
|
file_macro = strcat('__',upper(replace(HeaderFile,'.','_')),'__');
|
|
file_macro2 = strcat('__',upper(replace(HeaderFile,'.','_MACRO_')),'__');
|
|
|
|
fprintf(fid, ['#ifndef ' file_macro ' \n']);
|
|
fprintf(fid, ['#define ' file_macro ' \n']);
|
|
fprintf(fid, ['#ifndef ' file_macro2 ' \n']);
|
|
|
|
for k2 = 1:numel(sheets)
|
|
|
|
opts = spreadsheetImportOptions("NumVariables", 2);
|
|
% Specify sheet and range
|
|
opts.Sheet = sheets{k2};
|
|
opts.DataRange = 'A2:B66535';
|
|
% Specify column names and types
|
|
opts.VariableNames = ["Enum", "Value"];
|
|
opts.VariableTypes = ["string", "string"];
|
|
opts = setvaropts(opts, [1, 2], "EmptyFieldRule", "auto");
|
|
% Import the data
|
|
tmp = readtable([filepath, filename], opts, "UseExcel", false);
|
|
%% Clear temporary variables
|
|
clear opts
|
|
|
|
% generate header file
|
|
fprintf(fid,'typedef enum{\n');
|
|
for idk = 1:sum(tmp.Enum ~= "")
|
|
fprintf(fid,'\t');
|
|
|
|
enumValue = str2num(tmp.Value(idk));
|
|
|
|
if isnan(enumValue)
|
|
fprintf(fid,strcat(tmp.Enum(idk), ','));
|
|
else
|
|
if (isempty(enumValue))
|
|
fprintf(fid,strcat(tmp.Enum(idk), ','));
|
|
else
|
|
fprintf(fid,strcat(tmp.Enum(idk), ' = %d,'), enumValue);
|
|
end
|
|
end
|
|
fprintf(fid,'\n');
|
|
end
|
|
fprintf(fid,['}' sheets{k2} ';\n']);
|
|
end
|
|
fprintf(fid,'\n');
|
|
fprintf(fid,['#endif /*' file_macro2 '*/\n']);
|
|
fprintf(fid,['#endif /*' file_macro '*/\n']);
|
|
fclose(fid);
|
|
cd(fileSavePath);
|
|
%-----------------删除所有'_enum.m'文件----------------
|
|
deleteFileList = dir(fullfile(fileSavePath, '*_enum.m'));
|
|
fileNames = {deleteFileList.name};
|
|
for i = 1:length(fileNames)
|
|
filename = cell2mat(fileNames(i));
|
|
delete(filename);
|
|
disp(['delete ', filename]);
|
|
end
|
|
%------------------------------------------------------
|
|
Simulink.importExternalCTypes(headFileFullName);
|
|
end |