Поля таблицы в формате в генераторе отчетов PDF - Matlab

Когда я сохраняю таблицу в формате PDF (используя генератор отчетов), я не получаю числовые поля (Index1, Index2, Index3) в формате shortG (всего 5 цифр). В чем проблема и как ее исправить?

Код:

function ButtonPushed(app, event)
        import mlreportgen.dom.*;
        import mlreportgen.report.*

        format shortG;
        ID = [1;2;3;4;5];
        Name = {'San';'John';'Lee';'Boo';'Jay'};
        Index1 = [71.1252;69.2343245;64.345345;67.345322;64.235235];
        Index2 = [176.23423;163.123423654;131.45364572;133.5789435;119.63575647];
        Index3 = [176.234;16.123423654;31.45364572;33.5789435;11.6647];
        mt = table(ID,Name,Index1,Index2,Index3);


        d = Document('myPDF','pdf');
        d.OutputPath = ['E:/','temp'];

        append(d,'Table 1: '); 
        append(d,mt); 
        close(d);
        rptview(d.OutputPath); 
end

person lroca    schedule 08.05.2020    source источник


Ответы (1)


Чтобы исправить это, отформатируйте числовые массивы в массивы символов с 5 значащими цифрами перед записью в PDF.

mt = table(ID,Name,f(Index1),f(Index2),f(Index3));

куда,

function FivDigsStr = f(x)
%formatting to character array with 5 significant digits and then splitting. 
%at each tab. categorical is needed to remove ' 's that appear around char 
%in the output PDF file with newer MATLAB versions
%e.g. with R2018a, there are no ' ' in the output file but ' ' appears with R2020a
FivDigsStr = categorical(split(sprintf('%0.5G\t',x)));
%Removing the last (<undefined>) value (which is included due to \t)
FivDigsStr = FivDigsStr(1:end-1);
end

Приведенное выше изменение дает следующий результат:

Ширина


Изменить:

Чтобы вернуть заголовки:

mt.Properties.VariableNames(3:end) = {'Index1', 'Index2', 'Index3'};

или более общим способом извлечения имен переменных вместо их жесткого кодирования, вы можете использовать inputnames для извлечения имен переменных.

V = @(x) inputname(1);
mt.Properties.VariableNames(3:end) = {V(Index1), V(Index2), V(Index3)};

который дает:

Ширина

person Sardar Usama    schedule 08.05.2020
comment
Спасибо. Они преобразуются в строку и теряют заголовок. Можно ли преобразовать его обратно в числовой и вернуть заголовок? - person lroca; 08.05.2020
comment
Большое спасибо. любая идея, как вернуть их к числовым? - person lroca; 08.05.2020
comment
@Iroca Для записи в PDF не имеет значения, числовой он или строковый. - person Sardar Usama; 08.05.2020
comment
Действительно, но как я могу опустить ' ', который будет указывать числовое значение? - person lroca; 08.05.2020
comment
@Iroca В выходном PDF-файле нет ' ' - person Sardar Usama; 08.05.2020
comment
1 'San' '1' '176.23' '176.23' это то, что я получаю, например, в PDF (я использую 2020a) - person lroca; 08.05.2020
comment
Какая ОС у вас кстати? - person Sardar Usama; 08.05.2020
comment
вин 10 про версия 1909 - person lroca; 08.05.2020
comment
Я использую R2018a на Win 10 дома (10.0.17134) - person Sardar Usama; 08.05.2020
comment
@Iroca, я обновил его, чтобы он работал и на R2020a. - person Sardar Usama; 08.05.2020