diff options
Diffstat (limited to 'MediaBrowser.Api/Reports/Data/ReportExport.cs')
| -rw-r--r-- | MediaBrowser.Api/Reports/Data/ReportExport.cs | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/MediaBrowser.Api/Reports/Data/ReportExport.cs b/MediaBrowser.Api/Reports/Data/ReportExport.cs new file mode 100644 index 000000000..f313cf252 --- /dev/null +++ b/MediaBrowser.Api/Reports/Data/ReportExport.cs @@ -0,0 +1,212 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MediaBrowser.Api.Reports +{ + /// <summary> A report export. </summary> + public class ReportExport + { + /// <summary> Export to CSV. </summary> + /// <param name="reportResult"> The report result. </param> + /// <returns> A string. </returns> + public string ExportToCsv(ReportResult reportResult) + { + StringBuilder returnValue = new StringBuilder(); + + returnValue.AppendLine(string.Join(";", reportResult.Headers.Select(s => s.Name.Replace(',', ' ')).ToArray())); + + if (reportResult.IsGrouped) + foreach (ReportGroup group in reportResult.Groups) + { + foreach (ReportRow row in reportResult.Rows) + { + returnValue.AppendLine(string.Join(";", row.Columns.Select(s => s.Name.Replace(',', ' ')).ToArray())); + } + } + else + foreach (ReportRow row in reportResult.Rows) + { + returnValue.AppendLine(string.Join(";", row.Columns.Select(s => s.Name.Replace(',', ' ')).ToArray())); + } + + return returnValue.ToString(); + } + + + /// <summary> Export to excel. </summary> + /// <param name="reportResult"> The report result. </param> + /// <returns> A string. </returns> + public string ExportToExcel(ReportResult reportResult) + { + + string style = @"<style type='text/css'> + BODY { + font-family: Arial; + font-size: 12px; + } + + TABLE { + font-family: Arial; + font-size: 12px; + } + + A { + font-family: Arial; + color: #144A86; + font-size: 12px; + cursor: pointer; + text-decoration: none; + font-weight: bold; + } + DIV { + font-family: Arial; + font-size: 12px; + margin-bottom: 0px; + } + P, LI, DIV { + font-size: 12px; + margin-bottom: 0px; + } + + P, UL { + font-size: 12px; + margin-bottom: 6px; + margin-top: 0px; + } + + H1 { + font-size: 18pt; + } + + H2 { + font-weight: bold; + font-size: 14pt; + COLOR: #C0C0C0; + } + + H3 { + font-weight: normal; + font-size: 14pt; + text-indent: +1em; + } + + H4 { + font-size: 10pt; + font-weight: normal; + } + + H5 { + font-size: 10pt; + font-weight: normal; + background: #A9A9A9; + COLOR: white; + display: inline; + } + + H6 { + padding: 2 1 2 5; + font-size: 11px; + font-weight: bold; + text-decoration: none; + margin-bottom: 1px; + } + + UL { + line-height: 1.5em; + list-style-type: disc; + } + + OL { + line-height: 1.5em; + } + + LI { + line-height: 1.5em; + } + + A IMG { + border: 0; + } + + table.gridtable { + color: #333333; + border-width: 0.1pt; + border-color: #666666; + border-collapse: collapse; + } + + table.gridtable th { + border-width: 0.1pt; + padding: 8px; + border-style: solid; + border-color: #666666; + background-color: #dedede; + } + table.gridtable tr { + background-color: #ffffff; + } + table.gridtable td { + border-width: 0.1pt; + padding: 8px; + border-style: solid; + border-color: #666666; + background-color: #ffffff; + } + </style>"; + + string Html = @"<!DOCTYPE html> + <html xmlns='http://www.w3.org/1999/xhtml'> + <head> + <meta http-equiv='X-UA-Compatible' content='IE=8, IE=9, IE=10' /> + <meta charset='utf-8'> + <title>Emby Reports Export</title>"; + Html += "\n" + style + "\n"; + Html += "</head>\n"; + Html += "<body>\n"; + + StringBuilder returnValue = new StringBuilder(); + returnValue.AppendLine("<table class='gridtable'>"); + returnValue.AppendLine("<tr>"); + returnValue.AppendLine(string.Join("", reportResult.Headers.Select(s => string.Format("<th>{0}</th>", s.Name)).ToArray())); + returnValue.AppendLine("</tr>"); + if (reportResult.IsGrouped) + foreach (ReportGroup group in reportResult.Groups) + { + returnValue.AppendLine("<tr>"); + returnValue.AppendLine("<th scope='rowgroup' colspan='" + reportResult.Headers.Count + "'>" + (string.IsNullOrEmpty(group.Name) ? " " : group.Name) + "</th>"); + returnValue.AppendLine("</tr>"); + foreach (ReportRow row in group.Rows) + { + ExportToExcelRow(reportResult, returnValue, row); + } + returnValue.AppendLine("<tr>"); + returnValue.AppendLine("<th style='background-color: #ffffff;' scope='rowgroup' colspan='" + reportResult.Headers.Count + "'>" + " " + "</th>"); + returnValue.AppendLine("</tr>"); + } + + else + foreach (ReportRow row in reportResult.Rows) + { + ExportToExcelRow(reportResult, returnValue, row); + } + returnValue.AppendLine("</table>"); + + Html += returnValue.ToString(); + Html += "</body>"; + Html += "</html>"; + return Html; + } + private static void ExportToExcelRow(ReportResult reportResult, + StringBuilder returnValue, + ReportRow row) + { + returnValue.AppendLine("<tr>"); + returnValue.AppendLine(string.Join("", row.Columns.Select(s => string.Format("<td>{0}</td>", s.Name)).ToArray())); + returnValue.AppendLine("</tr>"); + } + } + +} |
