Excel к PDF

В этом примере показано, как создать отчет PDF из электронной таблицы Microsoft® Excel® при помощи MATLAB® Report Generator™. В этом примере электронная таблица Excel обобщает ежегодный продовольственный импорт продовольственной категорией. Источником электронной таблицы является Служба экономических исследований, американское Министерство сельского хозяйства. Электронная таблица доступна в американском Продовольственном Импорте. Пример использует локальную копию электронной таблицы.

Импортируйте Excel Data

Импортируйте данные из электронной таблицы, Alltables.xlsx, в массивы ячеек MATLAB®.

xlsfile = "Alltables.xlsx";
years = readcell(xlsfile, "Sheet","FOOD$","Range","D2:V2");
data = readcell(xlsfile, "Sheet","FOOD$","Range","D7:V21");
types = readcell(xlsfile, "Sheet","FOOD$","Range","A7:A21");
units = readtable(xlsfile, "Sheet","FOOD$","Range","K3:K3","ReadVariableNames",false);

Создайте отчет

Импортируйте DOM и пакеты API Отчета так, чтобы вы не использовали долго, полностью определенные имена классов.

import mlreportgen.report.*
import mlreportgen.dom.*

Создайте контейнер, чтобы содержать содержимое отчета для отчета PDF.

rpt = Report("Food Imports Report","pdf");

Создайте титульный лист

Создайте и добавьте титульный лист в отчет.

tp = TitlePage();
tp.Title = "Food Imports Report Based on Multi-Year Data from the USDA";
tp.Image = "peppers.png";
tp.Author = "John Doe";
tp.PubDate = date;
add(rpt,tp);

Создайте оглавление

Создайте и добавьте оглавление при помощи mlreportgen.report.TableofContents генератор отчетов. Этот генератор отчетов автоматически создает оглавление на основе главы и заголовков раздела в отчете.

toc = TableOfContents();
add(rpt,toc);

Отобразите данные на графике в MATLAB

Создайте и отформатируйте линейный график ежегодного импорта продовольственной категорией.

fig = figure("Color","w");
ax = axes(fig,"FontSize",12);
t = str2double(years);
for i = 1:size(data,1)
    hold on;
    plot(ax,t,[data{i,:}],"LineWidth",1);
end
xlabel("Years");
ylabel(units.Var1{:});
legend(types,"Location","northeastoutside");
title("Food Imports");

Добавьте график в отчет

Создайте главу и добавьте линейный график в него.

ch = Chapter("Imports Summary Graph");
fig = Figure(fig);
add(ch,fig);
add(rpt,ch);

Преобразуйте данные в подходящую форму для того, чтобы составить таблицу DOM

Отформатируйте данные и создайте один массив строк, tableData, то, что можно использовать, чтобы создать mlreportgen.dom.Table объект.

