Files
B_Current_Ctrl/Matlab/utilities/getEnumfromExcel.m
T
2025-09-11 22:24:31 +08:00

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