211 lines
5.3 KiB
C#
211 lines
5.3 KiB
C#
|
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 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 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 style='background-color: rgb(51, 51, 51);'>");
|
|||
|
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 style='background-color: white;'>");
|
|||
|
returnValue.AppendLine("<th 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>");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|