tableData = cellfun(@(x)sprintf("%.0f",x),data);
tableData = [types tableData];
tableHeader = ["" string(years)];
tableData = [tableHeader; tableData]
tableData = 16×20 string
    ""                           "1999"    "2000"    "2001"    "2002"    "2003"     "2004"     "2005"     "2006"     "2007"     "2008"     "2009"     "2010"     "2011"     "2012"     "2013"     "2014"     "2015"     "2016"     "2017" 
    "Live meat animals"          "1190"    "1419"    "1771"    "1724"    "1277"     "1134"     "1672"     "2172"     "2588"     "2266"     "1656"     "2007"     "1886"     "2192"     "2190"     "3009"     "2773"     "2103"     "2020" 
    "Meats"                      "3261"    "3828"    "4256"    "4283"    "4427"     "5719"     "5752"     "5244"     "5367"     "5060"     "4612"     "5088"     "5755"     "6245"     "6530"     "8940"     "9992"     "8589"     "8878" 
    "Fish and shellfish 2/"      "8860"    "9880"    "9663"    "9963"    "10860"    "11106"    "11840"    "13112"    "13435"    "13912"    "12934"    "14517"    "16459"    "16468"    "17784"    "20054"    "18521"    "19261"    "21324"
    "Dairy"                      "930"     "922"     "996"     "1009"    "1110"     "1292"     "1388"     "1406"     "1501"     "1596"     "1353"     "1347"     "1502"     "1604"     "1649"     "1844"     "1893"     "1876"     "1827" 
    "Vegetables"                 "3632"    "3771"    "4157"    "4391"    "5082"     "5730"     "6043"     "6619"     "7256"     "7801"     "7525"     "8706"     "9667"     "9946"     "10734"    "10930"    "11290"    "12469"    "12743"
    "Fruits"                     "4764"    "4629"    "4665"    "5068"    "5558"     "5962"     "6874"     "7707"     "9217"     "9888"     "9640"     "10649"    "11974"    "12538"    "13602"    "14808"    "15955"    "17157"    "18383"
    "Nuts"                       "794"     "809"     "670"     "701"     "776"      "1078"     "1122"     "1099"     "1181"     "1351"     "1278"     "1462"     "1863"     "2000"     "2000"     "2361"     "2767"     "2871"     "3301" 
    "Coffee, tea, and spices"    "3604"    "3442"    "2401"    "2455"    "2872"     "3144"     "3771"     "4195"     "4791"     "5581"     "5160"     "6265"     "9716"     "8726"     "7633"     "8299"     "8536"     "8311"     "9069" 
    "Grains"                     "2659"    "2735"    "2990"    "3343"    "3618"     "4010"     "4241"     "4910"     "5915"     "7690"     "6846"     "7138"     "8063"     "9111"     "10257"    "10031"    "10030"    "10179"    "10861"
    "Vegetable oils"             "1357"    "1362"    "1177"    "1302"    "1507"     "2241"     "2363"     "2818"     "3517"     "5695"     "4039"     "4509"     "6794"     "6236"     "6665"     "7337"     "6304"     "6522"     "7225" 
    "Sugar and candy"            "1618"    "1572"    "1581"    "1843"    "2131"     "2111"     "2474"     "3021"     "2606"     "3011"     "3081"     "4107"     "5207"     "4784"     "4327"     "4582"     "4705"     "4693"     "4720" 
    "Cocoa and chocolate"        "1522"    "1404"    "1536"    "1761"    "2439"     "2484"     "2751"     "2659"     "2662"     "3299"     "3476"     "4295"     "4681"     "4096"     "4159"     "4728"     "4860"     "5081"     "5007" 
    "Other edible products"      "2121"    "2102"    "2252"    "2482"    "3637"     "4784"     "5536"     "5963"     "6080"     "6701"     "6111"     "6782"     "8133"     "10978"    "9831"     "9716"     "9592"     "9351"     "10134"
    "Beverages 3/"               "4412"    "4816"    "5101"    "5795"    "6598"     "7024"     "7887"     "9212"     "9913"     "9833"     "8721"     "9263"     "10143"    "10858"    "11248"    "11964"    "12786"    "13493"    "14383"
    "Liquors"                    "2382"    "2726"    "2847"    "3091"    "3438"     "3709"     "4090"     "4512"     "5048"     "5040"     "4787"     "5189"     "5734"     "6023"     "6392"     "6587"     "6774"     "7165"     "7363" 

Составьте продовольственную таблицу импорта в отчете

Создайте mlreportgen.dom.Table объект от еды импортирует данные в tableData переменная. Задайте форматы таблицы.

table = Table(tableData);
table.Style = { ...
    Border("solid"), ...
    RowSep("solid"), ...
    ColSep("solid"), ...
    OuterMargin("5pt","5pt","5pt","5pt")};
table.TableEntriesStyle = {InnerMargin("2pt")};

headerStyle = { ...
    BackgroundColor("LightBlue"), ...
    Bold };

table.row(1).Style = headerStyle;

grps = TableColSpecGroup;
grps.Span = 1;
grps.Style = headerStyle;
table.ColSpecGroups = grps;

Соответствуйте таблице к странице отчета путем вертикального разрезания

Чтобы соответствовать широкой таблице на странице отчета, разделите таблицу вертикально на набор более узких таблиц (срезы), при помощи mlreportgen.utils.TableSlicer объект.

slicer = mlreportgen.utils.TableSlicer(...
    "Table",table, ... 
    "MaxCols",8, ...
    "RepeatCols",1);
slices = slicer.slice();

Добавьте главы для табличных срезов

Создайте главу для каждого табличного среза и добавьте главы в отчет.

for slice = slices
    ch = Chapter();
    ch.Title = strjoin(["Data from" years(slice.StartCol-1)...
        "to" years(slice.EndCol-1)]);
    add(ch,slice.Table);
    add(rpt,ch);
end

Закройте и просмотрите отчет

close(rpt);
rptview(rpt)

Смотрите также

| | | | |

Похожие темы