diff --git a/.gitignore b/.gitignore index 116bae269..06bf9f7c0 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ bin/ !/Examples.GridWeb/CSharp/bin/ !/Examples.GridWeb/VisualBasic/bin/ * Out* -*_out_* * out* *.ldb Thumbs.db @@ -31,4 +30,9 @@ Plugins/Aspose_Cells_NET_for_PHP/composer.lock Plugins/Aspose_Cells_NET_for_PHP.zip .DS_Store - + +Examples.GridWeb/.vs +/Examples_GridWeb/GridWeb.Net7/Controllers/*.bak +/Examples_GridWeb/GridWeb.Net7/Views/*.bak +/Examples_GridWeb/GridWeb.Net7/Views/Shared/*.bak +/Examples_GridWeb/GridWeb.Net7/wwwroot/js/acw_client/*.bak diff --git a/Demos/.gitignore b/Demos/.gitignore new file mode 100644 index 000000000..e41243f22 --- /dev/null +++ b/Demos/.gitignore @@ -0,0 +1,356 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates +*.csproj.user + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ +/Aspose.App/aspose.app.sln.DotSettings.user +.vshistory/ +/Aspose.App/src/Aspose.App.API/App_Data/XmlDocument.xml +packages +idea +/.idea \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Aspose.Cells.Annotation.csproj b/Demos/Apps/Aspose.Cells.Annotation/Aspose.Cells.Annotation.csproj new file mode 100644 index 000000000..e5284bffe --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Aspose.Cells.Annotation.csproj @@ -0,0 +1,36 @@ + + + + netcoreapp3.1 + false + a54a5ba3-95eb-4835-a9e7-4054a9511b87 + Linux + ..\.. + + + + 0 + + + + + + + + + + + + + + ..\Aspose.Cells.Common\GridJs\Aspose.Cells.dll + + + + + + + + + + diff --git a/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationApiController.cs b/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationApiController.cs new file mode 100644 index 000000000..6b5e89656 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationApiController.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Annotation.Controllers +{ + public class AnnotationApiController : CellsApiControllerBase + { + private const string AppName = "Annotation"; + + public AnnotationApiController(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + } + + /// + /// Remove method to remove annotation from file based on product name + /// + [HttpPost] + public async Task Remove() + { + var sessionId = Guid.NewGuid().ToString(); + + try + { + var taskUpload = Task.Run(() => UploadWorkbooks(sessionId, AppName)); + taskUpload.Wait(Configuration.MillisecondsTimeout); + if (!taskUpload.IsCompleted) + { + Logger.LogError( + "{AppName} UploadWorkbooks=>{SessionId}=>{Timeout}", + AppName, + sessionId, + Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + var docs = taskUpload.Result; + if (docs == null) + return PasswordProtectedResponse; + if (docs.Length == 0 || docs.Length > MaximumUploadFiles) + return MaximumFileLimitsResponse; + + SetDefaultOptions(docs); + Opts.AppName = "Annotation"; + Opts.MethodName = "Remove"; + Opts.ZipFileName = "Removed Annotations"; + Opts.FolderName = sessionId; + + if (Opts.CreateZip) + Opts.ResultFileName = $"{Opts.ZipFileName}.zip"; + + await Storage.UpdateStatus(Common.Models.Response.Process(Opts.FolderName, Opts.ResultFileName)); + + var stopWatch = new Stopwatch(); + stopWatch.Start(); + Logger.LogWarning( + "AppName = {AppName} | Filename = {Filename} | Start", + AppName, + string.Join(",", docs.Select(t => t.FileName))); + + var response = await ProcessCellsBlock(docs); + + stopWatch.Stop(); + Logger.LogWarning( + "AppName = {AppName} | Filename = {Filename} | Cost Seconds = {Seconds}ms", + AppName, + string.Join(",", docs.Select(t => t.FileName)), + stopWatch.Elapsed.TotalSeconds); + + return response; + } + catch (Exception e) + { + var exception = e.InnerException ?? e; + var statusCode = 500; + if (exception is CellsException {Code: ExceptionType.IncorrectPassword}) + { + statusCode = 403; + } + + if (exception is CellsException {Code: ExceptionType.FileFormat}) + { + statusCode = 415; + } + + Logger.LogError("AppName = {AppName} | Message = {Message}", AppName, exception.Message); + + return new Response + { + StatusCode = statusCode, + Status = exception.Message, + FolderName = sessionId, + Text = AppName + }; + } + } + + private async Task ProcessCellsBlock(DocumentInfo[] docs) + { + var streams = new Dictionary(); + var (_, outFilePath) = BeforeAction(); + var catchException = false; + var exception = new Exception(); + var memoryStream = new MemoryStream(); + + foreach (var doc in docs) + { + try + { + var wb = doc.Workbook; + + var sb = new StringBuilder(); + + foreach (var ws in wb.Worksheets) + { + foreach (var cm in ws.Comments) + { + var cellName = CellsHelper.CellIndexToName(cm.Row, cm.Column); + + var str = $"Sheet Name: \"{ws.Name}\", Cell Name: {cellName}, Comment Note: \r\n\"{cm.Note}\""; + + sb.AppendLine(str); + sb.AppendLine(); + } + } + + var requestWriter = new StreamWriter(memoryStream); + await requestWriter.WriteAsync(sb.ToString()); + await requestWriter.FlushAsync(); + + foreach (var ws in wb.Worksheets) + { + ws.Comments.Clear(); + } + + var dictionary = SaveDocument(doc, GetSaveFormatTypeByFilename(doc.FileName)); + foreach (var (key, value) in dictionary) + { + streams.Add(key, value); + } + } + catch (Exception e) + { + catchException = true; + + foreach (var (_, stream) in streams) + { + stream.Close(); + } + + await UploadErrorFiles(docs, AppName); + + exception = e.InnerException ?? e; + Logger.LogError("{Message}", exception.Message); + break; + } + } + + if (memoryStream.Length > 0) + { + streams.Add("comments.txt", memoryStream); + } + + if (!catchException) + return await AfterAction(outFilePath, streams); + + await Storage.UpdateStatus(Common.Models.Response.Error(Opts.FolderName, Opts.ResultFileName, exception.Message)); + throw exception; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationCloudApiController.cs b/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationCloudApiController.cs new file mode 100644 index 000000000..9d0de9c8e --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationCloudApiController.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Aspose.Cells.Common.CloudHelper; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Conversion.Controllers +{ + public class AnnotationCloudApiController : CellsCloudApiControllerBase + { + private const string AppName = "Annotation"; + public AnnotationCloudApiController(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + } + + [HttpPost] + public async Task Remove() + { + + return await RunBusinessCode(async (IDictionary docs, string sessionId,string format ) => + { + var streams = new Dictionary(); + var (_, outFilePath) = BeforeAction(); + var catchException = false; + var exception = new Exception(); + Opts.AppName = AppName; + Opts.MethodName = "Remove"; + Opts.ZipFileName = "Removed Annotations"; + + try + { + CellsCloudClient cells = new CellsCloudClient(); + var value =cells.ClearObjects(docs, "comment"); + foreach( CellsCloudFileInfo cellsCloudFileInfo in value.Result.Files) + { + streams.Add(cellsCloudFileInfo.Filename, new MemoryStream(System.Convert.FromBase64String(cellsCloudFileInfo.FileContent))); + } + } + catch (Exception e) + { + catchException = true; + + foreach (var (_, stream) in streams) + { + stream.Close(); + } + + await UploadErrorFiles(GetDocumentInfos(docs, sessionId), AppName); + + exception = e.InnerException ?? e; + Logger.LogError("{Message}", exception.Message); + } + + if (!catchException) + return await AfterAction(outFilePath, streams); + + await Storage.UpdateStatus(Common.Models.Response.Error(Opts.FolderName, Opts.ResultFileName, exception.Message)); + throw exception; + }, AppName, "txt"); + + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationController.cs b/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationController.cs new file mode 100644 index 000000000..58f7e2c8f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Controllers/AnnotationController.cs @@ -0,0 +1,23 @@ +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Annotation.Controllers +{ + public class AnnotationController : UIControllerBase + { + public AnnotationController(IWebHostEnvironment env, ILogger logger) : base(env, logger) + { + } + + public ActionResult Annotation() + { + var model = new ViewModel(this, "Annotation"); + if (model.RedirectToMainApp) + return Redirect("/cells/" + model.AppName.ToLower()); + return View("~/Pages/Annotation.cshtml", model); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Pages/Annotation.cshtml b/Demos/Apps/Aspose.Cells.Annotation/Pages/Annotation.cshtml new file mode 100644 index 000000000..14dd11f6b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Pages/Annotation.cshtml @@ -0,0 +1,21 @@ +@model Aspose.Cells.Common.Models.ViewModel + +@{ + Layout = "~/Pages/Shared/Layout.cshtml"; +} +@{ + ViewBag.Title = "Annotation"; +} + +@await Html.PartialAsync("Main") +@await Html.PartialAsync("FooterProduct") + +@section scripts { + + +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Program.cs b/Demos/Apps/Aspose.Cells.Annotation/Program.cs new file mode 100644 index 000000000..b05f02235 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Program.cs @@ -0,0 +1,69 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System; +using System.Globalization; +using Aspose.Cells.Common.Config; +using Microsoft.Extensions.DependencyInjection; +using Serilog; +using Serilog.Formatting.Elasticsearch; +using Serilog.Sinks.Elasticsearch; +using ILogger = Microsoft.Extensions.Logging.ILogger; + +namespace Aspose.Cells.Annotation +{ + public class Program + { + public static void Main(string[] args) + { + var appId = "Cells " + Startup.AppName; + ILogger logger = null; + try + { + var host = CreateHostBuilder(args).Build(); + logger = host.Services.GetService>(); + logger.ApplicationStarting(appId); + logger.ApplicationVersion(DateTime.Now.ToString(CultureInfo.InvariantCulture)); + logger.ApplicationEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); + host.Run(); + logger.ApplicationShutdown(appId); + } + catch (Exception ex) + { + logger.ApplicationTerminatedException(appId, ex); + } + finally + { + Log.CloseAndFlush(); + } + } + + private static IHostBuilder CreateHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).UseSerilog((context, loggerConfiguration) => + { + loggerConfiguration = loggerConfiguration.ReadFrom.Configuration(context.Configuration); + loggerConfiguration.WriteTo.Console(); + if (context.HostingEnvironment.IsStaging() || context.HostingEnvironment.IsProduction()) + { + loggerConfiguration.MinimumLevel.Warning().WriteTo.Elasticsearch( + new ElasticsearchSinkOptions(new Uri(Environment.GetEnvironmentVariable("ES_URL") ?? string.Empty)) + { + IndexFormat = "cells-" + Startup.AppName + "-app-{0:yyyy.MM.dd}", + AutoRegisterTemplate = true, + CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true), + FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate), + EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog | + EmitEventFailureHandling.RaiseCallback | + EmitEventFailureHandling.ThrowException, + ModifyConnectionSettings = x => x.BasicAuthentication( + Environment.GetEnvironmentVariable("ES_LOGIN"), + Environment.GetEnvironmentVariable("ES_PASSWORD") + ), + } + ); + } + }).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Properties/launchSettings.json b/Demos/Apps/Aspose.Cells.Annotation/Properties/launchSettings.json new file mode 100644 index 000000000..1042f19e4 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Properties/launchSettings.json @@ -0,0 +1,51 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:41576", + "sslPort": 44362 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + } + }, + "Aspose.Cells.Annotation": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation", + "FontFolderPath": "c:\\Windows\\Fonts", + "MailServerPort": "587", + "MailServer": "your email server", + "MailServerUserId": "your email account", + "MailServerPassword": "your password", + "SmtpTimeOut": "6000000", + "ForumKey": "xxx", + "ForumUrl": "https://forum-qa.aspose.com/port/import.json", + "ForumCategoryId": "7", + "RegionEndpoint": "your s3 RegionEndpoint", + "Bucket": "your s3 Bucket", + "AccessKeyId": "your s3 AccessKeyId", + "SecretAccessKey": "your s3 SecretAccessKey", + "ASPOSE_CLOUD_APP": "false" + }, + "applicationUrl": "http://localhost:5000", + "launchUrl": "http://localhost:5000/cells/annotation" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true, + "useSSL": true + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/Startup.cs b/Demos/Apps/Aspose.Cells.Annotation/Startup.cs new file mode 100644 index 000000000..88f1e146b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/Startup.cs @@ -0,0 +1,160 @@ +using System.IO; +using Aspose.Cells.Annotation.Controllers; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Elastic.Apm.AspNetCore; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Serilog; + +namespace Aspose.Cells.Annotation +{ + public class Startup + { + private static readonly AppNames appName = AppNames.Annotation; + + internal static string AppName => appName.ToString(); + + public Startup(IConfiguration configuration) + { + AppConfiguration = configuration; + Configuration.IsProduction = configuration["ASPNETCORE_ENVIRONMENT"] == "Production"; + Configuration.FontFolderPath = configuration["FontFolderPath"]; + + Configuration.RegionEndpoint = configuration["RegionEndpoint"]; + Configuration.Bucket = configuration["Bucket"]; + Configuration.AccessKeyId = configuration["AccessKeyId"]; + Configuration.SecretAccessKey = configuration["SecretAccessKey"]; + + Configuration.MailServerPort = int.Parse(configuration["MailServerPort"]); + Configuration.MailServer = configuration["MailServer"]; + Configuration.MailServerUserId = configuration["MailServerUserId"]; + Configuration.MailServerUserPassword = configuration["MailServerPassword"]; + Configuration.MailServerTimeOut = int.Parse(configuration["SmtpTimeOut"]); + + Configuration.ForumKey = configuration["ForumKey"]; + Configuration.ForumUrl = configuration["ForumUrl"]; + Configuration.ForumCategoryId = configuration["ForumCategoryId"]; + Configuration.IsAsposeCloudApp =string.Compare(configuration["ASPOSE_CLOUD_APP"] ,"true",true)==0; + if (Configuration.IsAsposeCloudApp) + { + Configuration.CellsCloudBaseUrl = configuration["CellsCloudBaseUrl"]; + Configuration.CellsCloudClientId = configuration["CellsCloudClientId"]; + Configuration.CellsCloudClientSecret = configuration["CellsCloudClientSecret"]; + Configuration.CellsCloudAPIMethod = configuration["CellsCloudAPIMethod"]; + Configuration.CellsCloudAPIMethodURI = configuration["CellsCloudAPIMethodURI"]; + Configuration.CellsCloudAPIReferenceURI = configuration["CellsCloudAPIReferenceURI"]; + Configuration.CellsCloudAPIMethodDocument = configuration["CellsCloudAPIMethodDocument"]; + } + + } + + private IConfiguration AppConfiguration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddScoped(); + + Common.Models.License.SetCellsLicense(); + FontConfigs.SetFontFolder(Configuration.FontFolderPath, true); + + services.AddSharedConfigParams(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger logger) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + app.UseHsts(); + app.UseElasticApm(AppConfiguration); + } + + if (!env.ContentRootPath.Contains("Aspose.Cells.Common.Tests") && env.IsProduction()) + { + app.UseSerilogRequestLogging(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseSession(); + + string staticResources; + logger.LogInformation("ContentRootPath: {ContentRootPath}", env.ContentRootPath); + if (env.ContentRootPath.EndsWith("app")) + //for windows docker + staticResources = Path.GetFullPath("./resources"); + else if (env.ContentRootPath.EndsWith("Common")) + //for Common test execute + staticResources = Path.Combine(env.ContentRootPath, "../apps/Aspose.Cells.Common/resources"); + else if (env.ContentRootPath.Contains("Aspose.Cells.Common.Tests")) + staticResources = Path.Combine(env.ContentRootPath, "../../../../../apps/Aspose.Cells.Common/resources"); + else + //for this app runtime + staticResources = Path.GetFullPath("../Aspose.Cells.Common/resources"); + + var options = new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(staticResources), + RequestPath = "/cells/" + appName.ToRouteName() + "/content" + }; + //This is required for asp-append-version + env.WebRootFileProvider = new CompositeFileWithOptionsProvider(env.WebRootFileProvider, options); + app.UseStaticFiles(options); + + app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Healthy"); }); }); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute(AppName, "cells/" + AppName + "/{fileformat}", + new {controller = AppName, action = AppName, fileformat = ""}); + }); + app.UseEndpoints(endpoints => + { + if (Configuration.IsAsposeCloudApp) + { + endpoints.MapControllerRoute("AnnotationCloudApi", "cells/" + AppName + "/api/AnnotationApi/{action}", + new { controller = "AnnotationCloudApi", action = AppName }); + } + else + { + endpoints.MapControllerRoute("AnnotationApi", "cells/" + AppName + "/api/AnnotationApi/{action}", + new { controller = "AnnotationApi", action = AppName }); + } + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Download", "cells/" + AppName + "/api/{action}/{id}", + new {controller = "Download", action = "Download", id = ""}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Feedback", "cells/" + AppName + "/sendfeedback", + new {controller = AppName, action = "SendFeedback"}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Feedback", "cells/" + AppName + "/sendemail", + new {controller = AppName, action = "SendEmail"}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Report", "cells/" + AppName + "/api/Report/Error", + new {controller = "Report", action = "Error"}); + }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Annotation/appsettings.Development.json b/Demos/Apps/Aspose.Cells.Annotation/appsettings.Development.json new file mode 100644 index 000000000..8983e0fc1 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Annotation/appsettings.json b/Demos/Apps/Aspose.Cells.Annotation/appsettings.json new file mode 100644 index 000000000..d9d9a9bff --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Annotation/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/Demos/Apps/Aspose.Cells.Assembly/Aspose.Cells.Assembly.csproj b/Demos/Apps/Aspose.Cells.Assembly/Aspose.Cells.Assembly.csproj new file mode 100644 index 000000000..c9859bd71 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Aspose.Cells.Assembly.csproj @@ -0,0 +1,42 @@ + + + + netcoreapp3.1 + false + b00b98ca-f185-4852-b3c7-c2adb7c57a8b + Linux + ..\.. + + + + 0 + + + + + + + + + + + + + + ..\Aspose.Cells.Common\GridJs\Aspose.Cells.dll + + + + + + Never + true + Never + + + + + + + + diff --git a/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyApiController.cs b/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyApiController.cs new file mode 100644 index 000000000..9ec80f10f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyApiController.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Assembly.Controllers +{ + public class AssemblyApiController : CellsApiControllerBase + { + private const string AppName = "Assembly"; + + public AssemblyApiController(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + } + + [HttpPost] + public async Task Assemble(string datasourceName) + { + var sessionId = Guid.NewGuid().ToString(); + + try + { + var taskUpload = UploadWorkbooks(sessionId, AppName); + taskUpload.Wait(Configuration.MillisecondsTimeout); + if (!taskUpload.IsCompleted) + { + Logger.LogError("{AppName} UploadWorkBooks=>{SessionId}=>{ProcessingTimeout}", + AppName, sessionId, Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + var docs = taskUpload.Result; + if (docs == null) + return PasswordProtectedResponse; + if (docs.Length == 0 || docs.Length > MaximumUploadFiles) + return MaximumFileLimitsResponse; + + SetDefaultOptions(docs); + Opts.AppName = "Assembly"; + Opts.MethodName = "Assemble"; + Opts.ZipFileName = "Assembled Result"; + Opts.FolderName = sessionId; + Opts.OutputType = ".xlsx"; + Opts.ResultFileName = "Assembled Result.xlsx"; + Opts.CreateZip = false; + + await Storage.UpdateStatus(Common.Models.Response.Process(Opts.FolderName, Opts.ResultFileName)); + + var stopWatch = new Stopwatch(); + stopWatch.Start(); + Logger.LogWarning("AppName = {AppName} | Filename = {Filename} | Start", + AppName, string.Join(",", docs.Select(t => t.FileName))); + + var taskProcessCellsBlock = ProcessCellsBlock(docs, datasourceName); + taskProcessCellsBlock.Wait(Configuration.MillisecondsTimeout); + if (!taskProcessCellsBlock.IsCompleted) + { + Logger.LogError("{AppName} ProcessCellsBlock=>{SessionId}=>{ProcessingTimeout}", + AppName, sessionId, Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + stopWatch.Stop(); + Logger.LogWarning("AppName = {AppName} | Filename = {Filename} | Cost Seconds = {Seconds}s", + AppName, string.Join(",", docs.Select(t => t.FileName)), stopWatch.Elapsed.TotalSeconds); + + if (!taskProcessCellsBlock.IsFaulted && taskProcessCellsBlock.Exception == null) + return taskProcessCellsBlock.Result; + + return Common.Models.Response.Error(Opts.FolderName, Opts.ResultFileName, taskProcessCellsBlock.Exception?.Message ?? "500"); + } + catch (Exception e) + { + var exception = e.InnerException ?? e; + var statusCode = 500; + if (exception is CellsException {Code: ExceptionType.IncorrectPassword}) + { + statusCode = 403; + } + + if (exception is CellsException {Code: ExceptionType.FileFormat}) + { + statusCode = 415; + } + + Logger.LogError("AppName = {AppName} | Method = {Method} | Message = {Message}", + AppName, "Assemble", exception.Message); + + return new Response + { + StatusCode = statusCode, + Status = exception.Message, + FolderName = sessionId, + Text = AppName + }; + } + } + + private async Task ProcessCellsBlock(DocumentInfo[] docs, string datasourceName) + { + var streams = new Dictionary(); + var (_, outFilePath) = BeforeAction(); + var catchException = false; + var exception = new Exception(); + + try + { + var wbData = docs[0].Workbook; + + var wsData = wbData.Worksheets[0]; + + var totalRows = wsData.Cells.LastCell.Row + 1; + var totalColumns = wsData.Cells.LastCell.Column + 1; + + var dt = wsData.Cells.ExportDataTable(0, 0, totalRows, totalColumns, true); + dt.TableName = datasourceName; + + var wbTemplate = docs[1].Workbook; + + var wbd = new WorkbookDesigner(wbTemplate); + wbd.SetDataSource(dt); + wbd.Process(); + + var memoryStream = new MemoryStream(); + wbTemplate.Save(memoryStream, SaveFormat.Xlsx); + + streams.Add(Opts.ResultFileName, memoryStream); + } + catch (Exception e) + { + catchException = true; + + foreach (var (_, stream) in streams) + { + stream.Close(); + } + + await UploadErrorFiles(docs, AppName); + + exception = e.InnerException ?? e; + } + + if (!catchException) + return await AfterAction(outFilePath, streams); + + await Storage.UpdateStatus(Common.Models.Response.Error(Opts.FolderName, Opts.ResultFileName, exception.Message)); + throw exception; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyCloudApiController.cs b/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyCloudApiController.cs new file mode 100644 index 000000000..8fe24d325 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyCloudApiController.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Aspose.Cells.Common.CloudHelper; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Conversion.Controllers +{ + public class AssemblyCloudApiController : CellsCloudApiControllerBase + { + private const string AppName = "Assembly"; + public AssemblyCloudApiController(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + } + + [HttpPost] + public async Task Assemble(string datasourceName) + { + + return await RunBusinessCode(async (IDictionary docs, string sessionId,string datasourceName) => + { + var streams = new Dictionary(); + var (_, outFilePath) = BeforeAction(); + var catchException = false; + var exception = new Exception(); + Opts.AppName = AppName; + Opts.AppName = "Assembly"; + Opts.MethodName = "Assemble"; + Opts.ZipFileName = "Assembled Result"; + Opts.FolderName = sessionId; + Opts.OutputType = ".xlsx"; + Opts.ResultFileName = "Assembled Result.xlsx"; + Opts.CreateZip = false; + + try + { + CellsCloudClient cells = new CellsCloudClient(); + var value =cells.Assembly(docs, datasourceName); + foreach( CellsCloudFileInfo cellsCloudFileInfo in value.Result.Files) + { + streams.Add(cellsCloudFileInfo.Filename, new MemoryStream(System.Convert.FromBase64String(cellsCloudFileInfo.FileContent))); + } + } + catch (Exception e) + { + catchException = true; + + foreach (var (_, stream) in streams) + { + stream.Close(); + } + + await UploadErrorFiles(GetDocumentInfos(docs, sessionId), AppName); + + exception = e.InnerException ?? e; + Logger.LogError("{Message}", exception.Message); + } + + if (!catchException) + return await AfterAction(outFilePath, streams); + + await Storage.UpdateStatus(Common.Models.Response.Error(Opts.FolderName, Opts.ResultFileName, exception.Message)); + throw exception; + }, AppName, datasourceName); + + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyController.cs b/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyController.cs new file mode 100644 index 000000000..021c6d868 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Controllers/AssemblyController.cs @@ -0,0 +1,26 @@ +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Assembly.Controllers +{ + public class AssemblyController : UIControllerBase + { + public AssemblyController(IWebHostEnvironment env, ILogger logger) : base(env, logger) + { + } + + public ActionResult Assembly() + { + var model = new ViewModel(this, "Assembly") + { + ShowViewerButton = false + }; + if (model.RedirectToMainApp) + return Redirect("/cells/" + model.AppName.ToLower()); + return View("~/Pages/Assembly.cshtml", model); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/Pages/Assembly.cshtml b/Demos/Apps/Aspose.Cells.Assembly/Pages/Assembly.cshtml new file mode 100644 index 000000000..f6de254d7 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Pages/Assembly.cshtml @@ -0,0 +1,23 @@ +@model Aspose.Cells.Common.Models.ViewModel + +@{ + Layout = "~/Pages/Shared/Layout.cshtml"; +} +@{ + ViewBag.Title = "Assembly"; +} + +@await Html.PartialAsync("MainAssembly") +@await Html.PartialAsync("FooterProduct") + +@section scripts { + +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/Program.cs b/Demos/Apps/Aspose.Cells.Assembly/Program.cs new file mode 100644 index 000000000..0f9eb7da7 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Program.cs @@ -0,0 +1,69 @@ +using System; +using System.Globalization; +using Aspose.Cells.Common.Config; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Serilog; +using Serilog.Formatting.Elasticsearch; +using Serilog.Sinks.Elasticsearch; +using ILogger = Microsoft.Extensions.Logging.ILogger; + +namespace Aspose.Cells.Assembly +{ + public class Program + { + public static void Main(string[] args) + { + var appId = "Cells " + Startup.AppName; + ILogger logger = null; + try + { + var host = CreateHostBuilder(args).Build(); + logger = host.Services.GetService>(); + logger.ApplicationStarting(appId); + logger.ApplicationVersion(DateTime.Now.ToString(CultureInfo.InvariantCulture)); + logger.ApplicationEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); + host.Run(); + logger.ApplicationShutdown(appId); + } + catch (Exception ex) + { + logger.ApplicationTerminatedException(appId, ex); + } + finally + { + Log.CloseAndFlush(); + } + } + + private static IHostBuilder CreateHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).UseSerilog((context, loggerConfiguration) => + { + loggerConfiguration = loggerConfiguration.ReadFrom.Configuration(context.Configuration); + loggerConfiguration.WriteTo.Console(); + if (context.HostingEnvironment.IsStaging() || context.HostingEnvironment.IsProduction()) + { + loggerConfiguration.MinimumLevel.Warning().WriteTo.Elasticsearch( + new ElasticsearchSinkOptions(new Uri(Environment.GetEnvironmentVariable("ES_URL") ?? string.Empty)) + { + IndexFormat = "cells-" + Startup.AppName + "-app-{0:yyyy.MM.dd}", + AutoRegisterTemplate = true, + CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true), + FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate), + EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog | + EmitEventFailureHandling.RaiseCallback | + EmitEventFailureHandling.ThrowException, + ModifyConnectionSettings = x => x.BasicAuthentication( + Environment.GetEnvironmentVariable("ES_LOGIN"), + Environment.GetEnvironmentVariable("ES_PASSWORD") + ), + } + ); + } + }).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/Properties/launchSettings.json b/Demos/Apps/Aspose.Cells.Assembly/Properties/launchSettings.json new file mode 100644 index 000000000..41d097023 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Properties/launchSettings.json @@ -0,0 +1,51 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:41576", + "sslPort": 44362 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + } + }, + "Aspose.Cells.Assembly": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation", + "FontFolderPath": "c:\\Windows\\Fonts", + "MailServerPort": "587", + "MailServer": "your email server", + "MailServerUserId": "your email account", + "MailServerPassword": "your password", + "SmtpTimeOut": "6000000", + "ForumKey": "xxx", + "ForumUrl": "https://forum-qa.aspose.com/port/import.json", + "ForumCategoryId": "7", + "RegionEndpoint": "your s3 RegionEndpoint", + "Bucket": "your s3 Bucket", + "AccessKeyId": "your s3 AccessKeyId", + "SecretAccessKey": "your s3 SecretAccessKey", + "ASPOSE_CLOUD_APP": "false" + }, + "applicationUrl": "http://localhost:5000", + "launchUrl": "http://localhost:5000/cells/assembly" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true, + "useSSL": true + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/Startup.cs b/Demos/Apps/Aspose.Cells.Assembly/Startup.cs new file mode 100644 index 000000000..4d0207135 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/Startup.cs @@ -0,0 +1,159 @@ +using System.IO; +using Aspose.Cells.Assembly.Controllers; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Elastic.Apm.AspNetCore; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Serilog; + +namespace Aspose.Cells.Assembly +{ + public class Startup + { + private static readonly AppNames appName = AppNames.Assembly; + + internal static string AppName => appName.ToString(); + + public Startup(IConfiguration configuration) + { + AppConfiguration = configuration; + Configuration.IsProduction = configuration["ASPNETCORE_ENVIRONMENT"] == "Production"; + Configuration.FontFolderPath = configuration["FontFolderPath"]; + + Configuration.RegionEndpoint = configuration["RegionEndpoint"]; + Configuration.Bucket = configuration["Bucket"]; + Configuration.AccessKeyId = configuration["AccessKeyId"]; + Configuration.SecretAccessKey = configuration["SecretAccessKey"]; + + Configuration.MailServerPort = int.Parse(configuration["MailServerPort"]); + Configuration.MailServer = configuration["MailServer"]; + Configuration.MailServerUserId = configuration["MailServerUserId"]; + Configuration.MailServerUserPassword = configuration["MailServerPassword"]; + Configuration.MailServerTimeOut = int.Parse(configuration["SmtpTimeOut"]); + + Configuration.ForumKey = configuration["ForumKey"]; + Configuration.ForumUrl = configuration["ForumUrl"]; + Configuration.ForumCategoryId = configuration["ForumCategoryId"]; + Configuration.IsAsposeCloudApp = string.Compare(configuration["ASPOSE_CLOUD_APP"], "true", true) == 0; + if (Configuration.IsAsposeCloudApp) + { + Configuration.CellsCloudBaseUrl = configuration["CellsCloudBaseUrl"]; + Configuration.CellsCloudClientId = configuration["CellsCloudClientId"]; + Configuration.CellsCloudClientSecret = configuration["CellsCloudClientSecret"]; + Configuration.CellsCloudAPIMethod = configuration["CellsCloudAPIMethod"]; + Configuration.CellsCloudAPIMethodURI = configuration["CellsCloudAPIMethodURI"]; + Configuration.CellsCloudAPIReferenceURI = configuration["CellsCloudAPIReferenceURI"]; + Configuration.CellsCloudAPIMethodDocument = configuration["CellsCloudAPIMethodDocument"]; + } + } + + private IConfiguration AppConfiguration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddScoped(); + + Common.Models.License.SetCellsLicense(); + FontConfigs.SetFontFolder(Configuration.FontFolderPath, true); + + services.AddSharedConfigParams(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger logger) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + app.UseHsts(); + app.UseElasticApm(AppConfiguration); + } + + if (!env.ContentRootPath.Contains("Aspose.Cells.Common.Tests") && env.IsProduction()) + { + app.UseSerilogRequestLogging(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseSession(); + + string staticResources; + logger.LogInformation("ContentRootPath: {ContentRootPath}", env.ContentRootPath); + if (env.ContentRootPath.EndsWith("app")) + //for windows docker + staticResources = Path.GetFullPath("./resources"); + else if (env.ContentRootPath.EndsWith("Common")) + //for Common test execute + staticResources = Path.Combine(env.ContentRootPath, "../apps/Aspose.Cells.Common/resources"); + else if (env.ContentRootPath.Contains("Aspose.Cells.Common.Tests")) + staticResources = Path.Combine(env.ContentRootPath, "../../../../../apps/Aspose.Cells.Common/resources"); + else + //for this app runtime + staticResources = Path.GetFullPath("../Aspose.Cells.Common/resources"); + + var options = new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(staticResources), + RequestPath = "/cells/" + appName.ToRouteName() + "/content" + }; + //This is required for asp-append-version + env.WebRootFileProvider = new CompositeFileWithOptionsProvider(env.WebRootFileProvider, options); + app.UseStaticFiles(options); + + app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Healthy"); }); }); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute(AppName, "cells/" + AppName + "/{fileformat}", + new {controller = AppName, action = AppName, fileformat = ""}); + }); + app.UseEndpoints(endpoints => + { + if (Configuration.IsAsposeCloudApp) + { + endpoints.MapControllerRoute("AssemblyCloudApi", "cells/" + AppName + "/api/AssemblyApi/{action}", + new { controller = "AssemblyCloudApi", action = AppName }); + } + else + { + endpoints.MapControllerRoute("AssemblyApi", "cells/" + AppName + "/api/AssemblyApi/{action}", + new { controller = "AssemblyApi", action = AppName }); + } + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Download", "cells/" + AppName + "/api/{action}/{id}", + new {controller = "Download", action = "Download", id = ""}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Feedback", "cells/" + AppName + "/sendfeedback", + new {controller = AppName, action = "SendFeedback"}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Feedback", "cells/" + AppName + "/sendemail", + new {controller = AppName, action = "SendEmail"}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Report", "cells/" + AppName + "/api/Report/Error", + new {controller = "Report", action = "Error"}); + }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Assembly/appsettings.Development.json b/Demos/Apps/Aspose.Cells.Assembly/appsettings.Development.json new file mode 100644 index 000000000..51737579e --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/appsettings.Development.json @@ -0,0 +1,10 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Assembly/appsettings.json b/Demos/Apps/Aspose.Cells.Assembly/appsettings.json new file mode 100644 index 000000000..d9d9a9bff --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Assembly/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/Demos/Apps/Aspose.Cells.Chart/Aspose.Cells.Chart.csproj b/Demos/Apps/Aspose.Cells.Chart/Aspose.Cells.Chart.csproj new file mode 100644 index 000000000..594a7e5ef --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Aspose.Cells.Chart.csproj @@ -0,0 +1,52 @@ + + + + netcoreapp3.1 + e8322ea6-862f-4b82-adae-45823387c048 + Windows + ..\.. + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\Aspose.Cells.Common\GridJs\Aspose.Cells.dll + + + + + + Never + true + Never + + + + + + diff --git a/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartApiController.cs b/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartApiController.cs new file mode 100644 index 000000000..7617ed68a --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartApiController.cs @@ -0,0 +1,318 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Threading.Tasks; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Aspose.Cells.Drawing; +using Aspose.Cells.Rendering; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; + +namespace Aspose.Cells.Chart.Controllers +{ + public class ChartApiController : CellsApiControllerBase + { + private const string AppName = "Chart"; + + public ChartApiController(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + } + + [HttpPost] + [ActionName("Download")] + public async Task Download([FromBody] JObject obj) + { + var charts = obj["charts"].ToObject>(); + var outputType = Convert.ToString(obj["outputType"]); + if (charts == null || outputType == null) + { + return new Response + { + Status = "Save failed, please try again", + StatusCode = 500 + }; + } + + string outfileName; + var folderName = Guid.NewGuid().ToString(); + if (outputType is "PDF") + { + var index = 0; + var workbook = new Workbook(); + + foreach (var chart in charts) + { + var upperLeftRow = workbook.Worksheets[0].Pictures.Count > 0 ? workbook.Worksheets[0].Pictures[index].LowerRightRow : index; + var imgPath = $"{Configuration.ConvertFolder}/{chart.ImgFolderName}/{chart.ImgFileName}"; + var stream = await Storage.Download(imgPath); + index = workbook.Worksheets[0].Pictures.Add(upperLeftRow, 0, stream); + } + + outfileName = $"{Configuration.ConvertFolder}/{folderName}/charts.pdf"; + await using var memoryStream = new MemoryStream(); + workbook.Save(memoryStream, SaveFormat.Pdf); + memoryStream.Seek(0, SeekOrigin.Begin); + await Storage.Upload(outfileName, memoryStream, new AwsMetaInfo + { + OriginalFileName = Path.GetFileName(outfileName), + Title = Path.GetFileName(outfileName) + }); + } + else + { + var streams = new Dictionary(); + foreach (var chart in charts) + { + var imgPath = $"{Configuration.ConvertFolder}/{chart.ImgFolderName}/{chart.ImgFileName}"; + var stream = await Storage.Download(imgPath); + + var filename = $"{Path.GetFileNameWithoutExtension(imgPath)}.{outputType.ToLower()}"; + var ms = new MemoryStream(); + switch (outputType) + { + case "PNG": + { + await stream.CopyToAsync(ms); + break; + } + case "JPG": + case "BMP": + case "TIFF": + { + using var bitmap = new Bitmap(stream); + bitmap.Save(ms, _imageFormat(outputType)); + break; + } + case "SVG": + case "XPS": + { + var workbook = new Workbook(); + workbook.Worksheets[0].Pictures.Add(0, 0, stream); + workbook.Save(ms, _saveFormat(outputType)); + break; + } + } + + if (ms.Length > 0) + { + ms.Seek(0, SeekOrigin.Begin); + streams.Add(filename, ms); + } + + stream.Close(); + } + + await using var zipStream = new MemoryStream(); + using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true)) + { + foreach (var (filename, stream) in streams) + { + var entry = archive.CreateEntry(filename); + await using var entryStream = entry.Open(); + await stream.CopyToAsync(entryStream); + stream.Close(); + } + } + + outfileName = $"{Configuration.ConvertFolder}/{folderName}/charts.zip"; + zipStream.Seek(0, SeekOrigin.Begin); + await Storage.Upload(outfileName, zipStream, new AwsMetaInfo + { + OriginalFileName = Path.GetFileName(outfileName), + Title = Path.GetFileName(outfileName) + }); + } + + if (outfileName.IsNullOrEmpty()) + return new Response + { + Status = "Save failed, please try again", + StatusCode = 500 + }; + + return new Response + { + StatusCode = 200, + Status = "OK", + FileName = Path.GetFileName(outfileName), + FolderName = folderName + }; + } + + [HttpPost] + [ActionName("PreChart")] + public async Task PreChart(string outputType) + { + var sessionId = Guid.NewGuid().ToString(); + var action = $"Chart to {outputType}"; + try + { + var taskUpload = Task.Run(() => UploadWorkbooks(sessionId, AppName)); + taskUpload.Wait(Configuration.MillisecondsTimeout); + if (!taskUpload.IsCompleted) + { + Logger.LogError( + "{AppName} UploadWorkBooks=>{SessionId}=>{Timeout}", + AppName, + sessionId, + Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + var docs = taskUpload.Result; + if (docs == null) + return (PreviewChartsResponse) PasswordProtectedResponse; + if (docs.Length == 0 || docs.Length > MaximumUploadFiles) + return (PreviewChartsResponse) MaximumFileLimitsResponse; + + var charts = new List(); + var stopWatch = new Stopwatch(); + stopWatch.Start(); + Logger.LogWarning( + "Chart to {OutputType}=>{Filenames}=>Start", + outputType.Trim().ToLower(), + string.Join(",", docs.Select(t => t.FileName)) + ); + + var tasks = docs.Select(doc => + Task.Run(async () => { charts.AddRange(await PreCharts(doc, sessionId)); })).ToArray(); + var isCompleted = Task.WaitAll(tasks, Configuration.MillisecondsTimeout); + + if (!isCompleted) + { + Logger.LogError( + "Chart to {OutputType}=>{FileNames}=>{ProcessingTimeout}", + outputType.Trim().ToLower(), + string.Join(",", docs.Select(t => t.FileName)), + Configuration.ProcessingTimeout + ); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + stopWatch.Stop(); + + Logger.LogWarning( + "Chart to {OutputType}=>{Filenames}=>cost seconds:{TotalSeconds}", + outputType.Trim().ToLower(), + string.Join(",", docs.Select(t => t.FileName)), + stopWatch.Elapsed.TotalSeconds + ); + + if (charts.Count > 0) + return new PreviewChartsResponse + { + StatusCode = 200, + Status = "OK", + FolderName = sessionId, + Charts = charts, + OutputType = outputType + }; + + return new PreviewChartsResponse + { + StatusCode = 404, + Status = "There's no chart in the Excel file.", + FolderName = sessionId, + Text = "There's no chart in the Excel file." + }; + } + catch (Exception e) + { + var exception = e.InnerException ?? e; + var statusCode = 500; + if (exception is CellsException {Code: ExceptionType.IncorrectPassword}) + { + statusCode = 403; + } + + if (exception is CellsException {Code: ExceptionType.FileFormat}) + { + statusCode = 415; + } + + Logger.LogError( + "Action = {Action} | Message = {Message} | OutputType = {OutputType} | SessionId = {SessionId}", + action, + exception.Message, + outputType, + sessionId + ); + + return new PreviewChartsResponse + { + StatusCode = statusCode, + Status = exception.Message, + FolderName = sessionId, + Text = action + }; + } + } + + private async Task> PreCharts(DocumentInfo doc, string folderName) + { + var charts = new List(); + foreach (var sheet in doc.Workbook.Worksheets) + { + foreach (var chart in sheet.Charts) + { + var imgFilename = $"{sheet.Name} {chart.Name}.png"; + await using (var ms = new MemoryStream()) + { + var objectPath = $"{Configuration.ConvertFolder}/{folderName}/{imgFilename}"; + chart.ToImage(ms, new ImageOrPrintOptions {ImageType = ImageType.Png}); + await Storage.Upload(objectPath, ms, new AwsMetaInfo + { + OriginalFileName = imgFilename, + Title = imgFilename + }); + } + + var previewChart = new PreviewChart + { + WorkbookHash = doc.GetHashCode(), + SheetIndex = sheet.Index, + ChartHash = chart.GetHashCode(), + ChartName = Path.GetFileNameWithoutExtension(imgFilename), + ImgFolderName = folderName, + ImgFileName = imgFilename + }; + charts.Add(previewChart); + } + } + + return charts; + } + + private static SaveFormat _saveFormat(string outputType) + { + return outputType switch + { + "SVG" => SaveFormat.SVG, + "XPS" => SaveFormat.XPS, + _ => SaveFormat.Unknown + }; + } + + private static ImageFormat _imageFormat(string outputType) + { + return outputType switch + { + "JPG" => ImageFormat.Jpeg, + "PNG" => ImageFormat.Png, + "BMP" => ImageFormat.Bmp, + "TIFF" => ImageFormat.Tiff, + _ => ImageFormat.Jpeg + }; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartCloudApiController.cs b/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartCloudApiController.cs new file mode 100644 index 000000000..e339e0701 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartCloudApiController.cs @@ -0,0 +1,291 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Aspose.Cells.Common.CloudHelper; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; + +namespace Aspose.Cells.Conversion.Controllers +{ + public class ChartCloudApiController : CellsCloudApiControllerBase + { + private const string AppName = "Chart"; + public ChartCloudApiController(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + } + + [HttpPost] + [ActionName("Download")] + public async Task Download([FromBody] JObject obj) + { + var charts = obj["charts"].ToObject>(); + var outputType = Convert.ToString(obj["outputType"]); + if (charts == null || outputType == null) + { + return new Response + { + Status = "Save failed, please try again", + StatusCode = 500 + }; + } + + string outfileName; + var folderName = Guid.NewGuid().ToString(); + if (outputType is "PDF") + { + var index = 0; + var workbook = new Workbook(); + + foreach (var chart in charts) + { + var upperLeftRow = workbook.Worksheets[0].Pictures.Count > 0 ? workbook.Worksheets[0].Pictures[index].LowerRightRow : index; + var imgPath = $"{Configuration.ConvertFolder}/{chart.ImgFolderName}/{chart.ImgFileName}"; + var stream = await Storage.Download(imgPath); + index = workbook.Worksheets[0].Pictures.Add(upperLeftRow, 0, stream); + } + + outfileName = $"{Configuration.ConvertFolder}/{folderName}/charts.pdf"; + await using var memoryStream = new MemoryStream(); + workbook.Save(memoryStream, SaveFormat.Pdf); + memoryStream.Seek(0, SeekOrigin.Begin); + await Storage.Upload(outfileName, memoryStream, new AwsMetaInfo + { + OriginalFileName = Path.GetFileName(outfileName), + Title = Path.GetFileName(outfileName) + }); + } + else + { + var streams = new Dictionary(); + foreach (var chart in charts) + { + var imgPath = $"{Configuration.ConvertFolder}/{chart.ImgFolderName}/{chart.ImgFileName}"; + var stream = await Storage.Download(imgPath); + + var filename = $"{Path.GetFileNameWithoutExtension(imgPath)}.{outputType.ToLower()}"; + var ms = new MemoryStream(); + switch (outputType) + { + case "PNG": + { + await stream.CopyToAsync(ms); + break; + } + case "JPG": + case "BMP": + case "TIFF": + { + using var bitmap = new Bitmap(stream); + bitmap.Save(ms, _imageFormat(outputType)); + break; + } + case "SVG": + case "XPS": + { + var workbook = new Workbook(); + workbook.Worksheets[0].Pictures.Add(0, 0, stream); + workbook.Save(ms, _saveFormat(outputType)); + break; + } + } + + if (ms.Length > 0) + { + ms.Seek(0, SeekOrigin.Begin); + streams.Add(filename, ms); + } + + stream.Close(); + } + + await using var zipStream = new MemoryStream(); + using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true)) + { + foreach (var (filename, stream) in streams) + { + var entry = archive.CreateEntry(filename); + await using var entryStream = entry.Open(); + await stream.CopyToAsync(entryStream); + stream.Close(); + } + } + + outfileName = $"{Configuration.ConvertFolder}/{folderName}/charts.zip"; + zipStream.Seek(0, SeekOrigin.Begin); + await Storage.Upload(outfileName, zipStream, new AwsMetaInfo + { + OriginalFileName = Path.GetFileName(outfileName), + Title = Path.GetFileName(outfileName) + }); + } + + if (outfileName.IsNullOrEmpty()) + return new Response + { + Status = "Save failed, please try again", + StatusCode = 500 + }; + + return new Response + { + StatusCode = 200, + Status = "OK", + FileName = Path.GetFileName(outfileName), + FolderName = folderName + }; + } + [HttpPost] + [ActionName("PreChart")] + public async Task PreChart(string outputType) + { + var sessionId = Guid.NewGuid().ToString(); + var action = $"Chart to {outputType}"; + try + { + var taskUpload = Task.Run(() => UploadFiles(sessionId, AppName)); + taskUpload.Wait(Configuration.MillisecondsTimeout); + if (!taskUpload.IsCompleted) + { + Logger.LogError( + "{AppName} UploadFiles=>{SessionId}=>{Timeout}", + AppName, + sessionId, + Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + var docs = taskUpload.Result; + if (docs == null) + return (PreviewChartsResponse)PasswordProtectedResponse; + if (docs.Count == 0 || docs.Count > MaximumUploadFiles) + return (PreviewChartsResponse)MaximumFileLimitsResponse; + var charts = new List(); + var stopWatch = new Stopwatch(); + stopWatch.Start(); + Logger.LogWarning( + "Chart to {OutputType}=>{Filenames}=>Start", + outputType.Trim().ToLower(), + string.Join(",", docs.Select(t => t.Key)) + ); + + CellsCloudClient cells = new CellsCloudClient(); + CellsCloudFilesResult cellsCloudFilesResult = cells.Export(docs, "png", "chart").Result; + + foreach (CellsCloudFileInfo cellsCloudFileInfo in cellsCloudFilesResult.Files) + { + var imgFilename = cellsCloudFileInfo.Filename; + await using (var ms = new MemoryStream()) + { + var objectPath = $"{Configuration.ConvertFolder}/{sessionId}/{imgFilename}"; + byte[] workbookData = System.Convert.FromBase64String(cellsCloudFileInfo.FileContent); + ms.Write(workbookData, 0, workbookData.Length); + await Storage.Upload(objectPath, ms, new AwsMetaInfo + { + OriginalFileName = imgFilename, + Title = imgFilename + }); + } + + var previewChart = new PreviewChart + { + WorkbookHash = cellsCloudFileInfo.GetHashCode(), + SheetIndex = 0, + ChartHash = cellsCloudFileInfo.FileContent.GetHashCode(), + ChartName = Path.GetFileNameWithoutExtension(imgFilename), + ImgFolderName = sessionId, + ImgFileName = imgFilename + }; + charts.Add(previewChart); + } + + stopWatch.Stop(); + + Logger.LogWarning( + "Chart to {OutputType}=>{Filenames}=>cost seconds:{TotalSeconds}", + outputType.Trim().ToLower(), + string.Join(",", docs.Select(t => t.Key)), + stopWatch.Elapsed.TotalSeconds + ); + if (charts.Count > 0) + return new PreviewChartsResponse + { + StatusCode = 200, + Status = "OK", + FolderName = sessionId, + Charts = charts, + OutputType = outputType + }; + + return new PreviewChartsResponse + { + StatusCode = 404, + Status = "There's no chart in the Excel file.", + FolderName = sessionId, + Text = "There's no chart in the Excel file." + }; + } + catch (Exception e) + { + var exception = e.InnerException ?? e; + var statusCode = 500; + if (exception is CellsException { Code: ExceptionType.IncorrectPassword }) + { + statusCode = 403; + } + Logger.LogError( + "Action = {Action} | Message = {Message} | OutputType = {OutputType} | SessionId = {SessionId}", + action, + exception.Message, + outputType, + sessionId + ); + + return new PreviewChartsResponse + { + StatusCode = statusCode, + Status = exception.Message, + FolderName = sessionId, + Text = action + }; + } + + } + + private static SaveFormat _saveFormat(string outputType) + { + return outputType switch + { + "SVG" => SaveFormat.SVG, + "XPS" => SaveFormat.XPS, + _ => SaveFormat.Unknown + }; + } + + private static ImageFormat _imageFormat(string outputType) + { + return outputType switch + { + "JPG" => ImageFormat.Jpeg, + "PNG" => ImageFormat.Png, + "BMP" => ImageFormat.Bmp, + "TIFF" => ImageFormat.Tiff, + _ => ImageFormat.Jpeg + }; + } + } + +} diff --git a/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartController.cs b/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartController.cs new file mode 100644 index 000000000..4af78c948 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Controllers/ChartController.cs @@ -0,0 +1,29 @@ +using Aspose.Cells.Common.Controllers; +using Aspose.Cells.Common.Models; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Chart.Controllers +{ + public class ChartController : UIControllerBase + { + public ChartController(IWebHostEnvironment env, ILogger logger) : base(env, logger) + { + } + + public ActionResult Chart() + { + var model = new ViewModel(this, "Chart") + { + SaveAsComponent = true, + ShowViewerButton = false, + SaveAsOriginal = false, + ControlsView = "~/Pages/ChartControls.cshtml" + }; + if (model.RedirectToMainApp) + return Redirect("/cells/" + model.AppName.ToLower()); + return View("~/Pages/Chart.cshtml", model); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/Pages/Chart.cshtml b/Demos/Apps/Aspose.Cells.Chart/Pages/Chart.cshtml new file mode 100644 index 000000000..7ec31ece7 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Pages/Chart.cshtml @@ -0,0 +1,23 @@ +@using Aspose.Cells.Common.Models +@model ViewModel + +@{ + Layout = "~/Pages/Shared/Layout.cshtml"; +} +@{ + ViewBag.Title = "Chart"; +} + +@await Html.PartialAsync("Main") +@await Html.PartialAsync("FooterProduct") + + + +@section scripts { + +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/Pages/ChartControls.cshtml b/Demos/Apps/Aspose.Cells.Chart/Pages/ChartControls.cshtml new file mode 100644 index 000000000..e0d4d5342 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Pages/ChartControls.cshtml @@ -0,0 +1,13 @@ +@using Aspose.Cells.Common.Models +@model ViewModel + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/Program.cs b/Demos/Apps/Aspose.Cells.Chart/Program.cs new file mode 100644 index 000000000..aa7f5b726 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Program.cs @@ -0,0 +1,69 @@ +using System; +using System.Globalization; +using Aspose.Cells.Common.Config; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Serilog; +using Serilog.Formatting.Elasticsearch; +using Serilog.Sinks.Elasticsearch; +using ILogger = Microsoft.Extensions.Logging.ILogger; + +namespace Aspose.Cells.Chart +{ + public class Program + { + public static void Main(string[] args) + { + var appId = "Cells " + Startup.AppName; + ILogger logger = null; + try + { + var host = CreateHostBuilder(args).Build(); + logger = host.Services.GetService>(); + logger.ApplicationStarting(appId); + logger.ApplicationVersion(DateTime.Now.ToString(CultureInfo.InvariantCulture)); + logger.ApplicationEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); + host.Run(); + logger.ApplicationShutdown(appId); + } + catch (Exception ex) + { + logger.ApplicationTerminatedException(appId, ex); + } + finally + { + Log.CloseAndFlush(); + } + } + + public static IHostBuilder CreateHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args).UseSerilog((context, loggerConfiguration) => + { + loggerConfiguration = loggerConfiguration.ReadFrom.Configuration(context.Configuration); + loggerConfiguration.WriteTo.Console(); + if (context.HostingEnvironment.IsStaging() || context.HostingEnvironment.IsProduction()) + { + loggerConfiguration.MinimumLevel.Warning().WriteTo.Elasticsearch( + new ElasticsearchSinkOptions(new Uri(Environment.GetEnvironmentVariable("ES_URL") ?? string.Empty)) + { + IndexFormat = "cells-" + Startup.AppName + "-app-{0:yyyy.MM.dd}", + AutoRegisterTemplate = true, + CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true), + FailureCallback = e => Console.WriteLine("Unable to submit event " + e.MessageTemplate), + EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog | + EmitEventFailureHandling.RaiseCallback | + EmitEventFailureHandling.ThrowException, + ModifyConnectionSettings = x => x.BasicAuthentication( + Environment.GetEnvironmentVariable("ES_LOGIN"), + Environment.GetEnvironmentVariable("ES_PASSWORD") + ), + } + ); + } + }).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/Properties/launchSettings.json b/Demos/Apps/Aspose.Cells.Chart/Properties/launchSettings.json new file mode 100644 index 000000000..965dd2850 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Properties/launchSettings.json @@ -0,0 +1,51 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:41576", + "sslPort": 44362 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + } + }, + "Aspose.Cells.Chart": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation", + "FontFolderPath": "c:\\Windows\\Fonts", + "MailServerPort": "587", + "MailServer": "your email server", + "MailServerUserId": "your email account", + "MailServerPassword": "your password", + "SmtpTimeOut": "6000000", + "ForumKey": "xxx", + "ForumUrl": "https://forum-qa.aspose.com/port/import.json", + "ForumCategoryId": "7", + "RegionEndpoint": "your s3 RegionEndpoint", + "Bucket": "your s3 Bucket", + "AccessKeyId": "your s3 AccessKeyId", + "SecretAccessKey": "your s3 SecretAccessKey", + "ASPOSE_CLOUD_APP": "false" + }, + "applicationUrl": "http://localhost:5000", + "launchUrl": "http://localhost:5000/cells/chart" + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true, + "useSSL": true + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/Startup.cs b/Demos/Apps/Aspose.Cells.Chart/Startup.cs new file mode 100644 index 000000000..d296291cb --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/Startup.cs @@ -0,0 +1,158 @@ +using System.IO; +using Aspose.Cells.Chart.Controllers; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; +using Elastic.Apm.AspNetCore; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Serilog; + +namespace Aspose.Cells.Chart +{ + public class Startup + { + private static readonly AppNames appName = AppNames.Chart; + + internal static string AppName => appName.ToString(); + + public Startup(IConfiguration configuration) + { + AppConfiguration = configuration; + Configuration.IsProduction = configuration["ASPNETCORE_ENVIRONMENT"] == "Production"; + Configuration.FontFolderPath = configuration["FontFolderPath"]; + + Configuration.RegionEndpoint = configuration["RegionEndpoint"]; + Configuration.Bucket = configuration["Bucket"]; + Configuration.AccessKeyId = configuration["AccessKeyId"]; + Configuration.SecretAccessKey = configuration["SecretAccessKey"]; + + Configuration.MailServerPort = int.Parse(configuration["MailServerPort"]); + Configuration.MailServer = configuration["MailServer"]; + Configuration.MailServerUserId = configuration["MailServerUserId"]; + Configuration.MailServerUserPassword = configuration["MailServerPassword"]; + Configuration.MailServerTimeOut = int.Parse(configuration["SmtpTimeOut"]); + + Configuration.ForumKey = configuration["ForumKey"]; + Configuration.ForumUrl = configuration["ForumUrl"]; + Configuration.ForumCategoryId = configuration["ForumCategoryId"]; + Configuration.IsAsposeCloudApp = string.Compare(configuration["ASPOSE_CLOUD_APP"], "true", true) == 0; + if (Configuration.IsAsposeCloudApp) + { + Configuration.CellsCloudBaseUrl = configuration["CellsCloudBaseUrl"]; + Configuration.CellsCloudClientId = configuration["CellsCloudClientId"]; + Configuration.CellsCloudClientSecret = configuration["CellsCloudClientSecret"]; + Configuration.CellsCloudAPIMethod = configuration["CellsCloudAPIMethod"]; + Configuration.CellsCloudAPIMethodURI = configuration["CellsCloudAPIMethodURI"]; + Configuration.CellsCloudAPIReferenceURI = configuration["CellsCloudAPIReferenceURI"]; + Configuration.CellsCloudAPIMethodDocument = configuration["CellsCloudAPIMethodDocument"]; + } + } + + private IConfiguration AppConfiguration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddScoped(); + + Common.Models.License.SetCellsLicense(); + FontConfigs.SetFontFolder(Configuration.FontFolderPath, true); + + services.AddSharedConfigParams(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger logger) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Home/Error"); + app.UseHsts(); + app.UseElasticApm(AppConfiguration); + } + + if (!env.ContentRootPath.Contains("Aspose.Cells.Common.Tests") && env.IsProduction()) + { + app.UseSerilogRequestLogging(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseSession(); + + string staticResources; + logger.LogInformation("ContentRootPath: {0}", env.ContentRootPath); + if (env.ContentRootPath.EndsWith("app")) + //for windows docker + staticResources = Path.GetFullPath("./resources"); + else if (env.ContentRootPath.EndsWith("Common")) + //for Common test execute + staticResources = Path.Combine(env.ContentRootPath, "../apps/Aspose.Cells.Common/resources"); + else if (env.ContentRootPath.Contains("Aspose.Cells.Common.Tests")) + staticResources = Path.Combine(env.ContentRootPath, "../../../../../apps/Aspose.Cells.Common/resources"); + else + //for this app runtime + staticResources = Path.GetFullPath("../Aspose.Cells.Common/resources"); + + var options = new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(staticResources), + RequestPath = "/cells/" + appName.ToRouteName() + "/content" + }; + //This is required for asp-append-version + env.WebRootFileProvider = new CompositeFileWithOptionsProvider(env.WebRootFileProvider, options); + app.UseStaticFiles(options); + + app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Healthy"); }); }); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute(AppName, "cells/" + AppName + "/{fileformat}", + new {controller = AppName, action = AppName, fileformat = ""}); + }); + app.UseEndpoints(endpoints => + { + if (Configuration.IsAsposeCloudApp) + { + endpoints.MapControllerRoute("ChartCloudApi", "cells/" + AppName + "/api/ChartApi/{action}", + new { controller = "ChartCloudApi", action = AppName }); + } + else { + endpoints.MapControllerRoute("ChartApi", "cells/" + AppName + "/api/ChartApi/{action}", + new { controller = "ChartApi", action = AppName }); + } + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Download", "cells/" + AppName + "/api/{action}/{id}", + new {controller = "Download", action = "Download", id = ""}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Feedback", "cells/" + AppName + "/sendfeedback", + new {controller = AppName, action = "SendFeedback"}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Feedback", "cells/" + AppName + "/sendemail", + new {controller = AppName, action = "SendEmail"}); + }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute("Report", "cells/" + AppName + "/api/Report/Error", + new {controller = "Report", action = "Error"}); + }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Chart/appsettings.Development.json b/Demos/Apps/Aspose.Cells.Chart/appsettings.Development.json new file mode 100644 index 000000000..8983e0fc1 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Chart/appsettings.json b/Demos/Apps/Aspose.Cells.Chart/appsettings.json new file mode 100644 index 000000000..d9d9a9bff --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Chart/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/Demos/Apps/Aspose.Cells.Common/App_Data/EmailTemplate.html b/Demos/Apps/Aspose.Cells.Common/App_Data/EmailTemplate.html new file mode 100644 index 000000000..ecf5ff485 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/App_Data/EmailTemplate.html @@ -0,0 +1,39 @@ + + + + + + Aspose.App Email Template + + + +
+
+
+

+ {FeatureTitle} +

+
+ +

{SuccessMessage}

+ Download Now +


+ This file will be available for download and view for 24 hours. All uploaded and output files will be deleted from our servers in 24 hours. +

+ Thanks,
+ Aspose Support Team.
+ Aspose.app +

+
+
+
+ Copyright © 2019 Aspose, all rights reserved.
+
+ Aspose Pty Ltd, Suite 163, 79 Longueville Road, Lane Cove, NSW, 2066, Australia. +
+
+ + + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/App_Data/file_format.json b/Demos/Apps/Aspose.Cells.Common/App_Data/file_format.json new file mode 100644 index 000000000..f945b4b77 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/App_Data/file_format.json @@ -0,0 +1,954 @@ +{ + "mppxml": { + "fileFormatComUrl": "https://docs.fileformat.com/web/xml/", + "description": "MS Project XML stands for Extensible Markup Language that is similar to HTML but different in using tags for defining objects. The whole idea behind creation of XML file format was to store and transport data without being dependent on software or hardware tools. Its popularity is due to it being both human as well as machine readable. This enables it to create common data protocols in the form of objects to be stored and shared over network such as World Wide Web (WWW).", + "name": "Extended Markup Language", + "extension": "mppxml", + "displayname": null + }, + "docm": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/docm/", + "description": "DOCM files are Microsoft Word 2007 or higher generated documents with the ability to run macros. It is similar to DOCX file format but the ability to run macros makes it different from DOCX. Like DOCX, DOCM files can be store text, images, tables, shapes, charts and other contents.The capability to run macros make it easy to save time by executing the series of commands in the form of recorded actions for automatic completion of a task. DOCM files can be opened and edited in Microsoft Word 2007 and above.", + "name": "Microsoft Word Macro-Enabled Document", + "extension": "docm", + "displayname": "Word" + }, + "dib": { + "fileFormatComUrl": "https://docs.fileformat.com/image/dib/", + "description": "A DIB (Device Independent Bitmap) file is a raster image file that is similar in structure to the standard Bitmap files (BMP) but has a different header. It can be opened with almost all applications that can open a standard BMP file on Windows as well as macOS. DIB are binary files and have a complex file format similar to BMP.", + "name": "DIB", + "extension": "dib", + "displayname": null + }, + "tif": { + "fileFormatComUrl": "https://docs.fileformat.com/image/tiff/", + "description": "TIF or TIFF, Tagged Image File Format, represents raster images that are meant for usage on a variety of devices that comply with this file format standard. It is capable of describing bilevel, grayscale, palette-color and full-color image data in several color spaces. It supports lossy as well as lossless compression schemes to choose between space and time for applications using the format.", + "name": "Tagged Image File Format", + "extension": "tif", + "displayname": "Tagged Image" + }, + "vdx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vdx/", + "description": "Any drawing or chart created in Microsoft Visio, but saved in XML format have .VDX extension. A Visio drawing XML file is created in Visio software, which is developed by Microsoft. Microsoft Visio has the capability to generate visual documents that can be used in presentations and documents. The Visio drawing XML file contains the visual objects and metadata details of the visual elements.", + "name": "Microsoft Visio XML Drawing File Format", + "extension": "vdx", + "displayname": "Visio Drawing" + }, + "latlong": { + "fileFormatComUrl": null, + "description": "The World Geodetic System WGS84 (also known as WGS 1984, EPSG:4326) is one of the most popular spatial references. This system is supported by the United States National Geospatial-Intelligence Agency since 1984. And It is the preferred CRS in many specifications. Allowable ranges are X-axis from -180 to 180 and Y-axis from -90 to 90.", + "name": "Wgs84", + "extension": "latlong", + "displayname": null + }, + "xlam": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xlam/", + "description": "XLAM files are used to extend the modules provided by Excel. They can be added to Excel 2007 or later, or to earlier versions of Excel with Open XML component support. File used by Microsoft Excel, a program that allows users to create and edit spreadsheets; contains a macro-enabled add-in, which provides extra functionality and tools that may execute macros.", + "name": "Microsoft Excel Macro-Enabled Add-In", + "extension": "xlam", + "displayname": "Excel" + }, + "ps": { + "fileFormatComUrl": "https://docs.fileformat.com/page-description-language/ps/", + "description": "PostScript (PS) is a general-purpose page description language used in the business of desktop and electronic publishing. The main focus of PostScript (PS) is to facilitate the two-dimensional graphic design. Most languages require a distinct compilation stage before the code execution while Post Script (PS) format support a runtime straight forward interpretation.", + "name": "PostScript (PS)", + "extension": "ps", + "displayname": "PostScript" + }, + "presentation": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/", + "description": "PowerPoint presentations files are files created with popular Microsoft PowerPoint application. This is common name for subset of file formats: ODP, OTP, POT, POTM, POTX, PPS, PPSM, PPSX, PPT, PPTM, PPTX", + "name": "PowerPoint Open XML Presentation", + "extension": "presentation", + "displayname": null + }, + "ico": { + "fileFormatComUrl": "https://docs.fileformat.com/image/ico/", + "description": "Files with ICO extension are image file types used as icon for representation of an application on Microsoft Windows. These come in different size, colour support and resolution to suit the requirements of the display. Another similar image file format on Microsoft Windows is .CUR for cursor representation and defines a hotspot in the image header. On MacOS, ICNS file formats serve the same purpose as ICO files. Several online websites as well as applications provide the feature of creating such files and convert other image formats such as BMP, PNG, etc. to icon file format. The official IANA registered Internet media type for ICO files is image/vnd.microsoft.icon.", + "name": "Microsoft Icon File", + "extension": "ico", + "displayname": "Icon" + }, + "dxf": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/dxf/", + "description": "DXF, Drawing Interchange Format, or Drawing Exchange Format, is a tagged data representation of AutoCAD drawing file. Each element in the file has a prefix integer number called a group code. This group code actually represents the element that follows and indicates the meaning of a data element for a given object type. DXF makes it possible to represent almost all user-specified information in a drawing file.", + "name": "Autodesk Drawing Exchange File Format", + "extension": "dxf", + "displayname": "Drawing" + }, + "png": { + "fileFormatComUrl": "https://docs.fileformat.com/image/png/", + "description": "PNG, Portable Network Graphics, refers to a type of raster image file format that use loseless compression. This file format was created as a replacement of Graphics Interchange Format (GIF) and has no copyright limitations. However, PNG file format does not support animations. PNG file format supports loseless image compression that makes it popular among its users. With the passage of time, PNG has evolved as one of the mostly used image file format.", + "name": "Portable Network Graphic", + "extension": "png", + "displayname": "Image" + }, + "odg": { + "fileFormatComUrl": "https://docs.fileformat.com/image/odg/", + "description": "The ODG file format is used by Apache OpenOffice's Draw application to store drawing elements as a vector image. It follows the XML based file format specifications outlined by Advancement of Structural Information Standards (OASIS). ODG represents drawings as vector images using points, lines and curves. Besides OpenOffice, LibreOffice and other applications also provide support for working with ODG file format. Other formats supported by OpenOffice, for example, include ODT, ODF, ODP and ODS.", + "name": "OpenDocument Drawing File", + "extension": "odg", + "displayname": "Drawing File" + }, + "dng": { + "fileFormatComUrl": "https://docs.fileformat.com/image/dng/", + "description": "DNG is a digital camera image format used for the storage of raw files. It has been developed by Adobe in September 2004. It was basically developed for digital photography. DNG is an extension of TIFF/EP standard format and uses metadata significantly. In order to manipulate raw data from digital cameras with ease of flexibility and artistic control, photographers opt camera raw files.", + "name": "Digital Camera Image Format", + "extension": "dng", + "displayname": "Camera Image" + }, + "potx": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/potx/", + "description": "Files with .POTX extension represent Microsoft PowerPoint template presentations that are created with Microsoft PowerPoint 2007 and above. This format was created to replace the POT file format that is based on the binary file format and is supported with PowerPoint 97-2003. The files generated can be used to create presentations that have same layout and other settings required to be applied to new files. These settings can include styles, backgrounds, colour palette, fonts and defaults. Such files are generated in order to create ready-to-use template files for official use.", + "name": "Microsoft PowerPoint Open XML Template", + "extension": "potx", + "displayname": "PowerPoint" + }, + "xltx": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xltx", + "description": "Files with XLTX extension represent Microsoft Excel Template files that are based on the Office OpenXML file format specifications. It is used to create a standard template file that can be utilized t", + "name": "Microsoft Excel Open XML Template", + "extension": "xltx", + "displayname": "Excel" + }, + "html": { + "fileFormatComUrl": "https://docs.fileformat.com/web/html/", + "description": "HTML (Hyper Text Markup Language) is the extension for web pages created for display in browsers. Known as language of the web, HTML has evolved with requirements of new information requirements to be displayed as part of web pages. The latest variant is known as HTML 5 that gives a lot of flexibility for working with the language. HTML pages are either received from server, where these are hosted, or can be loaded from local system as well.", + "name": "Hyper Text Markup Language", + "extension": "html", + "displayname": "html" + }, + "vstm": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vstm/", + "description": "Files with VSTM extension are template files created with Microsoft Visio that support macros. Unlike VSDX files, files created from VSTM templates can run macros that are developed in Visual Basic for Applications (VBA) code. A template file can be created in order to provide basic settings of the document that can be utilized to generate further documents with these settings.", + "name": "Visio Macro-Enabled Drawing Template", + "extension": "vstm", + "displayname": "Visio Drawing" + }, + "wgs84": { + "fileFormatComUrl": null, + "description": "WGS 84 is one of the most popular geodetic reference systems. Use this system if you have no specific criteria.", + "name": "Wgs84", + "extension": "wgs84", + "displayname": null + }, + "eps": { + "fileFormatComUrl": "https://docs.fileformat.com/page-description-language/eps/", + "description": "FIles with EPS extension essentially describe an Encapsulated PostScript language program that describes the appearance of a single page. The name \"Encapsulated\" because it can be included or encapsulated in another PostScript language page description. This script based file format may contain any combination of text, graphics and images.", + "name": "Encapsulated PostScript File", + "extension": "eps", + "displayname": "Page" + }, + "xlsb": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xlsb/", + "description": "XLSB file format specifies the Excel Binary File Format, which is a collection of records and structures that specify Excel workbook content. The content can include unstructured or semi-structured tables of numbers, text, or both numbers and text, formulas, external data connections, charts and images. Unlike XLSX (which is based on Open XML file format), the XLSB represents binary Excel workbook file.", + "name": "Microsoft Excel Binary Spreadsheet File", + "extension": "xlsb", + "displayname": "Excel" + }, + "bmp": { + "fileFormatComUrl": "https://docs.fileformat.com/image/bmp/", + "description": "Files having extension .BMP represent Bitmap Image files that are used to store bitmap digital images. These images are independent of graphics adapter and are also called device independent bitmap (DIB) file format. This independency serves the purpose of opening the file on multiple platforms such as Microsoft Windows and Mac. The BMP file format can store data as two-dimensional digital images in both monochrome as well as color format with various colour depths.", + "name": "Bitmap Image File", + "extension": "bmp", + "displayname": null + }, + "tex": { + "fileFormatComUrl": "https://docs.fileformat.com/page-description-language/tex/", + "description": "TeX is a language that comprises of programming as well as mark-up features, used to typeset documents. Donald Knuth from Stanford University, is the creator of this resourceful typesetting system. Across the world, TeX is the ultimate choice of authors and publishers to produce high quality technical documents. TeX performs an outstanding job of formatting complex mathematical expressions. In conjunction with a high-quality phototypesetter, TeX competes the results generated by the best traditional typesetting systems.", + "name": "LaTeX Source Document", + "extension": "tex", + "displayname": "LaTeX" + }, + "dot": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/dot/", + "description": "Files with .DOT extension are template files created by Microsoft Word to have pre-formatted settings for generation of further DOC or DOCX files. A template file is created in order to have specific user settings that should be applied to subsequent files created from these. These settings include page margins, borders, headers, footers, and other page settings. Such templates are used in official documents such as company letterheads and standardized forms.", + "name": "Microsoft Word Document Template", + "extension": "dot", + "displayname": "Word" + }, + "ott": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/ott/", + "description": "Files with OTT extension represent template documents generated by applications in compliance with the OASIS' OpenDocument standard format. These are created with word processor applications such as free OpenOffice Writer and can hold settings that can be used to generate new documents from these template files. These settings include page margins, borders, headers, footers, and other page settings. Such templates are used in official documents such as company letterheads and standardized forms.", + "name": "Open Document Template", + "extension": "ott", + "displayname": "OpenOffice" + }, + "vrml": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/vrml/", + "description": "The Virtual Reality Modeling Language (VRML) is a file format for representation of interactive 3D world objects over the World Wide Web (www). It finds its usage in creating three-dimensional representations of complex scenes such as illustrations, definition and virtual reality presentations. The format has been superseded by X3D. Many 3D modelling applications can save objects and scenes in VRML format. ", + "name": "Virtual Reality Modeling Language", + "extension": "vrml", + "displayname": null + }, + "topojson": { + "fileFormatComUrl": "https://docs.fileformat.com/gis/geojson/", + "description": "TopoJSON is a GeoJSON extension that encodes topology. JSON based format designed to represent the geographical features with their non-spatial attributes. This format defines different JSON (JavaScript Object Notation) objects and their joining fashion. JSON format represents a collective information about the Geographical features, their spatial extents, and properties.", + "name": "JavaScript Object Notation File", + "extension": "topojson", + "displayname": null + }, + "mercator": { + "fileFormatComUrl": null, + "description": "The official name is \"WGS 84 / Pseudo-Mercator\" (more known as Web Mercator, Google Web Mercator, or EPSG:3857). It became famous when in 2005 he was accepted by Google Maps. This system is widely used for web applications (OpenStreetMap, Bing Maps, Mapbox, and so on). The allowable range is the same for X-axis and Y-axis: from -20037508.3427892 to 20037508.3427892 ", + "name": "Mercator", + "extension": "mercator", + "displayname": null + }, + "xbrl": { + "fileFormatComUrl": "https://docs.fileformat.com/finance/xbrl/", + "description": "XBRL is a freely available and global framework for exchanging business information. XBRL allows the expression of semantic meaning commonly required in business reporting. The language is XML-based. XBRL is a standards-based way to communicate and exchange business information between business systems. These communications are defined by metadata set out in taxonomies, which capture the definition of individual reporting concepts as well as the relationships between concepts and other semantic meaning. Information being communicated or exchanged is provided within an XBRL instance.", + "name": "Extensible Business Reporting Language", + "extension": "xbrl", + "displayname": null + }, + "psb": { + "fileFormatComUrl": "https://docs.fileformat.com/image/psb/", + "description": "Adobe photoshop saves files in two formats. Files having 30,000 by 30,000 pixels in size are saved with PSD extension and files larger than PSD upto 300,000 by 300,000 pixels are saved with PSB extension known as “Photoshop Big”. More specifically, PSB files can be as large as 4 EB (over 4.2 billion GB) with images that have a height and width of up to 300,000 pixels. PSDs, on the other hand, can be at maximum upto 2 GB and image dimensions of 30,000 pixels. PSB is also known as large format size for photoshop and supports all the photoshop features like layers, effects and filters.", + "name": "Adobe Photoshop Image File", + "extension": "psb", + "displayname": "Photoshop" + }, + "jt": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/jt/", + "description": "JT (Jupiter Tessellation) is an efficient, industry-focused and flexible ISO-standardized 3D data format developed by Siemens PLM Software. Mechanical CAD domains of Aerospace, automotive industry, and Heavy Equipment use JT as their most leading 3D visualization format.", + "name": "Open CAD file", + "extension": "jt", + "displayname": "CAD File" + }, + "md": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/md/", + "description": "Text files created with Markdown language dialects is saved with .MD or .MARKDOWN file extension. MD files are saved in plain text format that uses Markdown language which also includes inline text symbols, defining how a text can be formatted such as indentations, table formatting, fonts, and headers. MD files can be converted to HTML with a program called Markdown. Markdown language is released by John Gruber.", + "name": "Markdown", + "extension": "md", + "displayname": "Plain Text" + }, + "dwf": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/dwf/", + "description": "Design Web Format (DWF) represents 2D/3D drawing in compressed format for viewing, reviewing or printing design files. It contains graphics and text as part of design data and reduce the size of the file due to its compressed format. The reduced file size makes the distribution and communication of rich design data efficient. DWF doesn't require the recipient to know about the usage of CAD software that created the original drawing.", + "name": "Design Web Format", + "extension": "dwf", + "displayname": "Web" + }, + "drc": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/drc/", + "description": "DRC FIle Extension and associated file format.", + "name": "DRM Rights Object", + "extension": "drc", + "displayname": "DRM" + }, + "dae": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/dae/", + "description": "A DAE file is a Digital Asset Exchange file format that is used for exchanging data between interactive 3D applications. This file format is based on the COLLADA (COLLAborative Design Activity) XML schema which is an open standard XML schema for the exchange of digital assets among graphics software applications. It has been adopted by ISO as a publicly available specification, ISO/pAS 17506.", + "name": "Digital Asset Exchange File Format", + "extension": "dae", + "displayname": null + }, + "gif": { + "fileFormatComUrl": "https://docs.fileformat.com/image/gif/", + "description": "A GIF or Graphical Interchange Format is a type of highly compressed image. Owned by Unisys, GIF uses the LZW compression algorithm that does not degrade the image quality. For each image GIF typically allow up to 8 bits per pixel and up to 256 colours are allowed across the image. In contrast to a JPEG image, which can display up to 16 million colours and fairly touches the limits of the human eye.", + "name": "Graphical Interchange Format File", + "extension": "gif", + "displayname": "Graphical Image" + }, + "vssm": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vssm/", + "description": "Files with .VSSM extension are Microsoft Visio Stencil files that support provide support for macros. A VSSM file when opened allows to run the macros to achieve desired formatting and placement of shapes in a diagram. In general, Microsoft Visio is drawing software that allows to create files that can contain and represent user defined information in different shapes.", + "name": "Microsoft Visio Macro Enabled File Format", + "extension": "vssm", + "displayname": "Visio File" + }, + "vssx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vssx/", + "description": "Files with .VSSX extension are drawing stencils created with Microsoft Visio 2013 and above. The VSSX file format can be opened with Visio 2013 and above. Visio files are known for representation of a variety of drawing elements such as collection of shapes, connectors, flowcharts, network layout, UML diagrams, software diagrams, database models, objects mapping and other similar information.", + "name": "Visio Stencil File Format", + "extension": "vssx", + "displayname": "Visio Drawing" + }, + "fbx": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/fbx/", + "description": "FBX, FilmBox, is a popular 3D file format that was originally developed by Kaydara for MotionBuilder. It was acquired by Autodesk Inc in 2006 and is now one of the main 3D exchange formats as used by many 3D tools. FBX is available in both binary and ASCII file format. The format was established to provided interoperability between digital content creation applications.", + "name": "Filmbox Interchange File", + "extension": "fbx", + "displayname": "3D" + }, + "vsdm": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vsdm/", + "description": "Files with VSDM extension are drawing files created with Microsoft Visio application that supports macros. VSDM files are OPC/XML drawings that are similar to VSDX but also provide the capability to run macros when the file is opened. Macros are user defined actions/steps that are developed in Visual Basic for Applications (VBA) and can be used to perform repeatitive tasks.", + "name": "Visio Macro-Enabled Drawing", + "extension": "vsdm", + "displayname": "Visio Drawing" + }, + "j2k": { + "fileFormatComUrl": "https://docs.fileformat.com/image/j2k/", + "description": "A J2K file is an image that is compressed using the wavelet compression instead of DCT compression.", + "name": "JPEG 2000 Image", + "extension": "j2k", + "displayname": "Image" + }, + "ifc": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/ifc/", + "description": "Files with IFC extension refer to Industry Foundation Classes (IFC) file format that establishes international standards to import and export building objects and their properties. This file format provides interoperability between different software applications. Specifications for this file format are developed and maintained by buildingSMART International as its Data Standard.", + "name": "Industry Foundation Classes (IFC) File Format", + "extension": "ifc", + "displayname": "Industry Foundation" + }, + "dgn": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/dgn/", + "description": "CAD drawing format is implemented by Bentley Systems MicroStation and is used for architectural and engineering designs.", + "name": "Bentley Systems MicroStation DesiGN File", + "extension": "dgn", + "displayname": null + }, + "igs": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/iges/", + "description": "vendor-neutral file format that allows the digital exchange of information among computer-aided design (CAD) systems", + "name": "Initial Graphics Exchange Specification file", + "extension": "igs", + "displayname": null + }, + "eml": { + "fileFormatComUrl": "https://docs.fileformat.com/email/eml/", + "description": "EML file format represents email messages saved using Outlook and other relevant applications. Almost all emailing clients support this file format for its compliance with RFC-822 Internet Message Format Standard. Microsoft Outlook is default software for opening EML message types. EML files can be used for saving to disc as well as sending out to recipients using communication protocols.", + "name": "E-Mail Message File", + "extension": "eml", + "displayname": "E-Mail" + }, + "hpgl": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/hpgl/", + "description": "plotter languages developed by Hewlett Packard to send vector graphics to its pen plotters", + "name": "Hewlett-Packard Graphics Language", + "extension": "hpgl", + "displayname": null + }, + "one": { + "fileFormatComUrl": "https://docs.fileformat.com/note-taking/one/", + "description": "File represented by .ONE extension are created by Microsoft OneNote application. OneNote lets you gather information using the application as if you are using your draftpad for taking notes. OneNote files can contain different elements that can be placed at non-fixed locations on document pages. These elements may contain text, digitized handwriting, and objects copied from other applications including images, drawings and multimedia (audio/video) clips.", + "name": "Microsoft OneNote File Format", + "extension": "one", + "displayname": "OneNote" + }, + "iges": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/iges/", + "description": "vendor-neutral file format that allows the digital exchange of information among computer-aided design (CAD) systems", + "name": "Initial Graphics Exchange Specification file", + "extension": "iges", + "displayname": null + }, + "potm": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/potm/", + "description": "Files with POTM extension are Microsoft PowerPoint template files with support for Macros. POTM files are created with PowerPoint 2007 or above and contains default settings that can be used to create further presentation files. These settings can include styles, backgrounds, colour palette, fonts and defaults along with macros that consist of custom functions for doing particular task. They may also be opened by a previous version of PowerPoint with Open XML document support installed. POTM files can be opened in Microsoft PowerPoint for editing like any other PowerPoint file. \r\n\r\n", + "name": "Microsoft PowerPoint Template", + "extension": "potm", + "displayname": "PowerPoint" + }, + "xhtml": { + "fileFormatComUrl": "https://docs.fileformat.com/web/xhtml/", + "description": "The XHTML is a text based file format with markup in the XML, using a reformulation of HTML 4.0. These files are well suited to be open or viewed in a web browser. XHTML was designed to be more structured, less scripting, generic; using all the existing facilities of XML and more device independent. XHTML provides a generally worthwhile set of elements and attributes, with extension options in combination with style sheets.", + "name": "Extensible Hypertext Markup Language File", + "extension": "xhtml", + "displayname": "Hypertext" + }, + "vsdx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vsdx/", + "description": "Files with .VSDX extension represent Microsoft Visio file format introduced from Microsoft Office 2013 onwards. It was developed to replace the binary file format, .VSD, which is supported by earlier versions of Microsoft Visio. It is also supported on Visio Services in Microsoft SharePoint Server 2013 and does not require an intermediary file format for publishing to SharePoint Server.", + "name": "Microsoft Visio File Format", + "extension": "vsdx", + "displayname": "Visio File" + }, + "vsx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vsx/", + "description": "Files with .VSX extension refer to stencils that consist of drawings and shapes that are used for creating diagrams in Microsoft Visio. VSX files are saved in XML file format and was supported till Visio 2013. These are different than the primary VSDX file format that was introduced with Microsoft Visio 2013. VSX files can be opened in any text editor to view the contents.", + "name": "Vector Scalar Extension", + "extension": "vsx", + "displayname": "Vector" + }, + "gltf": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/gltf/", + "description": "glTF (GL Transmission Format) is a 3D file format that stores 3D model information in JSON format. The use of JSON minimizes both the size of 3D assets and the runtime processing needed to unpack and use those assets. It was adopted for the efficient transmission and loading of 3D scenes and models by applications.", + "name": "GL Transmisison Format", + "extension": "gltf", + "displayname": "GL Transmisison" + }, + "dwt": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/dwt/", + "description": "A DWT file is an AutoCAD drawing template file that is used as starter for creating drawings that can be saved as DWG files.", + "name": "AutoCAD Drawing Template", + "extension": "dwt", + "displayname": null + }, + "xlsx": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xlsx/", + "description": "XLSX is well-known format for Microsoft Excel documents that was introduced by Microsoft with the release of Microsoft Office 2007. Based on structure organized according to the Open Packaging Conventions as outlined in Part 2 of the OOXML standard ECMA-376, the new format is a zip package that contains a number of XML files. The underlying structure and files can be examined by simply unzipping the .xlsx file.", + "name": "Microsoft Excel Open XML Spreadsheet", + "extension": "xlsx", + "displayname": "Excel" + }, + "amf": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/amf/", + "description": "Additive Manufacturing file format (AMF) defines open standards for objects description in order to be utilized by additive manufacturing processes such as 3D Printing. CAD programs use the AMF file format by making use of the information such as geometry, color and material of the objects. AMF is different than STL format as the lateral does not support color, materials, lattices, and constellations.", + "name": "Additive Manufacturing File", + "extension": "amf", + "displayname": null + }, + "cf2": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/cf2/", + "description": "CAD file that contains 3D package designs or other model data", + "name": "Common File Format 2 file", + "extension": "cf2", + "displayname": null + }, + "dwfx": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/dwfx/", + "description": "represents 2D/3D drawing formatted as XPS document. It contains graphics and text as part of design data", + "name": "Design Web Format XPS formatted", + "extension": "dwfx", + "displayname": null + }, + "epub": { + "fileFormatComUrl": "https://docs.fileformat.com/ebook/epub/", + "description": "Files with .EPUB extension are an e-book file format that provide a standard digital publication format for publishers and consumers. The format has been so common by now that it is supported by many e-readers and software applications. For example, on Mac OS, the pre-installed Books software provides the support for opening such files. In addition, there are a lot of compatible software available for smartphones, tablets and computers.", + "name": "Digital E-Book File Format", + "extension": "epub", + "displayname": "Image" + }, + "ply": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/ply/", + "description": "PLY, Polygon File Format, represents 3D file format that stores graphical objects described as a collection of polygons. The purpose of this file format was to establish a simple and easy file type that is general enough to be useful for a wide range of models. PLY file format comes as ASCII as well as Binary format for compact storage and for rapid saving and loading.", + "name": "Polygon File Format", + "extension": "ply", + "displayname": "Polygon" + }, + "ost": { + "fileFormatComUrl": "https://docs.fileformat.com/email/ost/", + "description": "OST or Offline Storage Files represent user's mailbox data in offline mode on local machine upon registration with Exchange Server using Microsoft Outlook. It is automatically created on the first use of Microsoft Outlook upon connectivity with server. Once the file is created, the data is synchronized with the email server so that it is available offline as well in case of disconnectivity from email server.", + "name": "Outlook Offline Storage File", + "extension": "ost", + "displayname": "Outlook" + }, + "json": { + "fileFormatComUrl": "https://docs.fileformat.com/gis/geojson/", + "description": "JSON based format designed to represent the geographical features with their non-spatial attributes. This format defines different JSON (JavaScript Object Notation) objects and their joining fashion. JSON format represents a collective information about the Geographical features, their spatial extents, and properties.", + "name": "JavaScript Object Notation File", + "extension": "json", + "displayname": null + }, + "xps": { + "fileFormatComUrl": "https://docs.fileformat.com/page-description-language/xps/", + "description": "An XPS file represents page layout files that are based on XML Paper Specifications created by Microsoft. This format was developed by Microsoft as replacement of EMF file format and is similar to PDF file format, but uses XML in layout, appearance, and printing information of a document. It is, in fact, more justified to say that XPS is an attempt on PDF, but couldn't get enough popularity as owned by PDF for a number of reasons.", + "name": "Open XML Paper Specification", + "extension": "xps", + "displayname": "XML Paper" + }, + "mbox": { + "fileFormatComUrl": "https://docs.fileformat.com/email/mbox/", + "description": "MBox file format is a generic term that represents a container for collection of electronic mail messages. The messages are stored inside the container along with their attachments. Messages from an entire folder are saved in a single database file and new messages are appended to the end of the file. Numerous applications and API provide support for MBox file format such as Apple Mail and Mozilla Thunderbird.", + "name": "Email Mailbox File", + "extension": "mbox", + "displayname": "E-Mail" + }, + "tsv": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/tsv/", + "description": "A Tab-Separated Values (TSV) file format represents data separated with tabs in plain text format. The file format, similar to CSV, is used for organization of data in a structured manner in order to import and export between different applications. The format is primarily used for data import/export and exchange in Spreadsheet applications and databases. ", + "name": "Tab Separated Values File", + "extension": "tsv", + "displayname": "Excel" + }, + "rtf": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/rtf/", + "description": "Introduced and documented by Microsoft, the Rich Text Format (RTF) represents a method of encoding formatted text and graphics for use within applications. The format facilitates cross-platform document exchange with other Microsoft Products, thus serving the purpose of interoperability. This capability makes it a standard of data transfer between word processing software and, hence, contents can be transferred from one operating system to another without losing document formatting.", + "name": "Rich Text File Format", + "extension": "rtf", + "displayname": "Rich Text" + }, + "gpx": { + "fileFormatComUrl": "https://docs.fileformat.com/gis/gpx/", + "description": "Files with GPX extension represent GPS Exchange format for interchange of GPS data between applications and web services on the internet. It is a light-weight XML file format that contains GPS data i.e. waypoints, routes and tracks to be imported and red by multiple programs. GPX file format is open and is supported by variety of applications and GPS devices.", + "name": "Exchange File Format", + "extension": "gpx", + "displayname": "GPS Exchange" + }, + "ixbrl": { + "fileFormatComUrl": "https://docs.fileformat.com/finance/ixbrl/", + "description": "iXBRL is a development of XBRL in which the XBRL metadata are embedded in an HTML document. It requires the HTML document to be well-formed but does not otherwise specify the required XML format. Typically, iXBRL is implemented within HTML documents, which are displayed or printed by web browsers without revealing the XBRL metadata inside the document. The specification does, however, provide a normative schema which requires that any schema-valid iXBRL document should be in XHTML format.", + "name": "Inline XBRL", + "extension": "ixbrl", + "displayname": null + }, + "pptx": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/pptx/", + "description": "Files with PPTX extension are presentation files created with popular Microsoft PowerPoint application. Unlike the previous version of presentation file format PPT which was binary, the PPTX format is based on the Microsoft PowerPoint open XML presentation file format. A presentation file is a collection of slides where each slide can comprise of text, images, formatting, animations, and other media.", + "name": "PowerPoint Open XML Presentation", + "extension": "pptx", + "displayname": "PowerPoint" + }, + "txt": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/txt/", + "description": "A file with .TXT extension represents a text document that contains plain text in the form of lines. Paragraphs in a text document are recognized by carriage returns and are used for better arrangement of file contents. A standard text document can be opened in any text editor or word processing application on different operating systems. All the text contained in such a file is in human-readable format and represented by sequence of characters.", + "name": "Plain Text File Format", + "extension": "txt", + "displayname": "Plain Text" + }, + "pst": { + "fileFormatComUrl": "https://docs.fileformat.com/email/pst/", + "description": "Files with .PST extension represent Outlook Personal Storage Files (also called Personal Storage Table) that store variety of user information. User information is stored in folders of different types that include emails, calendar items, notes, contacts, and several other file formats. PST files are used for archiving emailing data offline that can be later loaded and viewed in various applications.", + "name": "Personal Storage File", + "extension": "pst", + "displayname": "Outlook" + }, + "msg": { + "fileFormatComUrl": "https://docs.fileformat.com/email/msg/", + "description": "MSG is a file format used by Microsoft Outlook and Exchange to store email messages, contact, appointment, or other tasks. Such messages may contain one or more email fields, with the sender, recipient, subject, date, and message body, or contact information, appointment particulars, and one or more task specifications. The properties that constitute the Message object, including are also a part of the MSG file.", + "name": "Microsoft Outlook Email Format", + "extension": "msg", + "displayname": "E-Mail" + }, + "mpp": { + "fileFormatComUrl": "https://docs.fileformat.com/project-management/mpp/", + "description": "A file with MPP extension is Microsoft Project data file that stores information related to project management in an integrated manner. It is proprietary file format developed by Microsoft as file format for Microsoft Project (MSP) which is a project management application software. Besides MPP, MSP supports other file formats as well like project XML schema. Several APIs and applications provide the facility to convert MPP file format to others.", + "name": "Microsoft Project File", + "extension": "mpp", + "displayname": "Project File" + }, + "tar": { + "fileFormatComUrl": "https://docs.fileformat.com/compression/tar/", + "description": "Files with .tar extension are archives created with Unix-based utility for collecting one or more files. Multiple files are stored in an uncompressed format with the support of adding files as well as folders to the archive. TAR utility on Unix is Command based, but files hence created are supported by most file archiving systems on almost all operating systems. It was first created in 1979 by the AT&T Bell Laboratories and subsequent versions were published with the passage of time.", + "name": "Tape Archive", + "extension": "tar", + "displayname": null + }, + "3ds": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/3ds/", + "description": "A file with 3DS extension represents 3D Sudio (DOS) mesh file format used by Autodesk 3D Studio. Autodesk 3D Studio has been in 3D file format market since 1990s and has now evolved to 3D Studio MAX for working with 3D modeling, animation and rendering. A 3DS file contains data for 3D representation of scenes and images and is one of the popular file formats for 3D data import and export.", + "name": "3D Studio Mesh File Format", + "extension": "3ds", + "displayname": null + }, + "odt": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/odt/", + "description": "ODT files are type of documents created with word processing applications that are based on OpenDocument Text File format. These are created with word processor applications such as free OpenOffice Writer and can hold content such as text, images, objects and styles. The ODT file is to Writer word processor what the DOCX is to Microsoft Word. Several applications including Google Docs and Google's web-based word processor included with Google Drive can open the ODT files for editing.", + "name": "Open Document Text", + "extension": "odt", + "displayname": "Word" + }, + "xls": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xls/", + "description": "Files with XLS extension represent Excel Binary File Format. Such files can be created by Microsoft Excel as well as other similar spreadsheet programs such as OpenOffice Calc or Apple Numbers. File saved by Excel are known as Workbook where each workbook can have one or more worksheets. Data is stored and displayed to users in table format in worksheet and can span numeric values, text data, formulas, external data connections, images and charts.", + "name": "Microsoft Excel Binary File Format", + "extension": "xls", + "displayname": "Excel" + }, + "odp": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/odp/", + "description": "Files with ODP extension represent presentation file format used by OpenOffice.org in the OASISOpen standard. A presentation file is a collection of slides where each slide can comprise of text, images, formatting, animations, and other media. These slides are presented to audience in the form of slideshows with custom presentation settings.", + "name": "OpenDocument Presentation File Format", + "extension": "odp", + "displayname": "Presentation File" + }, + "u3d": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/u3d/", + "description": "U3D (Universal 3D) is a compressed file format and data structure for 3D computer graphics. It contains 3D model information such as triangle meshes, lighting, shading, motion data, lines and points with color and structure. The format was accepted as ECMA-363 standard in August 2005. 3D PDF documents support U3D objects embedding and can be viewed in Adobe Reader (version 7 and onwards).", + "name": "Universal 3D File Format", + "extension": "u3d", + "displayname": null + }, + "ppsx": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/ppsx/", + "description": "PPSX, Power Point Slide Show, file are created using Microsoft PowerPoint 2007 and above for Slide Show purpose. It is an update to the PPS file format that was supported by Microsoft PowerPoint 97-2003 versions. When a PPSX file is shared with another user and opened, it starts as PowerPoint show unlike PPTX file that opens in editable mode. The sequence of slide show is the same as in the original presentation. All the slides accompany the images, sounds and other embedded media accompany the presentation slides to the PPSX during the slideshow. ", + "name": "PowerPoint Open XML Slide Show", + "extension": "ppsx", + "displayname": "PowerPoint" + }, + "svg": { + "fileFormatComUrl": "https://docs.fileformat.com/page-description-language/svg/", + "description": "SVG files are Scalable Vector Graphics Files that use XML based text format for describing the appearance of image. The word Scalable refers to the fact that the SVG can be scaled to different sizes without losing any quality. Text based description of such files make them independent of resolution. It is one of the mostly used format for building website and print graphics in order to achieve scalability.", + "name": "Scalable Vector Graphics File", + "extension": "svg", + "displayname": "Vector Graphics" + }, + "xls2003": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xls", + "description": "Files with XLS extension represent Excel Binary File Format. Such files can be created by Microsoft Excel as well as other similar spreadsheet programs such as OpenOffice Calc or Apple Numbers. File saved by Excel are known as Workbook where each workbook can have one or more worksheets. Data is stored and displayed to users in table format in worksheet and can span numeric values, text data, formulas, external data connections, images and charts. Applications like Microsoft Excel lets you export workbook data to several different formats including PDF, CSV, XLSX, TXT, HTML, XPS and several others. The XLS file format was replaced with a more open and structured format, XLSX, with the release of Microsoft Excel 2007. The latest versions still provide support for creating and reading XLS files, though XLSX is the first choice of use now.", + "name": "Microsoft Excel Spreadsheet", + "extension": "xls2003", + "displayname": "Excel" + }, + "ods": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/ods/", + "description": "Files with ODS extension stand for OpenDocument Spreadsheet Document format that are editable by user. Data is stored inside ODF file into rows and columns. It is XML-based format and is one of the several subtypes in the Open Document Formats (ODF) family. The format is specified as part of the ODF 1.2 specifications published and maintained by OASIS.", + "name": "Open Document Spreadsheet", + "extension": "ods", + "displayname": "Excel" + }, + "webp": { + "fileFormatComUrl": "https://docs.fileformat.com/image/webp/", + "description": "WebP, introduced by Google, is a modern raster web image file format that is based on lossless and lossy compression. It provides same image quality while considerably reducing the image size. Since most of the web pages use images as effective representation of data, the use of WebP images in web pages results in faster loading of web pages.", + "name": "Raster Web Image File Format", + "extension": "webp", + "displayname": "Web Image" + }, + "otp": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/otp/", + "description": "Files with .OTP extension represent presentation template files created by applications in OASIS OpenDocument standard format. The contents of such a file include presentation information in the form of slides with text, images, shapes, multimedia content, transition effects and other slide elements. These template files are used for creating new presentations quickly based on the styling information stored in the template itself. OTP files can be created and saved with several different applications such as Impress that comes with OpenOffice suite and Microsoft PowerPoint. The OTP file format is similar to Microsoft PowerPoint template files .POT and .POTX.", + "name": "Origin Graph Template", + "extension": "otp", + "displayname": "Graph" + }, + "xer": { + "fileFormatComUrl": "https://docs.fileformat.com/project-management/xer/", + "description": "The XER file format is a proprietary project file format used by Primavera P6 project planning and management application. Like MPP file format, this file format stores data related to project planning such as tasks, resources, timelines, and materials. Primavera is developed by Oracle and provides the capability of complete project planning and finds its applications in several practical fields such as oil and gas, construction, manufacturing, etc.", + "name": "Primavera P6 Project File", + "extension": "xer", + "displayname": "Project File" + }, + "obj": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/obj/", + "description": "OBJ files are used by Wavefront's Advanced Visualizer application to define and store the geometric objects. Backward and forward transmission of geometric data is made possible through OBJ files. Both polygonal geometry like points, lines, texture vertices, faces and free-form geometry (curves and surfaces) are supported by OBJ format. This format does not support animation or information related to light and position of scenes.", + "name": "Geometry Definition File Format", + "extension": "obj", + "displayname": "Geometric Objects" + }, + "3mf": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/3mf/", + "description": "3MF, 3D Manufacturing Format, is used by applications to render 3D object models to a variety of other applications, platforms, services and printers. It was built to avoid the limitations and issues in other 3D file formats, like STL, for working with the latest versions of 3D printers. 3MF is relatively a new file format that has been developed and published by the 3MF consortium.", + "name": "3D Manufacturing File Format", + "extension": "3mf", + "displayname": null + }, + "pps": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/pps/", + "description": "PPS, PowerPoint Slide Show, files are created using Microsoft PowerPoint for Slide Show purpose. PPS file reading and creation is supported by Microsoft PowerPoint 97-2003. The more latest version of this file format is PPSX which is based on Office OpenXML standards. PPS files can still be read by latest versions of Microsoft PowerPoint, but newly created files can only be saved in PPSX file format. When a PPS file is shared with another user and opened, it starts as Powerpoint show unlike PPT file which opens in editable mode. ", + "name": "Microsoft PowerPoint Slide Show", + "extension": "pps", + "displayname": "PowerPoint" + }, + "jpeg": { + "fileFormatComUrl": "https://docs.fileformat.com/image/jpeg", + "description": "A JPEG is a type of image format that is saved using the method of lossy compression. The output image, as result of compression, is a trade-off between storage size and image quality. Users can adjust the compression level to achieve the desired quality level while at the same time reduce the storage size. Image quality is negligibly affected if 10:1 compression is applied to the image. The higher the compression value, the higher the degradation in image quality. JPEG image file format was standardized by the Joint Photographic Experts Group and, hence, the name JPEG. The format has been the choice of storing and transmitting photographic images on the web. Almost all Operating systems now have viewers that support visualization of JPEG images, which are often stored with JPG extension as well. Even the web browsers support visualization of JPEG images.", + "name": "JPEG Image", + "extension": "jpeg", + "displayname": "Image" + }, + "dotx": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/dotx/", + "description": "Files with DOTX extension are template files created by Microsoft Word to have pre-formatted settings for generation of further DOCX files. A template file is created in order to have specific user settings that should be applied to subsequent flies created from these. These settings include page margins, borders, headers, footers, and other page settings. Such templates are used in official documents such as company letterheads and standardized forms.", + "name": "Word Open XML Document Template", + "extension": "dotx", + "displayname": "Word" + }, + "mhtml": { + "fileFormatComUrl": "https://docs.fileformat.com/web/mhtml/", + "description": "Files with MHTML extension represent a web page archive format that can be created by a number of different applications. The format is known as archive format because it saves the web HTML code and associated resources in a single file. These resources include anything linked to the webpage such as images, applets, animations, audio files and so on. MHTML files can be opened in a variety of applications such as Internet Explorer and Microsoft Word.", + "name": "MIME Encapsulation of Aggregate HTML", + "extension": "mhtml", + "displayname": "MIME HTML" + }, + "plt": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/plt/", + "description": "Vector-based plotter file developed by Autodesk, Inc. to store plotting parts of CAD drawings", + "name": "Plotter file", + "extension": "plt", + "displayname": null + }, + "dicom": { + "fileFormatComUrl": "https://docs.fileformat.com/image/dicom/", + "description": "DICOM is the acronym for Digital Imaging and Communications in Medicine and pertains to the field of Medical Informatics. DICOM is the combination of file format definition and a network communications protocol. DICOM uses the .DCM extension. .DCM exist in two different formats i.e. format 1.x and format 2.x. DCM Format 1.x is further available in two versions normal and extended.", + "name": "Digital Imaging and Communications in Medicine", + "extension": "dicom", + "displayname": "Digital Image" + }, + "tar.bz2": { + "fileFormatComUrl": "https://docs.fileformat.com/compression/bz2/", + "description": "BZ2 are compressed files generated using the BZIP2 open source compression method, mostly on UNIX or Linux system. It is used for compression of a single file and is not meant for archiving of multiple files. This is in contrast to the TAR file format on the same platforms that archives multiple files into a single file but without compression. Files compressed as BZ2 can be decompressed with applications like WinZip. BZIP2 uses Run-Length Encoding (RLE) or Burrows-Wheeler compression algorithm to achieve high levels of compression.", + "name": "Bzip2 Compressed File", + "extension": "tar.bz2", + "displayname": null + }, + "utm": { + "fileFormatComUrl": null, + "description": "The Universal Transverse Mercator (UTM) is a map projection system in which the Earth's surface is divided into 60 zones. In this case, we use a 31 zone (also known as WGS 84 / UTM zone 31N, EPSG:32631). It is a popular system for assigning coordinates to locations on the surface of the Earth.", + "name": "UTM", + "extension": "utm", + "displayname": null + }, + "nad83": { + "fileFormatComUrl": null, + "description": "The North American Datum 1983 (NAD83) is a spatial refernce that was established in 1986 for the United States, Canada, Mexico, Central America, and the Caribbean. Hawaii and Greenland were also associated with this data. It is based on the horizontal correction of conventional survey data and the inclusion of satellite transit Doppler data and Very Long Baseline Interferometry (VLBI) data. Global Doppler and VLBI observations were used to orient the NAD83 frame of reference relative to the 1984 BIH ground system. The orientation of the ECEF coordinate axes of the NAD83 datum is identical to the orientation of the original WGS84 datum.", + "name": "Nad83", + "extension": "nad83", + "displayname": null + }, + "dwg": { + "fileFormatComUrl": "https://docs.fileformat.com/specification/cad/dwg/", + "description": "Files with DWG extension represent proprietary binary files used for containing 2D and 3D design data. Like DXF, which are ASCII files, DWG represent the binary file format for CAD (Computer Aided Design) drawings. It contains vector image and metadata for representation of contents of CAD files.", + "name": "AutoCAD Drawing Database File", + "extension": "dwg", + "displayname": "Binary File" + }, + "ppt": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/ppt/", + "description": "A file with PPT extension represents PowerPoint file that consists of a collection of slides for displaying as SlideShow. It specifies the Binary File Format used by Microsoft PowerPoint 97-2003. A PPT file can contain several different types of information such as text, bulleted points, images, multimedia and other embedded OLE objects. Microsoft came up with newer file format for PowerPoint, known as PPTX, from 2007 onwards that is based on Office OpenXML and is different from this binary file format.", + "name": "PowerPoint Presentation", + "extension": "ppt", + "displayname": "PowerPoint" + }, + "stl": { + "fileFormatComUrl": "https://docs.fileformat.com/cad/stl/", + "description": "STL, abbreviation for stereolithrography, is an interchangeable file format that represents 3-dimensional surface geometry. The file format finds its usage in several fields such as rapid prototyping, 3D printing and computer-aided manufacturing. It represents a surface as a series of small triangles, known as facets, where each facet is described by a perpendicular direction and three points representing the vertices of the triangle.", + "name": "Stereolithography", + "extension": "stl", + "displayname": "Interchangeable File" + }, + "prs92": { + "fileFormatComUrl": null, + "description": "The PRS92 Surveying Standard is commonly in the Philippines. A key component of PRS 92 is the establishment of permanent reference points, called “mohons,” throughout the country, which serve as reference points for all surveying activities of both public and private surveyors for the benefit of landowners.", + "name": "PRS92", + "extension": "prs92", + "displayname": null + }, + "excel": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/", + "description": "XLSX is well-known format for Microsoft Excel documents that was introduced by Microsoft with the release of Microsoft Office 2007. Based on structure organized according to the Open Packaging Conventions as outlined in Part 2 of the OOXML standard ECMA-376, the new format is a zip package that contains a number of XML files. The underlying structure and files can be examined by simply unzipping the .xlsx file.", + "name": "Microsoft Excel Open XML Spreadsheet", + "extension": "excel", + "displayname": null + }, + "vsd": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vsd/", + "description": "VSD files are drawings created with Microsoft Visio application to represent variety of graphical objects and the interconnection between these. Such drawings can contain visual objects such as visual objects, flow charts, UML diagram, information flow, organizational charts, software diagrams, network layout, database models, objects mapping and other similar information. Microsoft Visio offers the capability to convert Visio files to a number of different file formats including PNG, BMP, PDF and others.", + "name": "Visio Drawing File Format", + "extension": "vsd", + "displayname": "Drawing File" + }, + "x": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/x/", + "description": "X is a DirectX Model image file used by DirectX technology which is for 3D graphics rendering in games. The file format specifies 3D object structures for meshes, textures, animations, and objects.", + "name": "DirectX Model File", + "extension": "x", + "displayname": "Image" + }, + "mht": { + "fileFormatComUrl": "https://docs.fileformat.com/web/mhtml/", + "description": "Files with MHT extension represent a web page archive format that can be created by a number of different applications. The format is known as archive format because it saves the web HTML code and associated resources in a single file. These resources include anything linked to the webpage such as images, applets, animations, audio files and so on.", + "name": "MIME Encapsulation of Aggregate HTML", + "extension": "mht", + "displayname": "Web Page" + }, + "vtx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vtx/", + "description": "A file with VTX extension is a Microsoft Visio drawing template that is saved to disc in XML file format. The template is aimed to provide a file with basic settings that can be used to create multiple Visio files of the same settings. Another similar format is VST which is saved in binary format rather than XML. VTX files are supported with Visio 2010 and newer versions.", + "name": "Microsoft Visio Drawing Template", + "extension": "vtx", + "displayname": "Visio Drawing" + }, + "glb": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/glb/", + "description": "GLB is the binary file format representation of 3D models saved in the GL Transmission Format (glTF). Information about 3D models such as node hierarchy, cameras, materials, animations and meshes in binary format. This binary format stores the glTF asset (JSON, .bin and images) in a binary blob. It also avoids the issue of increase in file size which happens in case of glTF. GLB file format results in compact file sizes, fast loading, complete 3D scene representation, and extensibility for further development. The format uses model/gltf-binary as MIME type. ", + "name": "Binary File Format", + "extension": "glb", + "displayname": null + }, + "7z": { + "fileFormatComUrl": "https://docs.fileformat.com/compression/7z/", + "description": "7z is an archiving format for compressing files and folders with a high compression ratio. It is based on Open Source architecture which makes it possible to use any compression and encryption algorithms. The format is now supported by a number of software applications such as 7-ZIP which is publicly available for download and usage to manipulate .7z files. Files with .7z extension have mime-type application/x-7z-compressed.", + "name": "7Z Compressed Archive", + "extension": "7z", + "displayname": null + }, + "djvu": { + "fileFormatComUrl": "https://docs.fileformat.com/image/djvu/", + "description": "DjVu, pronounced as “déjà vu”, is a graphics file format intended for scanned documents and books especially those which contain the combination of text, drawings, images and photographs. It was developed by AT&T Labs. It uses multiple techniques like image layer separation of text and background images, progressive loading, arithmetic coding and lossy compression for bitonal images.", + "name": "Graphics File format", + "extension": "djvu", + "displayname": "Graphic File" + }, + "ppsm": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/ppsm/", + "description": "Files with PPSM extension represent Macro-enabled Slide Show file format created with Microsoft PowerPoint 2007 or higher. Another similar file format is PPTM which differs in opening with Microsoft PowerPoint in editable format instead of running as Slide Show. When run as slide show, the PPSM file shows the presentation slides with contents intact in the slide show and is in read-only mode by default. PPSM files can still be edited in Microsoft PowerPoint by opening it in PowerPoint.", + "name": "Microsoft PowerPoint Slide Show", + "extension": "ppsm", + "displayname": "PowerPoint" + }, + "csv": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/csv/", + "description": "Files with CSV (Comma Separated Values) extension represent plain text files that contain records of data with comma separated values. Each line in a CSV file is a new record from the set of records contained in the file. Such files are generated when data transfer is intended from one storage system to another. Since all applications can recognize records separated by comma, import of such data files to database is done very conveniently.", + "name": "Comma Separated Values File", + "extension": "csv", + "displayname": "Excel" + }, + "pdf": { + "fileFormatComUrl": "https://docs.fileformat.com/pdf/", + "description": "Portable Document Format (PDF) is a type of document created by Adobe back in 1990s. The purpose of this file format was to introduce a standard for representation of documents and other reference material in a format that is independent of application software, hardware as well as Operating System. PDF files can be opened in Adobe Acrobat Reader/Writer as well in most modern browsers like Chrome, Safari, Firefox via extensions/plug-ins.", + "name": "Portable Document", + "extension": "pdf", + "displayname": null + }, + "dotm": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/dotm/", + "description": "A file with DOTM extension represents template file created with Microsoft Word 2007 or higher. It is similar to the popular DOCX file format other than it retains the user defined settings for reuse in case of creating new documents. Such documents are more often used in offices where a standard template file is generated with settings like page information, margins, default layout and macros, and is used to create new documents from it when required. DOTM files, however, save macros, that are a series of commands in the form of recorded actions for automatic completion of a task. This helps save time in carrying out actions that are repeated in completion of a task.", + "name": "Microsoft Word Macro-Enabled Template", + "extension": "dotm", + "displayname": "Word" + }, + "jpg": { + "fileFormatComUrl": "https://docs.fileformat.com/image/jpeg/", + "description": "A JPEG is a type of image format that is saved using the method of lossy compression. The output image, as result of compression, is a trade-off between storage size and image quality. Users can adjust the compression level to achieve the desired quality level while at the same time reduce the storage size. Image quality is negligibly affected if 10:1 compression is applied to the image. The higher the compression value, the higher the degradation in image quality.", + "name": "Joint Photographic Expert Group Image File", + "extension": "jpg", + "displayname": "Image" + }, + "docx": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/docx/", + "description": "Docx is well-known format for Microsoft Word documents. Introduced from 2007 with the release of Microsoft Office 2007, the structure of this new Document format was changed from plain binary to a combination of XML and binary files. Docx files can be opened with Word 2007 and lateral versions but not with the earlier versions of MS Word.", + "name": "Microsoft Word Open XML Document", + "extension": "docx", + "displayname": "Word" + }, + "psd": { + "fileFormatComUrl": "https://docs.fileformat.com/image/psd/", + "description": "PSD, Photoshop Document, represents Adobe Photoshop's native file format used for graphics designing and development. PSD files may include image layers, adjustment layers, layer masks, annotations, file information, keywords and other Photoshop-specific elements. Photoshop files have default extension as .PSD and has a maximum height and width of 30,000 pixels, and a length limit of two gigabytes.", + "name": "Adobe Photoshop Document", + "extension": "psd", + "displayname": "Photoshop" + }, + "jp2": { + "fileFormatComUrl": "https://docs.fileformat.com/image/jp2/", + "description": "JPEG 2000 (JP2) is an image coding system and state-of-the-art image compression standard. Designed, using wavelet technology JPEG 2000 can code lossless content in any quality at once. Moreover, without any substantial penalty in coding efficiency, JPEG 2000 have the capability to access and decode the same content efficaciously into a variety of other resolutions and qualities. The code streams in JPEG 2000 is significantly scalable having regions of interest that provide the facility for spatial random access. Possessing Up to 16384 diverse components with the dimensions in terapixels, and precision that can be high as 38 bits/sample.", + "name": "JPEG 2000 Core Image File", + "extension": "jp2", + "displayname": "Image" + }, + "cdr": { + "fileFormatComUrl": "https://docs.fileformat.com/image/cdr/", + "description": "A CDR file is a vector drawing image file that is natively created with CorelDRAW for storing digital image encoded and compressed. Such a drawing file contains text, lines, shapes, images, colours and effects for vector representation of image contents. CDR files can be opened with CorelDRAW as the primary application and can also be converted to other formats such as PDF, JPG, PNG, BMP and AI. It can be used for representation of various graphics data like brochures, tabloids, envelopes, and postcards.", + "name": "CorelDRAW Graphics Format", + "extension": "cdr", + "displayname": null + }, + "doc": { + "fileFormatComUrl": "https://docs.fileformat.com/word-processing/doc/", + "description": "Files with .DOC extension represent documents generated by Microsoft Word or other word processing documents in binary file format. The extension was initially used for plain text documentation on several different operating systems. It can contain several different type of data such as images, formatted as well as plain text, graphs, charts, embedded objects, links, pages, page formatting, print settings and a lot others.", + "name": "Microsoft Word Document", + "extension": "doc", + "displayname": "Word" + }, + "vstx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/vstx/", + "description": "Files with VSTX extensions are drawing template files created with Microsoft Visio 2013 and above. These VSTX files provide starting point for creating Visio drawings, saved as .VSDX files, with default layout and settings. In general, Visio files are used to create drawings that contain visual objects, flow charts, UML diagram, information flow, organizational charts, software diagrams, network layout, database models, objects mapping and other similar information.", + "name": "Microsoft Visio File Format", + "extension": "vstx", + "displayname": "Visio File" + }, + "pptm": { + "fileFormatComUrl": "https://docs.fileformat.com/presentation/pptm", + "description": "Files with PPTM extension are Macro-enabled Presentation files that are created with Microsoft PowerPoint 2007 or higher versions. They are similar to PPTX files with the difference that the lateral can't execute macros though they can contain macros. PPTM files can be edited by opening them in Microsoft PowerPoint and updating the contents. Another similar format is PPSM but it is read-only by default and starts the slideshow when opened. PPTM, like PPTX, contains slides for different presentation elements like text, images, videos, graphs and other related material.", + "name": "Microsoft PowerPoint Presentation", + "extension": "pptm", + "displayname": "PowerPoint" + }, + "rvm": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/rvm/", + "description": "RVM data files are related to AVEVA PDMS. RVM file is an AVEVA Plant Design Management System Model. AVEVA's Plant Design Management System (PDMS) is the most popular 3D design system using data-centric technology for managing projects.", + "name": "Revenant Archive", + "extension": "rvm", + "displayname": "AVEVA PDMS" + }, + "otg": { + "fileFormatComUrl": "https://docs.fileformat.com/image/otg/", + "description": "An OTG file is a drawing template that is created using the OpenDocument standard that follows the OASIS Office Applications 1.0 specification. It represents the default organization of drawing elements for a vector image that can be used to further enhance the contents of the file.", + "name": "OTG", + "extension": "otg", + "displayname": null + }, + "xltm": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xltm", + "description": "The XLTM file extension represents files that are generated by Microsoft Excel as Macro-enabled template files. XLTM files are similar to XLTX in structure other than that the later doesn't support creating template files with macros. Such template files are used to generate and set the layout, formatting, and other settings along with the macros to facilitate creating similar XLSX files then.", + "name": "Microsoft Excel Macro-Enabled Template", + "extension": "xltm", + "displayname": "Excel" + }, + "xml": { + "fileFormatComUrl": "https://docs.fileformat.com/web/xml/", + "description": "XML stands for Extensible Markup Language that is similar to HTML but different in using tags for defining objects. The whole idea behind creation of XML file format was to store and transport data without being dependent on software or hardware tools. Its popularity is due to it being both human as well as machine readable. This enables it to create common data protocols in the form of objects to be stored and shared over network such as World Wide Web (WWW).", + "name": "Extended Markup Language", + "extension": "xml", + "displayname": "Extended Markup" + }, + "kml": { + "fileFormatComUrl": "https://docs.fileformat.com/gis/kml/", + "description": "KML, Keyhole Markup Language) contains geospatial information in XML notation. Files saved as KML can be opened in Geographic Information System (GIS) applications provided they support it. Many applications have started providing support for KML file format after it has been adopted as international standard.", + "name": "Keyword Markup Language File", + "extension": "kml", + "displayname": "Markup" + }, + "geojson": { + "fileFormatComUrl": "https://docs.fileformat.com/gis/geojson/", + "description": "GeoJSON is a JSON based format designed to represent the geographical features with their non-spatial attributes. This format defines different JSON (JavaScript Object Notation) objects and their joining fashion. JSON format represents a collective information about the Geographical features, their spatial extents, and properties.", + "name": "Json Open Standard Format", + "extension": "geojson", + "displayname": "Open Standard" + }, + "mpx": { + "fileFormatComUrl": "https://docs.fileformat.com/project-management/mpx/", + "description": "MPX, Microsoft Exchange File Format, is an ASCII file format for transferring of project information between Microsoft Project (MSP) and other applications that support the MPX file format such as Primavera Project Planner, Sciforma and Timerline Precision Estimating. The MPX file format allows you to transfer project information that cannot appear in a table, such as detailed resource assignment information, calendar information, or information in the Project Info dialog box. The initial version of Microsoft Project 4.0 started the support for creating and reading MPX file formats that continued till Microsoft Project 98. However, support for creating MPX files was discontinued with the release of Microsoft Project 2000 and the versions till Microsoft Project 2010 support only MPX reading. Versions later than MSP 2010 do not support reading of MPX file format.", + "name": "Microsoft Exchange File Format", + "extension": "mpx", + "displayname": null + }, + "tiff": { + "fileFormatComUrl": "https://docs.fileformat.com/image/tiff/", + "description": "TIFF or TIF, Tagged Image File Format, represents raster images that are meant for usage on a variety of devices that comply with this file format standard. It is capable of describing bilevel, grayscale, palette-color and full-color image data in several color spaces. It supports lossy as well as lossless compression schemes to choose between space and time for applications using the format.", + "name": "Tagged Image File Format", + "extension": "tiff", + "displayname": "Tagged Image" + }, + "shapefile": { + "fileFormatComUrl": "https://docs.fileformat.com/gis/shp/", + "description": "SHP is the file extension for one of the primary file types used for representation of ESRI Shapefile. It represents Geospatial information in the form of vector data to be used by Geographic Information Systems (GIS) applications. The format has been developed as open specifications in order to facilitate interoperability between ESRI and other software products.", + "name": "ESRI Shapefile", + "extension": "shapefile", + "displayname": null + }, + "tar.gz": { + "fileFormatComUrl": "https://docs.fileformat.com/compression/gz/", + "description": "Files with .gz extension are compressed files created with gzip compression application. It can contain multiple compressed files and is commonly used on UNIX and Linux systems. GZIP was introduced as a free utility for replacing the Compress program used in Unix systems. Such files can be opened and extracted with a several applications such as WinZip which is available on both Windows and MacOS. While the format is similar to .ZIP compression in archiving, it differs in terms of compression applied to the archive instead of individual file.", + "name": "GZip Compressed File", + "extension": "tar.gz", + "displayname": null + }, + "ase": { + "fileFormatComUrl": "https://docs.fileformat.com/3d/ase/", + "description": "An ASE file is a 2D animation or graphics that contain layers, frames, palettes, tags, and settings.", + "name": "Aseprite Sprite File", + "extension": "ase", + "displayname": null + }, + "cmx": { + "fileFormatComUrl": "https://docs.fileformat.com/image/cmx/", + "description": "Files with CMX extension are Corel Exchange image file format that is used as presentation by CorelSuite applications. It contains image data as vector graphics as well as metadata that describes the image. CMX files can be opened by CorelDraw, Corel Presentations, Paint Shop Pro and some versions of Adobe Illustrator. ", + "name": "Corel Metafile Exchange Image", + "extension": "cmx", + "displayname": null + }, + "xlsm": { + "fileFormatComUrl": "https://docs.fileformat.com/spreadsheet/xlsm/", + "description": "Files with XLSM extension is a type of Spreasheet files that support Macros. From application point of view, a Macro is set of instructions that are used for automating processes. A macro is used to record the steps that are performed repeatedly and facilitates performing the actions by running the macro again. Macros are programmed with Microsoft's Visual Basic for Applications (VBA) from within the Excel Workbook using the Visual Basic Editor and can be run/debug directly from there.", + "name": "Microsoft Excel Macro-Enabled Spreadsheet", + "extension": "xlsm", + "displayname": "Excel" + }, + "zip": { + "fileFormatComUrl": "https://docs.fileformat.com/compression/zip/", + "description": "ZIP file extension represents archives that can hold one or more files or directories. The archive can have compression applied to the included files in order to reduce the ZIP file size. ZIP file format was made public back in February 1989 by Phil Katz for achieving archiving of files and folders. The format was made part of PKZIP utility, created by PKWARE, Inc.", + "name": "WinZIP Compressed Archive", + "extension": "zip", + "displayname": "Archives " + }, + "rar": { + "fileFormatComUrl": "https://docs.fileformat.com/compression/rar/", + "description": "Files with .rar extension represent archive files that are created for storing information in compressed or normal form. RAR, Roshal ARchive file format, is a proprietary file format created by Eugene Roshal in 1995 who was a Russian software engineer. The format is used to archive files with different methods including various compression techniques. There are several application software available for Windows, Linux and MacOS for extraction of RAR files. WinRAR software, by RARLab, is the shareware file archiving utility (free for 40 days) for Microsoft Windows platform; the software was ported to Linux (only as extractor) by the same Author, Eugene Roshal.", + "name": "RAR Compressed Archive", + "extension": "rar", + "displayname": null + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/App_Data/generated_pages.json b/Demos/Apps/Aspose.Cells.Common/App_Data/generated_pages.json new file mode 100644 index 000000000..e6cd17dca --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/App_Data/generated_pages.json @@ -0,0 +1,4581 @@ +[ + { + "Url": "/cells/conversion/xlsx-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "XLSX to PDF", + "Extension1": "xlsx", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/xlsx-to-xls", + "AppUrl": "/cells/conversion", + "Name": "XLSX to XLS", + "Extension1": "xlsx", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/xlsx-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "XLSX to XLSM", + "Extension1": "xlsx", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/xlsx-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "XLSX to XLSB", + "Extension1": "xlsx", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/xlsx-to-ods", + "AppUrl": "/cells/conversion", + "Name": "XLSX to ODS", + "Extension1": "xlsx", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/xlsx-to-csv", + "AppUrl": "/cells/conversion", + "Name": "XLSX to CSV", + "Extension1": "xlsx", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/xlsx-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "XLSX to TSV", + "Extension1": "xlsx", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/xlsx-to-html", + "AppUrl": "/cells/conversion", + "Name": "XLSX to HTML", + "Extension1": "xlsx", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/xlsx-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "XLSX to BMP", + "Extension1": "xlsx", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/xlsx-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "XLSX to JPG", + "Extension1": "xlsx", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/xlsx-to-png", + "AppUrl": "/cells/conversion", + "Name": "XLSX to PNG", + "Extension1": "xlsx", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/xlsx-to-svg", + "AppUrl": "/cells/conversion", + "Name": "XLSX to SVG", + "Extension1": "xlsx", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/xlsx-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "XLSX to TIFF", + "Extension1": "xlsx", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/xlsx-to-xps", + "AppUrl": "/cells/conversion", + "Name": "XLSX to XPS", + "Extension1": "xlsx", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/xlsx-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "XLSX to MHTML", + "Extension1": "xlsx", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/xlsx-to-md", + "AppUrl": "/cells/conversion", + "Name": "XLSX to MD", + "Extension1": "xlsx", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/xlsx-to-word", + "AppUrl": "/cells/conversion", + "Name": "XLSX to WORD", + "Extension1": "xlsx", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/xlsx-to-docx", + "AppUrl": "/cells/conversion", + "Name": "XLSX to DOCX", + "Extension1": "xlsx", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/xlsx-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "XLSX to PPT", + "Extension1": "xlsx", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/xlsx-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "XLSX to PPTX", + "Extension1": "xlsx", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/xlsx-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "XLSX to POWERPOINT", + "Extension1": "xlsx", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/xls-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "XLS to PDF", + "Extension1": "xls", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/xls-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "XLS to XLSX", + "Extension1": "xls", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/xls-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "XLS to XLSM", + "Extension1": "xls", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/xls-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "XLS to XLSB", + "Extension1": "xls", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/xls-to-ods", + "AppUrl": "/cells/conversion", + "Name": "XLS to ODS", + "Extension1": "xls", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/xls-to-csv", + "AppUrl": "/cells/conversion", + "Name": "XLS to CSV", + "Extension1": "xls", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/xls-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "XLS to TSV", + "Extension1": "xls", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/xls-to-html", + "AppUrl": "/cells/conversion", + "Name": "XLS to HTML", + "Extension1": "xls", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/xls-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "XLS to BMP", + "Extension1": "xls", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/xls-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "XLS to JPG", + "Extension1": "xls", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/xls-to-png", + "AppUrl": "/cells/conversion", + "Name": "XLS to PNG", + "Extension1": "xls", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/xls-to-svg", + "AppUrl": "/cells/conversion", + "Name": "XLS to SVG", + "Extension1": "xls", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/xls-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "XLS to TIFF", + "Extension1": "xls", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/xls-to-xps", + "AppUrl": "/cells/conversion", + "Name": "XLS to XPS", + "Extension1": "xls", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/xls-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "XLS to MHTML", + "Extension1": "xls", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/xls-to-md", + "AppUrl": "/cells/conversion", + "Name": "XLS to MD", + "Extension1": "xls", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/xls-to-word", + "AppUrl": "/cells/conversion", + "Name": "XLS to WORD", + "Extension1": "xls", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/xls-to-docx", + "AppUrl": "/cells/conversion", + "Name": "XLS to DOCX", + "Extension1": "xls", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/xls-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "XLS to PPT", + "Extension1": "xls", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/xls-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "XLS to PPTX", + "Extension1": "xls", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/xls-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "XLS to POWERPOINT", + "Extension1": "xls", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/xlsm-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "XLSM to PDF", + "Extension1": "xlsm", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/xlsm-to-xls", + "AppUrl": "/cells/conversion", + "Name": "XLSM to XLS", + "Extension1": "xlsm", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/xlsm-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "XLSM to XLSX", + "Extension1": "xlsm", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/xlsm-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "XLSM to XLSB", + "Extension1": "xlsm", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/xlsm-to-ods", + "AppUrl": "/cells/conversion", + "Name": "XLSM to ODS", + "Extension1": "xlsm", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/xlsm-to-csv", + "AppUrl": "/cells/conversion", + "Name": "XLSM to CSV", + "Extension1": "xlsm", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/xlsm-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "XLSM to TSV", + "Extension1": "xlsm", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/xlsm-to-html", + "AppUrl": "/cells/conversion", + "Name": "XLSM to HTML", + "Extension1": "xlsm", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/xlsm-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "XLSM to BMP", + "Extension1": "xlsm", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/xlsm-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "XLSM to JPG", + "Extension1": "xlsm", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/xlsm-to-png", + "AppUrl": "/cells/conversion", + "Name": "XLSM to PNG", + "Extension1": "xlsm", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/xlsm-to-svg", + "AppUrl": "/cells/conversion", + "Name": "XLSM to SVG", + "Extension1": "xlsm", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/xlsm-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "XLSM to TIFF", + "Extension1": "xlsm", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/xlsm-to-xps", + "AppUrl": "/cells/conversion", + "Name": "XLSM to XPS", + "Extension1": "xlsm", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/xlsm-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "XLSM to MHTML", + "Extension1": "xlsm", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/xlsm-to-md", + "AppUrl": "/cells/conversion", + "Name": "XLSM to MD", + "Extension1": "xlsm", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/xlsm-to-word", + "AppUrl": "/cells/conversion", + "Name": "XLSM to WORD", + "Extension1": "xlsm", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/xlsm-to-docx", + "AppUrl": "/cells/conversion", + "Name": "XLSM to DOCX", + "Extension1": "xlsm", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/xlsm-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "XLSM to PPT", + "Extension1": "xlsm", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/xlsm-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "XLSM to PPTX", + "Extension1": "xlsm", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/xlsm-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "XLSM to POWERPOINT", + "Extension1": "xlsm", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/xlsb-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "XLSB to PDF", + "Extension1": "xlsb", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/xlsb-to-xls", + "AppUrl": "/cells/conversion", + "Name": "XLSB to XLS", + "Extension1": "xlsb", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/xlsb-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "XLSB to XLSX", + "Extension1": "xlsb", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/xlsb-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "XLSB to XLSM", + "Extension1": "xlsb", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/xlsb-to-ods", + "AppUrl": "/cells/conversion", + "Name": "XLSB to ODS", + "Extension1": "xlsb", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/xlsb-to-csv", + "AppUrl": "/cells/conversion", + "Name": "XLSB to CSV", + "Extension1": "xlsb", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/xlsb-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "XLSB to TSV", + "Extension1": "xlsb", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/xlsb-to-html", + "AppUrl": "/cells/conversion", + "Name": "XLSB to HTML", + "Extension1": "xlsb", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/xlsb-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "XLSB to BMP", + "Extension1": "xlsb", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/xlsb-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "XLSB to JPG", + "Extension1": "xlsb", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/xlsb-to-png", + "AppUrl": "/cells/conversion", + "Name": "XLSB to PNG", + "Extension1": "xlsb", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/xlsb-to-svg", + "AppUrl": "/cells/conversion", + "Name": "XLSB to SVG", + "Extension1": "xlsb", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/xlsb-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "XLSB to TIFF", + "Extension1": "xlsb", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/xlsb-to-xps", + "AppUrl": "/cells/conversion", + "Name": "XLSB to XPS", + "Extension1": "xlsb", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/xlsb-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "XLSB to MHTML", + "Extension1": "xlsb", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/xlsb-to-md", + "AppUrl": "/cells/conversion", + "Name": "XLSB to MD", + "Extension1": "xlsb", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/xlsb-to-word", + "AppUrl": "/cells/conversion", + "Name": "XLSB to WORD", + "Extension1": "xlsb", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/xlsb-to-docx", + "AppUrl": "/cells/conversion", + "Name": "XLSB to DOCX", + "Extension1": "xlsb", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/xlsb-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "XLSB to PPT", + "Extension1": "xlsb", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/xlsb-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "XLSB to PPTX", + "Extension1": "xlsb", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/xlsb-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "XLSB to POWERPOINT", + "Extension1": "xlsb", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/ods-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "ODS to PDF", + "Extension1": "ods", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/ods-to-xls", + "AppUrl": "/cells/conversion", + "Name": "ODS to XLS", + "Extension1": "ods", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/ods-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "ODS to XLSX", + "Extension1": "ods", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/ods-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "ODS to XLSM", + "Extension1": "ods", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/ods-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "ODS to XLSB", + "Extension1": "ods", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/ods-to-csv", + "AppUrl": "/cells/conversion", + "Name": "ODS to CSV", + "Extension1": "ods", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/ods-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "ODS to TSV", + "Extension1": "ods", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/ods-to-html", + "AppUrl": "/cells/conversion", + "Name": "ODS to HTML", + "Extension1": "ods", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/ods-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "ODS to BMP", + "Extension1": "ods", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/ods-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "ODS to JPG", + "Extension1": "ods", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/ods-to-png", + "AppUrl": "/cells/conversion", + "Name": "ODS to PNG", + "Extension1": "ods", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/ods-to-svg", + "AppUrl": "/cells/conversion", + "Name": "ODS to SVG", + "Extension1": "ods", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/ods-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "ODS to TIFF", + "Extension1": "ods", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/ods-to-xps", + "AppUrl": "/cells/conversion", + "Name": "ODS to XPS", + "Extension1": "ods", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/ods-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "ODS to MHTML", + "Extension1": "ods", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/ods-to-md", + "AppUrl": "/cells/conversion", + "Name": "ODS to MD", + "Extension1": "ods", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/ods-to-word", + "AppUrl": "/cells/conversion", + "Name": "ODS to WORD", + "Extension1": "ods", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/ods-to-docx", + "AppUrl": "/cells/conversion", + "Name": "ODS to DOCX", + "Extension1": "ods", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/ods-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "ODS to PPT", + "Extension1": "ods", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/ods-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "ODS to PPTX", + "Extension1": "ods", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/ods-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "ODS to POWERPOINT", + "Extension1": "ods", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/csv-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "CSV to PDF", + "Extension1": "csv", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/csv-to-xls", + "AppUrl": "/cells/conversion", + "Name": "CSV to XLS", + "Extension1": "csv", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/csv-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "CSV to XLSX", + "Extension1": "csv", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/csv-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "CSV to XLSM", + "Extension1": "csv", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/csv-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "CSV to XLSB", + "Extension1": "csv", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/csv-to-ods", + "AppUrl": "/cells/conversion", + "Name": "CSV to ODS", + "Extension1": "csv", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/csv-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "CSV to TSV", + "Extension1": "csv", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/csv-to-html", + "AppUrl": "/cells/conversion", + "Name": "CSV to HTML", + "Extension1": "csv", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/csv-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "CSV to BMP", + "Extension1": "csv", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/csv-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "CSV to JPG", + "Extension1": "csv", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/csv-to-png", + "AppUrl": "/cells/conversion", + "Name": "CSV to PNG", + "Extension1": "csv", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/csv-to-svg", + "AppUrl": "/cells/conversion", + "Name": "CSV to SVG", + "Extension1": "csv", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/csv-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "CSV to TIFF", + "Extension1": "csv", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/csv-to-xps", + "AppUrl": "/cells/conversion", + "Name": "CSV to XPS", + "Extension1": "csv", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/csv-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "CSV to MHTML", + "Extension1": "csv", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/csv-to-md", + "AppUrl": "/cells/conversion", + "Name": "CSV to MD", + "Extension1": "csv", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/csv-to-word", + "AppUrl": "/cells/conversion", + "Name": "CSV to WORD", + "Extension1": "csv", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/csv-to-docx", + "AppUrl": "/cells/conversion", + "Name": "CSV to DOCX", + "Extension1": "csv", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/csv-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "CSV to PPT", + "Extension1": "csv", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/csv-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "CSV to PPTX", + "Extension1": "csv", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/csv-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "CSV to POWERPOINT", + "Extension1": "csv", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/tsv-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "TSV to PDF", + "Extension1": "tsv", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/tsv-to-xls", + "AppUrl": "/cells/conversion", + "Name": "TSV to XLS", + "Extension1": "tsv", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/tsv-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "TSV to XLSX", + "Extension1": "tsv", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/tsv-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "TSV to XLSM", + "Extension1": "tsv", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/tsv-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "TSV to XLSB", + "Extension1": "tsv", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/tsv-to-ods", + "AppUrl": "/cells/conversion", + "Name": "TSV to ODS", + "Extension1": "tsv", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/tsv-to-csv", + "AppUrl": "/cells/conversion", + "Name": "TSV to CSV", + "Extension1": "tsv", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/tsv-to-html", + "AppUrl": "/cells/conversion", + "Name": "TSV to HTML", + "Extension1": "tsv", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/tsv-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "TSV to BMP", + "Extension1": "tsv", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/tsv-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "TSV to JPG", + "Extension1": "tsv", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/tsv-to-png", + "AppUrl": "/cells/conversion", + "Name": "TSV to PNG", + "Extension1": "tsv", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/tsv-to-svg", + "AppUrl": "/cells/conversion", + "Name": "TSV to SVG", + "Extension1": "tsv", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/tsv-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "TSV to TIFF", + "Extension1": "tsv", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/tsv-to-xps", + "AppUrl": "/cells/conversion", + "Name": "TSV to XPS", + "Extension1": "tsv", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/tsv-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "TSV to MHTML", + "Extension1": "tsv", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/tsv-to-md", + "AppUrl": "/cells/conversion", + "Name": "TSV to MD", + "Extension1": "tsv", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/tsv-to-word", + "AppUrl": "/cells/conversion", + "Name": "TSV to WORD", + "Extension1": "tsv", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/tsv-to-docx", + "AppUrl": "/cells/conversion", + "Name": "TSV to DOCX", + "Extension1": "tsv", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/tsv-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "TSV to PPT", + "Extension1": "tsv", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/tsv-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "TSV to PPTX", + "Extension1": "tsv", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/tsv-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "TSV to POWERPOINT", + "Extension1": "tsv", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/html-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "HTML to PDF", + "Extension1": "html", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/html-to-xls", + "AppUrl": "/cells/conversion", + "Name": "HTML to XLS", + "Extension1": "html", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/html-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "HTML to XLSX", + "Extension1": "html", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/html-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "HTML to XLSM", + "Extension1": "html", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/html-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "HTML to XLSB", + "Extension1": "html", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/html-to-ods", + "AppUrl": "/cells/conversion", + "Name": "HTML to ODS", + "Extension1": "html", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/html-to-csv", + "AppUrl": "/cells/conversion", + "Name": "HTML to CSV", + "Extension1": "html", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/html-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "HTML to TSV", + "Extension1": "html", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/html-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "HTML to BMP", + "Extension1": "html", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/html-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "HTML to JPG", + "Extension1": "html", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/html-to-png", + "AppUrl": "/cells/conversion", + "Name": "HTML to PNG", + "Extension1": "html", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/html-to-svg", + "AppUrl": "/cells/conversion", + "Name": "HTML to SVG", + "Extension1": "html", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/html-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "HTML to TIFF", + "Extension1": "html", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/html-to-xps", + "AppUrl": "/cells/conversion", + "Name": "HTML to XPS", + "Extension1": "html", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/html-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "HTML to MHTML", + "Extension1": "html", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/html-to-md", + "AppUrl": "/cells/conversion", + "Name": "HTML to MD", + "Extension1": "html", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/html-to-word", + "AppUrl": "/cells/conversion", + "Name": "HTML to WORD", + "Extension1": "html", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/html-to-docx", + "AppUrl": "/cells/conversion", + "Name": "HTML to DOCX", + "Extension1": "html", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/html-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "HTML to PPT", + "Extension1": "html", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/html-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "HTML to PPTX", + "Extension1": "html", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/html-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "HTML to POWERPOINT", + "Extension1": "html", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/mht-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "MHT to PDF", + "Extension1": "mht", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/mht-to-xls", + "AppUrl": "/cells/conversion", + "Name": "MHT to XLS", + "Extension1": "mht", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/mht-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "MHT to XLSX", + "Extension1": "mht", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/mht-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "MHT to XLSM", + "Extension1": "mht", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/mht-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "MHT to XLSB", + "Extension1": "mht", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/mht-to-ods", + "AppUrl": "/cells/conversion", + "Name": "MHT to ODS", + "Extension1": "mht", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/mht-to-csv", + "AppUrl": "/cells/conversion", + "Name": "MHT to CSV", + "Extension1": "mht", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/mht-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "MHT to TSV", + "Extension1": "mht", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/mht-to-html", + "AppUrl": "/cells/conversion", + "Name": "MHT to HTML", + "Extension1": "mht", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/mht-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "MHT to BMP", + "Extension1": "mht", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/mht-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "MHT to JPG", + "Extension1": "mht", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/mht-to-png", + "AppUrl": "/cells/conversion", + "Name": "MHT to PNG", + "Extension1": "mht", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/mht-to-svg", + "AppUrl": "/cells/conversion", + "Name": "MHT to SVG", + "Extension1": "mht", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/mht-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "MHT to TIFF", + "Extension1": "mht", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/mht-to-xps", + "AppUrl": "/cells/conversion", + "Name": "MHT to XPS", + "Extension1": "mht", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/mht-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "MHT to MHTML", + "Extension1": "mht", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/mht-to-md", + "AppUrl": "/cells/conversion", + "Name": "MHT to MD", + "Extension1": "mht", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/mht-to-word", + "AppUrl": "/cells/conversion", + "Name": "MHT to WORD", + "Extension1": "mht", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/mht-to-docx", + "AppUrl": "/cells/conversion", + "Name": "MHT to DOCX", + "Extension1": "mht", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/mht-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "MHT to PPT", + "Extension1": "mht", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/mht-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "MHT to PPTX", + "Extension1": "mht", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/mht-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "MHT to POWERPOINT", + "Extension1": "mht", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/mhtml-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "MHTML to PDF", + "Extension1": "mhtml", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/mhtml-to-xls", + "AppUrl": "/cells/conversion", + "Name": "MHTML to XLS", + "Extension1": "mhtml", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/mhtml-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "MHTML to XLSX", + "Extension1": "mhtml", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/mhtml-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "MHTML to XLSM", + "Extension1": "mhtml", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/mhtml-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "MHTML to XLSB", + "Extension1": "mhtml", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/mhtml-to-ods", + "AppUrl": "/cells/conversion", + "Name": "MHTML to ODS", + "Extension1": "mhtml", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/mhtml-to-csv", + "AppUrl": "/cells/conversion", + "Name": "MHTML to CSV", + "Extension1": "mhtml", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/mhtml-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "MHTML to TSV", + "Extension1": "mhtml", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/mhtml-to-html", + "AppUrl": "/cells/conversion", + "Name": "MHTML to HTML", + "Extension1": "mhtml", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/mhtml-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "MHTML to BMP", + "Extension1": "mhtml", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/mhtml-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "MHTML to JPG", + "Extension1": "mhtml", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/mhtml-to-png", + "AppUrl": "/cells/conversion", + "Name": "MHTML to PNG", + "Extension1": "mhtml", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/mhtml-to-svg", + "AppUrl": "/cells/conversion", + "Name": "MHTML to SVG", + "Extension1": "mhtml", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/mhtml-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "MHTML to TIFF", + "Extension1": "mhtml", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/mhtml-to-xps", + "AppUrl": "/cells/conversion", + "Name": "MHTML to XPS", + "Extension1": "mhtml", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/mhtml-to-md", + "AppUrl": "/cells/conversion", + "Name": "MHTML to MD", + "Extension1": "mhtml", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/mhtml-to-word", + "AppUrl": "/cells/conversion", + "Name": "MHTML to WORD", + "Extension1": "mhtml", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/mhtml-to-docx", + "AppUrl": "/cells/conversion", + "Name": "MHTML to DOCX", + "Extension1": "mhtml", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/mhtml-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "MHTML to PPT", + "Extension1": "mhtml", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/mhtml-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "MHTML to PPTX", + "Extension1": "mhtml", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/mhtml-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "MHTML to POWERPOINT", + "Extension1": "mhtml", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/excel-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to PDF", + "Extension1": "excel", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/excel-to-ods", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to ODS", + "Extension1": "excel", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/excel-to-csv", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to CSV", + "Extension1": "excel", + "Extension2": "csv" + }, + { + "Url": "/cells/conversion/excel-to-tsv", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to TSV", + "Extension1": "excel", + "Extension2": "tsv" + }, + { + "Url": "/cells/conversion/excel-to-html", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to HTML", + "Extension1": "excel", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/excel-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to BMP", + "Extension1": "excel", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/excel-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to JPG", + "Extension1": "excel", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/excel-to-png", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to PNG", + "Extension1": "excel", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/excel-to-svg", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to SVG", + "Extension1": "excel", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/excel-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to TIFF", + "Extension1": "excel", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/excel-to-xps", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to XPS", + "Extension1": "excel", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/excel-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to MHTML", + "Extension1": "excel", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/excel-to-md", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to MD", + "Extension1": "excel", + "Extension2": "md" + }, + { + "Url": "/cells/conversion/excel-to-word", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to WORD", + "Extension1": "excel", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/excel-to-docx", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to DOCX", + "Extension1": "excel", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/excel-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to PPT", + "Extension1": "excel", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/excel-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to PPTX", + "Extension1": "excel", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/excel-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "EXCEL to POWERPOINT", + "Extension1": "excel", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/jpeg-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "JPEG to PDF", + "Extension1": "jpeg", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/jpeg-to-xls", + "AppUrl": "/cells/conversion", + "Name": "JPEG to XLS", + "Extension1": "jpeg", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/jpeg-to-excel", + "AppUrl": "/cells/conversion", + "Name": "JPEG to EXCEL", + "Extension1": "jpeg", + "Extension2": "excel" + }, + { + "Url": "/cells/conversion/jpeg-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "JPEG to XLSX", + "Extension1": "jpeg", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/jpeg-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "JPEG to XLSM", + "Extension1": "jpeg", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/jpeg-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "JPEG to XLSB", + "Extension1": "jpeg", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/jpeg-to-ods", + "AppUrl": "/cells/conversion", + "Name": "JPEG to ODS", + "Extension1": "jpeg", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/jpeg-to-html", + "AppUrl": "/cells/conversion", + "Name": "JPEG to HTML", + "Extension1": "jpeg", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/jpeg-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "JPEG to BMP", + "Extension1": "jpeg", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/jpeg-to-png", + "AppUrl": "/cells/conversion", + "Name": "JPEG to PNG", + "Extension1": "jpeg", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/jpeg-to-svg", + "AppUrl": "/cells/conversion", + "Name": "JPEG to SVG", + "Extension1": "jpeg", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/jpeg-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "JPEG to TIFF", + "Extension1": "jpeg", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/jpeg-to-xps", + "AppUrl": "/cells/conversion", + "Name": "JPEG to XPS", + "Extension1": "jpeg", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/jpeg-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "JPEG to MHTML", + "Extension1": "jpeg", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/jpeg-to-word", + "AppUrl": "/cells/conversion", + "Name": "JPEG to WORD", + "Extension1": "jpeg", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/jpeg-to-docx", + "AppUrl": "/cells/conversion", + "Name": "JPEG to DOCX", + "Extension1": "jpeg", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/jpeg-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "JPEG to PPT", + "Extension1": "jpeg", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/jpeg-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "JPEG to PPTX", + "Extension1": "jpeg", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/jpeg-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "JPEG to POWERPOINT", + "Extension1": "jpeg", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/jpg-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "JPG to PDF", + "Extension1": "jpg", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/jpg-to-xls", + "AppUrl": "/cells/conversion", + "Name": "JPG to XLS", + "Extension1": "jpg", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/jpg-to-excel", + "AppUrl": "/cells/conversion", + "Name": "JPG to EXCEL", + "Extension1": "jpg", + "Extension2": "excel" + }, + { + "Url": "/cells/conversion/jpg-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "JPG to XLSX", + "Extension1": "jpg", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/jpg-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "JPG to XLSM", + "Extension1": "jpg", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/jpg-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "JPG to XLSB", + "Extension1": "jpg", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/jpg-to-ods", + "AppUrl": "/cells/conversion", + "Name": "JPG to ODS", + "Extension1": "jpg", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/jpg-to-html", + "AppUrl": "/cells/conversion", + "Name": "JPG to HTML", + "Extension1": "jpg", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/jpg-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "JPG to BMP", + "Extension1": "jpg", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/jpg-to-png", + "AppUrl": "/cells/conversion", + "Name": "JPG to PNG", + "Extension1": "jpg", + "Extension2": "png" + }, + { + "Url": "/cells/conversion/jpg-to-svg", + "AppUrl": "/cells/conversion", + "Name": "JPG to SVG", + "Extension1": "jpg", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/jpg-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "JPG to TIFF", + "Extension1": "jpg", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/jpg-to-xps", + "AppUrl": "/cells/conversion", + "Name": "JPG to XPS", + "Extension1": "jpg", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/jpg-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "JPG to MHTML", + "Extension1": "jpg", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/jpg-to-word", + "AppUrl": "/cells/conversion", + "Name": "JPG to WORD", + "Extension1": "jpg", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/jpg-to-docx", + "AppUrl": "/cells/conversion", + "Name": "JPG to DOCX", + "Extension1": "jpg", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/jpg-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "JPG to PPT", + "Extension1": "jpg", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/jpg-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "JPG to PPTX", + "Extension1": "jpg", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/jpg-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "JPG to POWERPOINT", + "Extension1": "jpg", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/conversion/png-to-pdf", + "AppUrl": "/cells/conversion", + "Name": "PNG to PDF", + "Extension1": "png", + "Extension2": "pdf" + }, + { + "Url": "/cells/conversion/png-to-xls", + "AppUrl": "/cells/conversion", + "Name": "PNG to XLS", + "Extension1": "png", + "Extension2": "xls" + }, + { + "Url": "/cells/conversion/png-to-excel", + "AppUrl": "/cells/conversion", + "Name": "PNG to EXCEL", + "Extension1": "png", + "Extension2": "excel" + }, + { + "Url": "/cells/conversion/png-to-xlsx", + "AppUrl": "/cells/conversion", + "Name": "PNG to XLSX", + "Extension1": "png", + "Extension2": "xlsx" + }, + { + "Url": "/cells/conversion/png-to-xlsm", + "AppUrl": "/cells/conversion", + "Name": "PNG to XLSM", + "Extension1": "png", + "Extension2": "xlsm" + }, + { + "Url": "/cells/conversion/png-to-xlsb", + "AppUrl": "/cells/conversion", + "Name": "PNG to XLSB", + "Extension1": "png", + "Extension2": "xlsb" + }, + { + "Url": "/cells/conversion/png-to-ods", + "AppUrl": "/cells/conversion", + "Name": "PNG to ODS", + "Extension1": "png", + "Extension2": "ods" + }, + { + "Url": "/cells/conversion/png-to-html", + "AppUrl": "/cells/conversion", + "Name": "PNG to HTML", + "Extension1": "png", + "Extension2": "html" + }, + { + "Url": "/cells/conversion/png-to-bmp", + "AppUrl": "/cells/conversion", + "Name": "PNG to BMP", + "Extension1": "png", + "Extension2": "bmp" + }, + { + "Url": "/cells/conversion/png-to-jpg", + "AppUrl": "/cells/conversion", + "Name": "PNG to JPG", + "Extension1": "png", + "Extension2": "jpg" + }, + { + "Url": "/cells/conversion/png-to-svg", + "AppUrl": "/cells/conversion", + "Name": "PNG to SVG", + "Extension1": "png", + "Extension2": "svg" + }, + { + "Url": "/cells/conversion/png-to-tiff", + "AppUrl": "/cells/conversion", + "Name": "PNG to TIFF", + "Extension1": "png", + "Extension2": "tiff" + }, + { + "Url": "/cells/conversion/png-to-xps", + "AppUrl": "/cells/conversion", + "Name": "PNG to XPS", + "Extension1": "png", + "Extension2": "xps" + }, + { + "Url": "/cells/conversion/png-to-mhtml", + "AppUrl": "/cells/conversion", + "Name": "PNG to MHTML", + "Extension1": "png", + "Extension2": "mhtml" + }, + { + "Url": "/cells/conversion/png-to-word", + "AppUrl": "/cells/conversion", + "Name": "PNG to WORD", + "Extension1": "png", + "Extension2": "word" + }, + { + "Url": "/cells/conversion/png-to-docx", + "AppUrl": "/cells/conversion", + "Name": "PNG to DOCX", + "Extension1": "png", + "Extension2": "docx" + }, + { + "Url": "/cells/conversion/png-to-ppt", + "AppUrl": "/cells/conversion", + "Name": "PNG to PPT", + "Extension1": "png", + "Extension2": "ppt" + }, + { + "Url": "/cells/conversion/png-to-pptx", + "AppUrl": "/cells/conversion", + "Name": "PNG to PPTX", + "Extension1": "png", + "Extension2": "pptx" + }, + { + "Url": "/cells/conversion/png-to-powerpoint", + "AppUrl": "/cells/conversion", + "Name": "PNG to POWERPOINT", + "Extension1": "png", + "Extension2": "powerpoint" + }, + + { + "Url": "/cells/viewer/excel", + "AppUrl": "/cells/viewer", + "Extension1": "excel", + "Name": "EXCEL Viewer" + }, + { + "Url": "/cells/viewer/xls", + "AppUrl": "/cells/viewer", + "Extension1": "xls", + "Name": "XLS Viewer" + }, + { + "Url": "/cells/viewer/xlsx", + "AppUrl": "/cells/viewer", + "Extension1": "xlsx", + "Name": "XLSX Viewer" + }, + { + "Url": "/cells/viewer/xlsm", + "AppUrl": "/cells/viewer", + "Extension1": "xlsm", + "Name": "XLSM Viewer" + }, + { + "Url": "/cells/viewer/xlsb", + "AppUrl": "/cells/viewer", + "Extension1": "xlsb", + "Name": "XLSB Viewer" + }, + { + "Url": "/cells/viewer/ods", + "AppUrl": "/cells/viewer", + "Extension1": "ods", + "Name": "ODS Viewer" + }, + { + "Url": "/cells/viewer/csv", + "AppUrl": "/cells/viewer", + "Extension1": "csv", + "Name": "CSV Viewer" + }, + { + "Url": "/cells/viewer/tsv", + "AppUrl": "/cells/viewer", + "Extension1": "tsv", + "Name": "TSV Viewer" + }, + { + "Url": "/cells/viewer/html", + "AppUrl": "/cells/viewer", + "Extension1": "html", + "Name": "HTML Viewer" + }, + { + "Url": "/cells/viewer/mht", + "AppUrl": "/cells/viewer", + "Extension1": "mht", + "Name": "MHT Viewer" + }, + { + "Url": "/cells/viewer/mhtml", + "AppUrl": "/cells/viewer", + "Extension1": "mhtml", + "Name": "MHTML Viewer" + }, + + { + "Url": "/cells/metadata/xls", + "AppUrl": "/cells/metadata", + "Extension1": "xls", + "Name": "XLS Metadata" + }, + { + "Url": "/cells/metadata/xlsx", + "AppUrl": "/cells/metadata", + "Extension1": "xlsx", + "Name": "XLSX Metadata" + }, + { + "Url": "/cells/metadata/xlsm", + "AppUrl": "/cells/metadata", + "Extension1": "xlsm", + "Name": "XLSM Metadata" + }, + { + "Url": "/cells/metadata/xlsb", + "AppUrl": "/cells/metadata", + "Extension1": "xlsb", + "Name": "XLSB Metadata" + }, + { + "Url": "/cells/metadata/ods", + "AppUrl": "/cells/metadata", + "Extension1": "ods", + "Name": "ODS Metadata" + }, + + { + "Url": "/cells/search/xls", + "AppUrl": "/cells/search", + "Extension1": "xls", + "Name": "XLS Search" + }, + { + "Url": "/cells/search/xlsx", + "AppUrl": "/cells/search", + "Extension1": "xlsx", + "Name": "XLSX Search" + }, + { + "Url": "/cells/search/xlsm", + "AppUrl": "/cells/search", + "Extension1": "xlsm", + "Name": "XLSM Search" + }, + { + "Url": "/cells/search/xlsb", + "AppUrl": "/cells/search", + "Extension1": "xlsb", + "Name": "XLSB Search" + }, + { + "Url": "/cells/search/ods", + "AppUrl": "/cells/search", + "Extension1": "ods", + "Name": "ODS Search" + }, + { + "Url": "/cells/search/csv", + "AppUrl": "/cells/search", + "Extension1": "csv", + "Name": "CSV Search" + }, + { + "Url": "/cells/search/txt", + "AppUrl": "/cells/search", + "Extension1": "txt", + "Name": "TXT Search" + }, + { + "Url": "/cells/search/tsv", + "AppUrl": "/cells/search", + "Extension1": "tsv", + "Name": "TSV Search" + }, + + { + "Url": "/cells/watermark/xls", + "AppUrl": "/cells/watermark", + "Extension1": "xls", + "Name": "XLS Watermark" + }, + { + "Url": "/cells/watermark/xlsx", + "AppUrl": "/cells/watermark", + "Extension1": "xlsx", + "Name": "XLSX Watermark" + }, + { + "Url": "/cells/watermark/xlsm", + "AppUrl": "/cells/watermark", + "Extension1": "xlsm", + "Name": "XLSM Watermark" + }, + { + "Url": "/cells/watermark/xlsb", + "AppUrl": "/cells/watermark", + "Extension1": "xlsb", + "Name": "XLSB Watermark" + }, + { + "Url": "/cells/watermark/ods", + "AppUrl": "/cells/watermark", + "Extension1": "ods", + "Name": "ODS Watermark" + }, + + { + "Url": "/cells/annotation/xls", + "AppUrl": "/cells/annotation", + "Extension1": "xls", + "Name": "XLS Annotation" + }, + { + "Url": "/cells/annotation/xlsx", + "AppUrl": "/cells/annotation", + "Extension1": "xlsx", + "Name": "XLSX Annotation" + }, + { + "Url": "/cells/annotation/xlsm", + "AppUrl": "/cells/annotation", + "Extension1": "xlsm", + "Name": "XLSM Annotation" + }, + { + "Url": "/cells/annotation/xlsb", + "AppUrl": "/cells/annotation", + "Extension1": "xlsb", + "Name": "XLSB Annotation" + }, + { + "Url": "/cells/annotation/ods", + "AppUrl": "/cells/annotation", + "Extension1": "ods", + "Name": "ODS Annotation" + }, + + { + "Url": "/cells/parser/xls", + "AppUrl": "/cells/parser", + "Extension1": "xls", + "Name": "XLS Parser" + }, + { + "Url": "/cells/parser/xlsx", + "AppUrl": "/cells/parser", + "Extension1": "xlsx", + "Name": "XLSX Parser" + }, + { + "Url": "/cells/parser/xlsm", + "AppUrl": "/cells/parser", + "Extension1": "xlsm", + "Name": "XLSM Parser" + }, + { + "Url": "/cells/parser/xlsb", + "AppUrl": "/cells/parser", + "Extension1": "xlsb", + "Name": "XLSB Parser" + }, + { + "Url": "/cells/parser/ods", + "AppUrl": "/cells/parser", + "Extension1": "ods", + "Name": "ODS Parser" + }, + + { + "Url": "/cells/assembly/xls", + "AppUrl": "/cells/assembly", + "Extension1": "xls", + "Name": "XLS Assembly" + }, + { + "Url": "/cells/assembly/xlsx", + "AppUrl": "/cells/assembly", + "Extension1": "xlsx", + "Name": "XLSX Assembly" + }, + { + "Url": "/cells/assembly/xlsm", + "AppUrl": "/cells/assembly", + "Extension1": "xlsm", + "Name": "XLSM Assembly" + }, + { + "Url": "/cells/assembly/xlsb", + "AppUrl": "/cells/assembly", + "Extension1": "xlsb", + "Name": "XLSB Assembly" + }, + { + "Url": "/cells/assembly/ods", + "AppUrl": "/cells/assembly", + "Extension1": "ods", + "Name": "ODS Assembly" + }, + + { + "Url": "/cells/unlock/xls", + "AppUrl": "/cells/unlock", + "Extension1": "xls", + "Name": "Unlock XLS" + }, + { + "Url": "/cells/unlock/xlsx", + "AppUrl": "/cells/unlock", + "Extension1": "xlsx", + "Name": "Unlock XLSX" + }, + { + "Url": "/cells/unlock/xlsm", + "AppUrl": "/cells/unlock", + "Extension1": "xlsm", + "Name": "Unlock XLSM" + }, + { + "Url": "/cells/unlock/xlsb", + "AppUrl": "/cells/unlock", + "Extension1": "xlsb", + "Name": "Unlock XLSB" + }, + { + "Url": "/cells/unlock/ods", + "AppUrl": "/cells/unlock", + "Extension1": "ods", + "Name": "Unlock ODS" + }, + + { + "Url": "/cells/editor/excel", + "AppUrl": "/cells/editor", + "Extension1": "excel", + "Name": "EXCEL Editor" + }, + { + "Url": "/cells/editor/xls", + "AppUrl": "/cells/editor", + "Extension1": "xls", + "Name": "XLS Editor" + }, + { + "Url": "/cells/editor/xlsx", + "AppUrl": "/cells/editor", + "Extension1": "xlsx", + "Name": "XLSX Editor" + }, + { + "Url": "/cells/editor/xlsm", + "AppUrl": "/cells/editor", + "Extension1": "xlsm", + "Name": "XLSM Editor" + }, + { + "Url": "/cells/editor/xlsb", + "AppUrl": "/cells/editor", + "Extension1": "xlsb", + "Name": "XLSB Editor" + }, + { + "Url": "/cells/editor/ods", + "AppUrl": "/cells/editor", + "Extension1": "ods", + "Name": "ODS Editor" + }, + { + "Url": "/cells/editor/csv", + "AppUrl": "/cells/editor", + "Extension1": "csv", + "Name": "CSV Editor" + }, + { + "Url": "/cells/editor/tsv", + "AppUrl": "/cells/editor", + "Extension1": "tsv", + "Name": "TSV Editor" + }, + { + "Url": "/cells/editor/html", + "AppUrl": "/cells/editor", + "Extension1": "html", + "Name": "HTML Editor" + }, + { + "Url": "/cells/editor/mht", + "AppUrl": "/cells/editor", + "Extension1": "mht", + "Name": "MHT Editor" + }, + { + "Url": "/cells/editor/mhtml", + "AppUrl": "/cells/editor", + "Extension1": "mhtml", + "Name": "MHTML Editor" + }, + + { + "Url": "/cells/splitter/xls", + "AppUrl": "/cells/splitter", + "Extension1": "xls", + "Name": "XLS Splitter" + }, + { + "Url": "/cells/splitter/xlsx", + "AppUrl": "/cells/splitter", + "Extension1": "xlsx", + "Name": "XLSX Splitter" + }, + { + "Url": "/cells/splitter/xlsm", + "AppUrl": "/cells/splitter", + "Extension1": "xlsm", + "Name": "XLSM Splitter" + }, + { + "Url": "/cells/splitter/xlsb", + "AppUrl": "/cells/splitter", + "Extension1": "xlsb", + "Name": "XLSB Splitter" + }, + { + "Url": "/cells/splitter/ods", + "AppUrl": "/cells/splitter", + "Extension1": "ods", + "Name": "ODS Splitter" + }, + + { + "Url": "/cells/protect/xls", + "AppUrl": "/cells/protect", + "Extension1": "xls", + "Name": "XLS Protect" + }, + { + "Url": "/cells/protect/xlsx", + "AppUrl": "/cells/protect", + "Extension1": "xlsx", + "Name": "XLSX Protect" + }, + { + "Url": "/cells/protect/xlsm", + "AppUrl": "/cells/protect", + "Extension1": "xlsm", + "Name": "XLSM Protect" + }, + { + "Url": "/cells/protect/xlsb", + "AppUrl": "/cells/protect", + "Extension1": "xlsb", + "Name": "XLSB Protect" + }, + { + "Url": "/cells/protect/ods", + "AppUrl": "/cells/protect", + "Extension1": "ods", + "Name": "ODS Protect" + }, + + { + "Url": "/cells/translation/excel", + "AppUrl": "/cells/translation", + "Extension1": "excel", + "Name": "EXCEL Translation" + }, + { + "Url": "/cells/translation/xls", + "AppUrl": "/cells/translation", + "Extension1": "xls", + "Name": "XLS Translation" + }, + { + "Url": "/cells/translation/xlsx", + "AppUrl": "/cells/translation", + "Extension1": "xlsx", + "Name": "XLSX Translation" + }, + { + "Url": "/cells/translation/xlsm", + "AppUrl": "/cells/translation", + "Extension1": "xlsm", + "Name": "XLSM Translation" + }, + { + "Url": "/cells/translation/xlsb", + "AppUrl": "/cells/translation", + "Extension1": "xlsb", + "Name": "XLSB Translation" + }, + { + "Url": "/cells/translation/ods", + "AppUrl": "/cells/translation", + "Extension1": "ods", + "Name": "ODS Translation" + }, + { + "Url": "/cells/translation/csv", + "AppUrl": "/cells/translation", + "Extension1": "csv", + "Name": "CSV Translation" + }, + { + "Url": "/cells/translation/tsv", + "AppUrl": "/cells/translation", + "Extension1": "tsv", + "Name": "TSV Translation" + }, + { + "Url": "/cells/translation/html", + "AppUrl": "/cells/translation", + "Extension1": "html", + "Name": "HTML Translation" + }, + { + "Url": "/cells/translation/mht", + "AppUrl": "/cells/translation", + "Extension1": "mht", + "Name": "MHT Translation" + }, + { + "Url": "/cells/translation/mhtml", + "AppUrl": "/cells/translation", + "Extension1": "mhtml", + "Name": "MHTML Translation" + }, + + { + "Url": "/cells/chart/excel", + "AppUrl": "/cells/chart", + "Extension1": "excel", + "Name": "EXCEL Chart" + }, + { + "Url": "/cells/chart/xls", + "AppUrl": "/cells/chart", + "Extension1": "xls", + "Name": "XLS Chart" + }, + { + "Url": "/cells/chart/xlsx", + "AppUrl": "/cells/chart", + "Extension1": "xlsx", + "Name": "XLSX Chart" + }, + { + "Url": "/cells/chart/xlsm", + "AppUrl": "/cells/chart", + "Extension1": "xlsm", + "Name": "XLSM Chart" + }, + { + "Url": "/cells/chart/xlsb", + "AppUrl": "/cells/chart", + "Extension1": "xlsb", + "Name": "XLSB Chart" + }, + { + "Url": "/cells/chart/ods", + "AppUrl": "/cells/chart", + "Extension1": "ods", + "Name": "ODS Chart" + }, + { + "Url": "/cells/chart/image", + "AppUrl": "/cells/chart", + "Extension1": "image", + "Name": "IMAGE Chart" + }, + { + "Url": "/cells/chart/to-image", + "AppUrl": "/cells/chart", + "Extension1": "image", + "Name": "IMAGE Chart" + }, + { + "Url": "/cells/chart/pdf", + "AppUrl": "/cells/chart", + "Extension1": "pdf", + "Name": "PDF Chart" + }, + { + "Url": "/cells/chart/bmp", + "AppUrl": "/cells/chart", + "Extension1": "bmp", + "Name": "BMP Chart" + }, + { + "Url": "/cells/chart/jpg", + "AppUrl": "/cells/chart", + "Extension1": "jpg", + "Name": "JPG Chart" + }, + { + "Url": "/cells/chart/png", + "AppUrl": "/cells/chart", + "Extension1": "png", + "Name": "PNG Chart" + }, + { + "Url": "/cells/chart/svg", + "AppUrl": "/cells/chart", + "Extension1": "svg", + "Name": "SVG Chart" + }, + { + "Url": "/cells/chart/tiff", + "AppUrl": "/cells/chart", + "Extension1": "tiff", + "Name": "TIFF Chart" + }, + { + "Url": "/cells/chart/xps", + "AppUrl": "/cells/chart", + "Extension1": "xps", + "Name": "XPS Chart" + }, + { + "Url": "/cells/chart/to-pdf", + "AppUrl": "/cells/chart", + "Extension1": "pdf", + "Name": "PDF Chart" + }, + { + "Url": "/cells/chart/to-bmp", + "AppUrl": "/cells/chart", + "Extension1": "bmp", + "Name": "BMP Chart" + }, + { + "Url": "/cells/chart/to-jpg", + "AppUrl": "/cells/chart", + "Extension1": "jpg", + "Name": "JPG Chart" + }, + { + "Url": "/cells/chart/to-png", + "AppUrl": "/cells/chart", + "Extension1": "png", + "Name": "PNG Chart" + }, + { + "Url": "/cells/chart/to-svg", + "AppUrl": "/cells/chart", + "Extension1": "svg", + "Name": "SVG Chart" + }, + { + "Url": "/cells/chart/to-tiff", + "AppUrl": "/cells/chart", + "Extension1": "tiff", + "Name": "TIFF Chart" + }, + { + "Url": "/cells/chart/to-xps", + "AppUrl": "/cells/chart", + "Extension1": "xps", + "Name": "XPS Chart" + }, + + { + "Url": "/cells/merger/xlsx", + "AppUrl": "/cells/merger", + "Extension1": "xlsx", + "Name": "XLSX Merger" + }, + { + "Url": "/cells/merger/xls", + "AppUrl": "/cells/merger", + "Extension1": "xls", + "Name": "XLS Merger" + }, + { + "Url": "/cells/merger/xlsm", + "AppUrl": "/cells/merger", + "Extension1": "xlsm", + "Name": "XLSM Merger" + }, + { + "Url": "/cells/merger/xlsb", + "AppUrl": "/cells/merger", + "Extension1": "xlsb", + "Name": "XLSB Merger" + }, + { + "Url": "/cells/merger/ods", + "AppUrl": "/cells/merger", + "Extension1": "ods", + "Name": "ODS Merger" + }, + { + "Url": "/cells/merger/csv", + "AppUrl": "/cells/merger", + "Extension1": "csv", + "Name": "CSV Merger" + }, + { + "Url": "/cells/merger/tsv", + "AppUrl": "/cells/merger", + "Extension1": "tsv", + "Name": "TSV Merger" + }, + { + "Url": "/cells/merger/html", + "AppUrl": "/cells/merger", + "Extension1": "html", + "Name": "HTML Merger" + }, + { + "Url": "/cells/merger/mht", + "AppUrl": "/cells/merger", + "Extension1": "mht", + "Name": "MHT Merger" + }, + { + "Url": "/cells/merger/mhtml", + "AppUrl": "/cells/merger", + "Extension1": "mhtml", + "Name": "MHTML Merger" + }, + { + "Url": "/cells/merger/xlsx-to-pdf", + "AppUrl": "/cells/merger", + "Name": "XLSX to PDF Merger", + "Extension1": "xlsx", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/xlsx-to-xls", + "AppUrl": "/cells/merger", + "Name": "XLSX to XLS Merger", + "Extension1": "xlsx", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/xlsx-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "XLSX to XLSX Merger", + "Extension1": "xlsx", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/xlsx-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "XLSX to XLSM Merger", + "Extension1": "xlsx", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/xlsx-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "XLSX to XLSB Merger", + "Extension1": "xlsx", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/xlsx-to-ods", + "AppUrl": "/cells/merger", + "Name": "XLSX to ODS Merger", + "Extension1": "xlsx", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/xlsx-to-csv", + "AppUrl": "/cells/merger", + "Name": "XLSX to CSV Merger", + "Extension1": "xlsx", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/xlsx-to-tsv", + "AppUrl": "/cells/merger", + "Name": "XLSX to TSV Merger", + "Extension1": "xlsx", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/xlsx-to-html", + "AppUrl": "/cells/merger", + "Name": "XLSX to HTML Merger", + "Extension1": "xlsx", + "Extension2": "html" + }, + { + "Url": "/cells/merger/xlsx-to-bmp", + "AppUrl": "/cells/merger", + "Name": "XLSX to BMP Merger", + "Extension1": "xlsx", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/xlsx-to-jpg", + "AppUrl": "/cells/merger", + "Name": "XLSX to JPG Merger", + "Extension1": "xlsx", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/xlsx-to-png", + "AppUrl": "/cells/merger", + "Name": "XLSX to PNG Merger", + "Extension1": "xlsx", + "Extension2": "png" + }, + { + "Url": "/cells/merger/xlsx-to-svg", + "AppUrl": "/cells/merger", + "Name": "XLSX to SVG Merger", + "Extension1": "xlsx", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/xlsx-to-tiff", + "AppUrl": "/cells/merger", + "Name": "XLSX to TIFF Merger", + "Extension1": "xlsx", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/xlsx-to-xps", + "AppUrl": "/cells/merger", + "Name": "XLSX to XPS Merger", + "Extension1": "xlsx", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/xlsx-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "XLSX to MHTML Merger", + "Extension1": "xlsx", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/xlsx-to-md", + "AppUrl": "/cells/merger", + "Name": "XLSX to MD Merger", + "Extension1": "xlsx", + "Extension2": "md" + }, + { + "Url": "/cells/merger/xlsx-to-word", + "AppUrl": "/cells/merger", + "Name": "XLSX to WORD Merger", + "Extension1": "xlsx", + "Extension2": "word" + }, + { + "Url": "/cells/merger/xlsx-to-docx", + "AppUrl": "/cells/merger", + "Name": "XLSX to DOCX Merger", + "Extension1": "xlsx", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/xlsx-to-ppt", + "AppUrl": "/cells/merger", + "Name": "XLSX to PPT Merger", + "Extension1": "xlsx", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/xlsx-to-pptx", + "AppUrl": "/cells/merger", + "Name": "XLSX to PPTX Merger", + "Extension1": "xlsx", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/xlsx-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "XLSX to POWERPOINT Merger", + "Extension1": "xlsx", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/xls-to-pdf", + "AppUrl": "/cells/merger", + "Name": "XLS to PDF Merger", + "Extension1": "xls", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/xls-to-xls", + "AppUrl": "/cells/merger", + "Name": "XLS to XLS Merger", + "Extension1": "xls", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/xls-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "XLS to XLSX Merger", + "Extension1": "xls", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/xls-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "XLS to XLSM Merger", + "Extension1": "xls", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/xls-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "XLS to XLSB Merger", + "Extension1": "xls", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/xls-to-ods", + "AppUrl": "/cells/merger", + "Name": "XLS to ODS Merger", + "Extension1": "xls", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/xls-to-csv", + "AppUrl": "/cells/merger", + "Name": "XLS to CSV Merger", + "Extension1": "xls", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/xls-to-tsv", + "AppUrl": "/cells/merger", + "Name": "XLS to TSV Merger", + "Extension1": "xls", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/xls-to-html", + "AppUrl": "/cells/merger", + "Name": "XLS to HTML Merger", + "Extension1": "xls", + "Extension2": "html" + }, + { + "Url": "/cells/merger/xls-to-bmp", + "AppUrl": "/cells/merger", + "Name": "XLS to BMP Merger", + "Extension1": "xls", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/xls-to-jpg", + "AppUrl": "/cells/merger", + "Name": "XLS to JPG Merger", + "Extension1": "xls", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/xls-to-png", + "AppUrl": "/cells/merger", + "Name": "XLS to PNG Merger", + "Extension1": "xls", + "Extension2": "png" + }, + { + "Url": "/cells/merger/xls-to-svg", + "AppUrl": "/cells/merger", + "Name": "XLS to SVG Merger", + "Extension1": "xls", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/xls-to-tiff", + "AppUrl": "/cells/merger", + "Name": "XLS to TIFF Merger", + "Extension1": "xls", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/xls-to-xps", + "AppUrl": "/cells/merger", + "Name": "XLS to XPS Merger", + "Extension1": "xls", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/xls-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "XLS to MHTML Merger", + "Extension1": "xls", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/xls-to-md", + "AppUrl": "/cells/merger", + "Name": "XLS to MD Merger", + "Extension1": "xls", + "Extension2": "md" + }, + { + "Url": "/cells/merger/xls-to-word", + "AppUrl": "/cells/merger", + "Name": "XLS to WORD Merger", + "Extension1": "xls", + "Extension2": "word" + }, + { + "Url": "/cells/merger/xls-to-docx", + "AppUrl": "/cells/merger", + "Name": "XLS to DOCX Merger", + "Extension1": "xls", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/xls-to-ppt", + "AppUrl": "/cells/merger", + "Name": "XLS to PPT Merger", + "Extension1": "xls", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/xls-to-pptx", + "AppUrl": "/cells/merger", + "Name": "XLS to PPTX Merger", + "Extension1": "xls", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/xls-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "XLS to POWERPOINT Merger", + "Extension1": "xls", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/xlsm-to-pdf", + "AppUrl": "/cells/merger", + "Name": "XLSM to PDF Merger", + "Extension1": "xlsm", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/xlsm-to-xls", + "AppUrl": "/cells/merger", + "Name": "XLSM to XLS Merger", + "Extension1": "xlsm", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/xlsm-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "XLSM to XLSX Merger", + "Extension1": "xlsm", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/xlsm-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "XLSM to XLSM Merger", + "Extension1": "xlsm", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/xlsm-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "XLSM to XLSB Merger", + "Extension1": "xlsm", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/xlsm-to-ods", + "AppUrl": "/cells/merger", + "Name": "XLSM to ODS Merger", + "Extension1": "xlsm", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/xlsm-to-csv", + "AppUrl": "/cells/merger", + "Name": "XLSM to CSV Merger", + "Extension1": "xlsm", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/xlsm-to-tsv", + "AppUrl": "/cells/merger", + "Name": "XLSM to TSV Merger", + "Extension1": "xlsm", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/xlsm-to-html", + "AppUrl": "/cells/merger", + "Name": "XLSM to HTML Merger", + "Extension1": "xlsm", + "Extension2": "html" + }, + { + "Url": "/cells/merger/xlsm-to-bmp", + "AppUrl": "/cells/merger", + "Name": "XLSM to BMP Merger", + "Extension1": "xlsm", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/xlsm-to-jpg", + "AppUrl": "/cells/merger", + "Name": "XLSM to JPG Merger", + "Extension1": "xlsm", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/xlsm-to-png", + "AppUrl": "/cells/merger", + "Name": "XLSM to PNG Merger", + "Extension1": "xlsm", + "Extension2": "png" + }, + { + "Url": "/cells/merger/xlsm-to-svg", + "AppUrl": "/cells/merger", + "Name": "XLSM to SVG Merger", + "Extension1": "xlsm", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/xlsm-to-tiff", + "AppUrl": "/cells/merger", + "Name": "XLSM to TIFF Merger", + "Extension1": "xlsm", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/xlsm-to-xps", + "AppUrl": "/cells/merger", + "Name": "XLSM to XPS Merger", + "Extension1": "xlsm", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/xlsm-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "XLSM to MHTML Merger", + "Extension1": "xlsm", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/xlsm-to-md", + "AppUrl": "/cells/merger", + "Name": "XLSM to MD Merger", + "Extension1": "xlsm", + "Extension2": "md" + }, + { + "Url": "/cells/merger/xlsm-to-word", + "AppUrl": "/cells/merger", + "Name": "XLSM to WORD Merger", + "Extension1": "xlsm", + "Extension2": "word" + }, + { + "Url": "/cells/merger/xlsm-to-docx", + "AppUrl": "/cells/merger", + "Name": "XLSM to DOCX Merger", + "Extension1": "xlsm", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/xlsm-to-ppt", + "AppUrl": "/cells/merger", + "Name": "XLSM to PPT Merger", + "Extension1": "xlsm", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/xlsm-to-pptx", + "AppUrl": "/cells/merger", + "Name": "XLSM to PPTX Merger", + "Extension1": "xlsm", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/xlsm-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "XLSM to POWERPOINT Merger", + "Extension1": "xlsm", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/xlsb-to-pdf", + "AppUrl": "/cells/merger", + "Name": "XLSB to PDF Merger", + "Extension1": "xlsb", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/xlsb-to-xls", + "AppUrl": "/cells/merger", + "Name": "XLSB to XLS Merger", + "Extension1": "xlsb", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/xlsb-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "XLSB to XLSX Merger", + "Extension1": "xlsb", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/xlsb-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "XLSB to XLSM Merger", + "Extension1": "xlsb", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/xlsb-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "XLSB to XLSB Merger", + "Extension1": "xlsb", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/xlsb-to-ods", + "AppUrl": "/cells/merger", + "Name": "XLSB to ODS Merger", + "Extension1": "xlsb", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/xlsb-to-csv", + "AppUrl": "/cells/merger", + "Name": "XLSB to CSV Merger", + "Extension1": "xlsb", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/xlsb-to-tsv", + "AppUrl": "/cells/merger", + "Name": "XLSB to TSV Merger", + "Extension1": "xlsb", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/xlsb-to-html", + "AppUrl": "/cells/merger", + "Name": "XLSB to HTML Merger", + "Extension1": "xlsb", + "Extension2": "html" + }, + { + "Url": "/cells/merger/xlsb-to-bmp", + "AppUrl": "/cells/merger", + "Name": "XLSB to BMP Merger", + "Extension1": "xlsb", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/xlsb-to-jpg", + "AppUrl": "/cells/merger", + "Name": "XLSB to JPG Merger", + "Extension1": "xlsb", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/xlsb-to-png", + "AppUrl": "/cells/merger", + "Name": "XLSB to PNG Merger", + "Extension1": "xlsb", + "Extension2": "png" + }, + { + "Url": "/cells/merger/xlsb-to-svg", + "AppUrl": "/cells/merger", + "Name": "XLSB to SVG Merger", + "Extension1": "xlsb", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/xlsb-to-tiff", + "AppUrl": "/cells/merger", + "Name": "XLSB to TIFF Merger", + "Extension1": "xlsb", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/xlsb-to-xps", + "AppUrl": "/cells/merger", + "Name": "XLSB to XPS Merger", + "Extension1": "xlsb", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/xlsb-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "XLSB to MHTML Merger", + "Extension1": "xlsb", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/xlsb-to-md", + "AppUrl": "/cells/merger", + "Name": "XLSB to MD Merger", + "Extension1": "xlsb", + "Extension2": "md" + }, + { + "Url": "/cells/merger/xlsb-to-word", + "AppUrl": "/cells/merger", + "Name": "XLSB to WORD Merger", + "Extension1": "xlsb", + "Extension2": "word" + }, + { + "Url": "/cells/merger/xlsb-to-docx", + "AppUrl": "/cells/merger", + "Name": "XLSB to DOCX Merger", + "Extension1": "xlsb", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/xlsb-to-ppt", + "AppUrl": "/cells/merger", + "Name": "XLSB to PPT Merger", + "Extension1": "xlsb", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/xlsb-to-pptx", + "AppUrl": "/cells/merger", + "Name": "XLSB to PPTX Merger", + "Extension1": "xlsb", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/xlsb-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "XLSB to POWERPOINT Merger", + "Extension1": "xlsb", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/ods-to-pdf", + "AppUrl": "/cells/merger", + "Name": "ODS to PDF Merger", + "Extension1": "ods", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/ods-to-xls", + "AppUrl": "/cells/merger", + "Name": "ODS to XLS Merger", + "Extension1": "ods", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/ods-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "ODS to XLSX Merger", + "Extension1": "ods", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/ods-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "ODS to XLSM Merger", + "Extension1": "ods", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/ods-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "ODS to XLSB Merger", + "Extension1": "ods", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/ods-to-ods", + "AppUrl": "/cells/merger", + "Name": "ODS to ODS Merger", + "Extension1": "ods", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/ods-to-csv", + "AppUrl": "/cells/merger", + "Name": "ODS to CSV Merger", + "Extension1": "ods", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/ods-to-tsv", + "AppUrl": "/cells/merger", + "Name": "ODS to TSV Merger", + "Extension1": "ods", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/ods-to-html", + "AppUrl": "/cells/merger", + "Name": "ODS to HTML Merger", + "Extension1": "ods", + "Extension2": "html" + }, + { + "Url": "/cells/merger/ods-to-bmp", + "AppUrl": "/cells/merger", + "Name": "ODS to BMP Merger", + "Extension1": "ods", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/ods-to-jpg", + "AppUrl": "/cells/merger", + "Name": "ODS to JPG Merger", + "Extension1": "ods", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/ods-to-png", + "AppUrl": "/cells/merger", + "Name": "ODS to PNG Merger", + "Extension1": "ods", + "Extension2": "png" + }, + { + "Url": "/cells/merger/ods-to-svg", + "AppUrl": "/cells/merger", + "Name": "ODS to SVG Merger", + "Extension1": "ods", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/ods-to-tiff", + "AppUrl": "/cells/merger", + "Name": "ODS to TIFF Merger", + "Extension1": "ods", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/ods-to-xps", + "AppUrl": "/cells/merger", + "Name": "ODS to XPS Merger", + "Extension1": "ods", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/ods-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "ODS to MHTML Merger", + "Extension1": "ods", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/ods-to-md", + "AppUrl": "/cells/merger", + "Name": "ODS to MD Merger", + "Extension1": "ods", + "Extension2": "md" + }, + { + "Url": "/cells/merger/ods-to-word", + "AppUrl": "/cells/merger", + "Name": "ODS to WORD Merger", + "Extension1": "ods", + "Extension2": "word" + }, + { + "Url": "/cells/merger/ods-to-docx", + "AppUrl": "/cells/merger", + "Name": "ODS to DOCX Merger", + "Extension1": "ods", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/ods-to-ppt", + "AppUrl": "/cells/merger", + "Name": "ODS to PPT Merger", + "Extension1": "ods", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/ods-to-pptx", + "AppUrl": "/cells/merger", + "Name": "ODS to PPTX Merger", + "Extension1": "ods", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/ods-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "ODS to POWERPOINT Merger", + "Extension1": "ods", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/csv-to-pdf", + "AppUrl": "/cells/merger", + "Name": "CSV to PDF Merger", + "Extension1": "csv", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/csv-to-xls", + "AppUrl": "/cells/merger", + "Name": "CSV to XLS Merger", + "Extension1": "csv", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/csv-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "CSV to XLSX Merger", + "Extension1": "csv", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/csv-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "CSV to XLSM Merger", + "Extension1": "csv", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/csv-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "CSV to XLSB Merger", + "Extension1": "csv", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/csv-to-ods", + "AppUrl": "/cells/merger", + "Name": "CSV to ODS Merger", + "Extension1": "csv", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/csv-to-csv", + "AppUrl": "/cells/merger", + "Name": "CSV to CSV Merger", + "Extension1": "csv", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/csv-to-tsv", + "AppUrl": "/cells/merger", + "Name": "CSV to TSV Merger", + "Extension1": "csv", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/csv-to-html", + "AppUrl": "/cells/merger", + "Name": "CSV to HTML Merger", + "Extension1": "csv", + "Extension2": "html" + }, + { + "Url": "/cells/merger/csv-to-bmp", + "AppUrl": "/cells/merger", + "Name": "CSV to BMP Merger", + "Extension1": "csv", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/csv-to-jpg", + "AppUrl": "/cells/merger", + "Name": "CSV to JPG Merger", + "Extension1": "csv", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/csv-to-png", + "AppUrl": "/cells/merger", + "Name": "CSV to PNG Merger", + "Extension1": "csv", + "Extension2": "png" + }, + { + "Url": "/cells/merger/csv-to-svg", + "AppUrl": "/cells/merger", + "Name": "CSV to SVG Merger", + "Extension1": "csv", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/csv-to-tiff", + "AppUrl": "/cells/merger", + "Name": "CSV to TIFF Merger", + "Extension1": "csv", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/csv-to-xps", + "AppUrl": "/cells/merger", + "Name": "CSV to XPS Merger", + "Extension1": "csv", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/csv-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "CSV to MHTML Merger", + "Extension1": "csv", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/csv-to-md", + "AppUrl": "/cells/merger", + "Name": "CSV to MD Merger", + "Extension1": "csv", + "Extension2": "md" + }, + { + "Url": "/cells/merger/csv-to-word", + "AppUrl": "/cells/merger", + "Name": "CSV to WORD Merger", + "Extension1": "csv", + "Extension2": "word" + }, + { + "Url": "/cells/merger/csv-to-docx", + "AppUrl": "/cells/merger", + "Name": "CSV to DOCX Merger", + "Extension1": "csv", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/csv-to-ppt", + "AppUrl": "/cells/merger", + "Name": "CSV to PPT Merger", + "Extension1": "csv", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/csv-to-pptx", + "AppUrl": "/cells/merger", + "Name": "CSV to PPTX Merger", + "Extension1": "csv", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/csv-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "CSV to POWERPOINT Merger", + "Extension1": "csv", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/tsv-to-pdf", + "AppUrl": "/cells/merger", + "Name": "TSV to PDF Merger", + "Extension1": "tsv", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/tsv-to-xls", + "AppUrl": "/cells/merger", + "Name": "TSV to XLS Merger", + "Extension1": "tsv", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/tsv-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "TSV to XLSX Merger", + "Extension1": "tsv", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/tsv-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "TSV to XLSM Merger", + "Extension1": "tsv", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/tsv-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "TSV to XLSB Merger", + "Extension1": "tsv", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/tsv-to-ods", + "AppUrl": "/cells/merger", + "Name": "TSV to ODS Merger", + "Extension1": "tsv", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/tsv-to-csv", + "AppUrl": "/cells/merger", + "Name": "TSV to CSV Merger", + "Extension1": "tsv", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/tsv-to-tsv", + "AppUrl": "/cells/merger", + "Name": "TSV to TSV Merger", + "Extension1": "tsv", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/tsv-to-html", + "AppUrl": "/cells/merger", + "Name": "TSV to HTML Merger", + "Extension1": "tsv", + "Extension2": "html" + }, + { + "Url": "/cells/merger/tsv-to-bmp", + "AppUrl": "/cells/merger", + "Name": "TSV to BMP Merger", + "Extension1": "tsv", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/tsv-to-jpg", + "AppUrl": "/cells/merger", + "Name": "TSV to JPG Merger", + "Extension1": "tsv", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/tsv-to-png", + "AppUrl": "/cells/merger", + "Name": "TSV to PNG Merger", + "Extension1": "tsv", + "Extension2": "png" + }, + { + "Url": "/cells/merger/tsv-to-svg", + "AppUrl": "/cells/merger", + "Name": "TSV to SVG Merger", + "Extension1": "tsv", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/tsv-to-tiff", + "AppUrl": "/cells/merger", + "Name": "TSV to TIFF Merger", + "Extension1": "tsv", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/tsv-to-xps", + "AppUrl": "/cells/merger", + "Name": "TSV to XPS Merger", + "Extension1": "tsv", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/tsv-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "TSV to MHTML Merger", + "Extension1": "tsv", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/tsv-to-md", + "AppUrl": "/cells/merger", + "Name": "TSV to MD Merger", + "Extension1": "tsv", + "Extension2": "md" + }, + { + "Url": "/cells/merger/tsv-to-word", + "AppUrl": "/cells/merger", + "Name": "TSV to WORD Merger", + "Extension1": "tsv", + "Extension2": "word" + }, + { + "Url": "/cells/merger/tsv-to-docx", + "AppUrl": "/cells/merger", + "Name": "TSV to DOCX Merger", + "Extension1": "tsv", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/tsv-to-ppt", + "AppUrl": "/cells/merger", + "Name": "TSV to PPT Merger", + "Extension1": "tsv", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/tsv-to-pptx", + "AppUrl": "/cells/merger", + "Name": "TSV to PPTX Merger", + "Extension1": "tsv", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/tsv-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "TSV to POWERPOINT Merger", + "Extension1": "tsv", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/html-to-pdf", + "AppUrl": "/cells/merger", + "Name": "HTML to PDF Merger", + "Extension1": "html", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/html-to-xls", + "AppUrl": "/cells/merger", + "Name": "HTML to XLS Merger", + "Extension1": "html", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/html-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "HTML to XLSX Merger", + "Extension1": "html", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/html-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "HTML to XLSM Merger", + "Extension1": "html", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/html-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "HTML to XLSB Merger", + "Extension1": "html", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/html-to-ods", + "AppUrl": "/cells/merger", + "Name": "HTML to ODS Merger", + "Extension1": "html", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/html-to-csv", + "AppUrl": "/cells/merger", + "Name": "HTML to CSV Merger", + "Extension1": "html", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/html-to-tsv", + "AppUrl": "/cells/merger", + "Name": "HTML to TSV Merger", + "Extension1": "html", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/html-to-html", + "AppUrl": "/cells/merger", + "Name": "HTML to HTML Merger", + "Extension1": "html", + "Extension2": "html" + }, + { + "Url": "/cells/merger/html-to-bmp", + "AppUrl": "/cells/merger", + "Name": "HTML to BMP Merger", + "Extension1": "html", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/html-to-jpg", + "AppUrl": "/cells/merger", + "Name": "HTML to JPG Merger", + "Extension1": "html", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/html-to-png", + "AppUrl": "/cells/merger", + "Name": "HTML to PNG Merger", + "Extension1": "html", + "Extension2": "png" + }, + { + "Url": "/cells/merger/html-to-svg", + "AppUrl": "/cells/merger", + "Name": "HTML to SVG Merger", + "Extension1": "html", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/html-to-tiff", + "AppUrl": "/cells/merger", + "Name": "HTML to TIFF Merger", + "Extension1": "html", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/html-to-xps", + "AppUrl": "/cells/merger", + "Name": "HTML to XPS Merger", + "Extension1": "html", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/html-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "HTML to MHTML Merger", + "Extension1": "html", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/html-to-md", + "AppUrl": "/cells/merger", + "Name": "HTML to MD Merger", + "Extension1": "html", + "Extension2": "md" + }, + { + "Url": "/cells/merger/html-to-word", + "AppUrl": "/cells/merger", + "Name": "HTML to WORD Merger", + "Extension1": "html", + "Extension2": "word" + }, + { + "Url": "/cells/merger/html-to-docx", + "AppUrl": "/cells/merger", + "Name": "HTML to DOCX Merger", + "Extension1": "html", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/html-to-ppt", + "AppUrl": "/cells/merger", + "Name": "HTML to PPT Merger", + "Extension1": "html", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/html-to-pptx", + "AppUrl": "/cells/merger", + "Name": "HTML to PPTX Merger", + "Extension1": "html", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/html-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "HTML to POWERPOINT Merger", + "Extension1": "html", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/mht-to-pdf", + "AppUrl": "/cells/merger", + "Name": "MHT to PDF Merger", + "Extension1": "mht", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/mht-to-xls", + "AppUrl": "/cells/merger", + "Name": "MHT to XLS Merger", + "Extension1": "mht", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/mht-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "MHT to XLSX Merger", + "Extension1": "mht", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/mht-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "MHT to XLSM Merger", + "Extension1": "mht", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/mht-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "MHT to XLSB Merger", + "Extension1": "mht", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/mht-to-ods", + "AppUrl": "/cells/merger", + "Name": "MHT to ODS Merger", + "Extension1": "mht", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/mht-to-csv", + "AppUrl": "/cells/merger", + "Name": "MHT to CSV Merger", + "Extension1": "mht", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/mht-to-tsv", + "AppUrl": "/cells/merger", + "Name": "MHT to TSV Merger", + "Extension1": "mht", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/mht-to-html", + "AppUrl": "/cells/merger", + "Name": "MHT to HTML Merger", + "Extension1": "mht", + "Extension2": "html" + }, + { + "Url": "/cells/merger/mht-to-bmp", + "AppUrl": "/cells/merger", + "Name": "MHT to BMP Merger", + "Extension1": "mht", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/mht-to-jpg", + "AppUrl": "/cells/merger", + "Name": "MHT to JPG Merger", + "Extension1": "mht", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/mht-to-png", + "AppUrl": "/cells/merger", + "Name": "MHT to PNG Merger", + "Extension1": "mht", + "Extension2": "png" + }, + { + "Url": "/cells/merger/mht-to-svg", + "AppUrl": "/cells/merger", + "Name": "MHT to SVG Merger", + "Extension1": "mht", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/mht-to-tiff", + "AppUrl": "/cells/merger", + "Name": "MHT to TIFF Merger", + "Extension1": "mht", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/mht-to-xps", + "AppUrl": "/cells/merger", + "Name": "MHT to XPS Merger", + "Extension1": "mht", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/mht-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "MHT to MHTML Merger", + "Extension1": "mht", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/mht-to-md", + "AppUrl": "/cells/merger", + "Name": "MHT to MD Merger", + "Extension1": "mht", + "Extension2": "md" + }, + { + "Url": "/cells/merger/mht-to-word", + "AppUrl": "/cells/merger", + "Name": "MHT to WORD Merger", + "Extension1": "mht", + "Extension2": "word" + }, + { + "Url": "/cells/merger/mht-to-docx", + "AppUrl": "/cells/merger", + "Name": "MHT to DOCX Merger", + "Extension1": "mht", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/mht-to-ppt", + "AppUrl": "/cells/merger", + "Name": "MHT to PPT Merger", + "Extension1": "mht", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/mht-to-pptx", + "AppUrl": "/cells/merger", + "Name": "MHT to PPTX Merger", + "Extension1": "mht", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/mht-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "MHT to POWERPOINT Merger", + "Extension1": "mht", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/mhtml-to-pdf", + "AppUrl": "/cells/merger", + "Name": "MHTML to PDF Merger", + "Extension1": "mhtml", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/mhtml-to-xls", + "AppUrl": "/cells/merger", + "Name": "MHTML to XLS Merger", + "Extension1": "mhtml", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/mhtml-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "MHTML to XLSX Merger", + "Extension1": "mhtml", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/mhtml-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "MHTML to XLSM Merger", + "Extension1": "mhtml", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/mhtml-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "MHTML to XLSB Merger", + "Extension1": "mhtml", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/mhtml-to-ods", + "AppUrl": "/cells/merger", + "Name": "MHTML to ODS Merger", + "Extension1": "mhtml", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/mhtml-to-csv", + "AppUrl": "/cells/merger", + "Name": "MHTML to CSV Merger", + "Extension1": "mhtml", + "Extension2": "csv" + }, + { + "Url": "/cells/merger/mhtml-to-tsv", + "AppUrl": "/cells/merger", + "Name": "MHTML to TSV Merger", + "Extension1": "mhtml", + "Extension2": "tsv" + }, + { + "Url": "/cells/merger/mhtml-to-html", + "AppUrl": "/cells/merger", + "Name": "MHTML to HTML Merger", + "Extension1": "mhtml", + "Extension2": "html" + }, + { + "Url": "/cells/merger/mhtml-to-bmp", + "AppUrl": "/cells/merger", + "Name": "MHTML to BMP Merger", + "Extension1": "mhtml", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/mhtml-to-jpg", + "AppUrl": "/cells/merger", + "Name": "MHTML to JPG Merger", + "Extension1": "mhtml", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/mhtml-to-png", + "AppUrl": "/cells/merger", + "Name": "MHTML to PNG Merger", + "Extension1": "mhtml", + "Extension2": "png" + }, + { + "Url": "/cells/merger/mhtml-to-svg", + "AppUrl": "/cells/merger", + "Name": "MHTML to SVG Merger", + "Extension1": "mhtml", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/mhtml-to-tiff", + "AppUrl": "/cells/merger", + "Name": "MHTML to TIFF Merger", + "Extension1": "mhtml", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/mhtml-to-xps", + "AppUrl": "/cells/merger", + "Name": "MHTML to XPS Merger", + "Extension1": "mhtml", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/mhtml-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "MHTML to MHTML Merger", + "Extension1": "mhtml", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/mhtml-to-md", + "AppUrl": "/cells/merger", + "Name": "MHTML to MD Merger", + "Extension1": "mhtml", + "Extension2": "md" + }, + { + "Url": "/cells/merger/mhtml-to-word", + "AppUrl": "/cells/merger", + "Name": "MHTML to WORD Merger", + "Extension1": "mhtml", + "Extension2": "word" + }, + { + "Url": "/cells/merger/mhtml-to-docx", + "AppUrl": "/cells/merger", + "Name": "MHTML to DOCX Merger", + "Extension1": "mhtml", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/mhtml-to-ppt", + "AppUrl": "/cells/merger", + "Name": "MHTML to PPT Merger", + "Extension1": "mhtml", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/mhtml-to-pptx", + "AppUrl": "/cells/merger", + "Name": "MHTML to PPTX Merger", + "Extension1": "mhtml", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/mhtml-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "MHTML to POWERPOINT Merger", + "Extension1": "mhtml", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/jpg-to-pdf", + "AppUrl": "/cells/merger", + "Name": "JPG to PDF Merger", + "Extension1": "jpg", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/jpg-to-xls", + "AppUrl": "/cells/merger", + "Name": "JPG to XLS Merger", + "Extension1": "jpg", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/jpg-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "JPG to XLSX Merger", + "Extension1": "jpg", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/jpg-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "JPG to XLSM Merger", + "Extension1": "jpg", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/jpg-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "JPG to XLSB Merger", + "Extension1": "jpg", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/jpg-to-ods", + "AppUrl": "/cells/merger", + "Name": "JPG to ODS Merger", + "Extension1": "jpg", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/jpg-to-html", + "AppUrl": "/cells/merger", + "Name": "JPG to HTML Merger", + "Extension1": "jpg", + "Extension2": "html" + }, + { + "Url": "/cells/merger/jpg-to-bmp", + "AppUrl": "/cells/merger", + "Name": "JPG to BMP Merger", + "Extension1": "jpg", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/jpg-to-jpg", + "AppUrl": "/cells/merger", + "Name": "JPG to JPG Merger", + "Extension1": "jpg", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/jpg-to-png", + "AppUrl": "/cells/merger", + "Name": "JPG to PNG Merger", + "Extension1": "jpg", + "Extension2": "png" + }, + { + "Url": "/cells/merger/jpg-to-svg", + "AppUrl": "/cells/merger", + "Name": "JPG to SVG Merger", + "Extension1": "jpg", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/jpg-to-tiff", + "AppUrl": "/cells/merger", + "Name": "JPG to TIFF Merger", + "Extension1": "jpg", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/jpg-to-xps", + "AppUrl": "/cells/merger", + "Name": "JPG to XPS Merger", + "Extension1": "jpg", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/jpg-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "JPG to MHTML Merger", + "Extension1": "jpg", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/jpg-to-word", + "AppUrl": "/cells/merger", + "Name": "JPG to WORD Merger", + "Extension1": "jpg", + "Extension2": "word" + }, + { + "Url": "/cells/merger/jpg-to-docx", + "AppUrl": "/cells/merger", + "Name": "JPG to DOCX Merger", + "Extension1": "jpg", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/jpg-to-ppt", + "AppUrl": "/cells/merger", + "Name": "JPG to PPT Merger", + "Extension1": "jpg", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/jpg-to-pptx", + "AppUrl": "/cells/merger", + "Name": "JPG to PPTX Merger", + "Extension1": "jpg", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/jpg-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "JPG to POWERPOINT Merger", + "Extension1": "jpg", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/png-to-pdf", + "AppUrl": "/cells/merger", + "Name": "PNG to PDF Merger", + "Extension1": "png", + "Extension2": "pdf" + }, + { + "Url": "/cells/merger/png-to-xls", + "AppUrl": "/cells/merger", + "Name": "PNG to XLS Merger", + "Extension1": "png", + "Extension2": "xls" + }, + { + "Url": "/cells/merger/png-to-xlsx", + "AppUrl": "/cells/merger", + "Name": "PNG to XLSX Merger", + "Extension1": "png", + "Extension2": "xlsx" + }, + { + "Url": "/cells/merger/png-to-xlsm", + "AppUrl": "/cells/merger", + "Name": "PNG to XLSM Merger", + "Extension1": "png", + "Extension2": "xlsm" + }, + { + "Url": "/cells/merger/png-to-xlsb", + "AppUrl": "/cells/merger", + "Name": "PNG to XLSB Merger", + "Extension1": "png", + "Extension2": "xlsb" + }, + { + "Url": "/cells/merger/png-to-ods", + "AppUrl": "/cells/merger", + "Name": "PNG to ODS Merger", + "Extension1": "png", + "Extension2": "ods" + }, + { + "Url": "/cells/merger/png-to-html", + "AppUrl": "/cells/merger", + "Name": "PNG to HTML Merger", + "Extension1": "png", + "Extension2": "html" + }, + { + "Url": "/cells/merger/png-to-bmp", + "AppUrl": "/cells/merger", + "Name": "PNG to BMP Merger", + "Extension1": "png", + "Extension2": "bmp" + }, + { + "Url": "/cells/merger/png-to-jpg", + "AppUrl": "/cells/merger", + "Name": "PNG to JPG Merger", + "Extension1": "png", + "Extension2": "jpg" + }, + { + "Url": "/cells/merger/png-to-png", + "AppUrl": "/cells/merger", + "Name": "PNG to PNG Merger", + "Extension1": "png", + "Extension2": "png" + }, + { + "Url": "/cells/merger/png-to-svg", + "AppUrl": "/cells/merger", + "Name": "PNG to SVG Merger", + "Extension1": "png", + "Extension2": "svg" + }, + { + "Url": "/cells/merger/png-to-tiff", + "AppUrl": "/cells/merger", + "Name": "PNG to TIFF Merger", + "Extension1": "png", + "Extension2": "tiff" + }, + { + "Url": "/cells/merger/png-to-xps", + "AppUrl": "/cells/merger", + "Name": "PNG to XPS Merger", + "Extension1": "png", + "Extension2": "xps" + }, + { + "Url": "/cells/merger/png-to-mhtml", + "AppUrl": "/cells/merger", + "Name": "PNG to MHTML Merger", + "Extension1": "png", + "Extension2": "mhtml" + }, + { + "Url": "/cells/merger/png-to-word", + "AppUrl": "/cells/merger", + "Name": "PNG to WORD Merger", + "Extension1": "png", + "Extension2": "word" + }, + { + "Url": "/cells/merger/png-to-docx", + "AppUrl": "/cells/merger", + "Name": "PNG to DOCX Merger", + "Extension1": "png", + "Extension2": "docx" + }, + { + "Url": "/cells/merger/png-to-ppt", + "AppUrl": "/cells/merger", + "Name": "PNG to PPT Merger", + "Extension1": "png", + "Extension2": "ppt" + }, + { + "Url": "/cells/merger/png-to-pptx", + "AppUrl": "/cells/merger", + "Name": "PNG to PPTX Merger", + "Extension1": "png", + "Extension2": "pptx" + }, + { + "Url": "/cells/merger/png-to-powerpoint", + "AppUrl": "/cells/merger", + "Name": "PNG to POWERPOINT Merger", + "Extension1": "png", + "Extension2": "powerpoint" + }, + { + "Url": "/cells/merger/jpg", + "AppUrl": "/cells/merger", + "Extension1": "jpg", + "Name": "JPG Merger" + }, + { + "Url": "/cells/merger/png", + "AppUrl": "/cells/merger", + "Extension1": "png", + "Name": "PNG Merger" + }, + + { + "Url": "/cells/comparison/excel", + "AppUrl": "/cells/comparison", + "Extension1": "excel", + "Name": "EXCEL Comparison" + }, + { + "Url": "/cells/comparison/xls", + "AppUrl": "/cells/comparison", + "Extension1": "xls", + "Name": "XLS Comparison" + }, + { + "Url": "/cells/comparison/xlsx", + "AppUrl": "/cells/comparison", + "Extension1": "xlsx", + "Name": "XLSX Comparison" + }, + { + "Url": "/cells/comparison/xlsm", + "AppUrl": "/cells/comparison", + "Extension1": "xlsm", + "Name": "XLSM Comparison" + }, + { + "Url": "/cells/comparison/xlsb", + "AppUrl": "/cells/comparison", + "Extension1": "xlsb", + "Name": "XLSB Comparison" + }, + { + "Url": "/cells/comparison/ods", + "AppUrl": "/cells/comparison", + "Extension1": "ods", + "Name": "ODS Comparison" + }, + { + "Url": "/cells/comparison/csv", + "AppUrl": "/cells/comparison", + "Extension1": "csv", + "Name": "CSV Comparison" + }, + { + "Url": "/cells/comparison/tsv", + "AppUrl": "/cells/comparison", + "Extension1": "tsv", + "Name": "TSV Comparison" + }, + { + "Url": "/cells/comparison/html", + "AppUrl": "/cells/comparison", + "Extension1": "html", + "Name": "HTML Comparison" + }, + { + "Url": "/cells/comparison/mht", + "AppUrl": "/cells/comparison", + "Extension1": "mht", + "Name": "MHT Comparison" + }, + { + "Url": "/cells/comparison/mhtml", + "AppUrl": "/cells/comparison", + "Extension1": "mhtml", + "Name": "MHTML Comparison" + } +] \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/App_Data/resources_EN.xml b/Demos/Apps/Aspose.Cells.Common/App_Data/resources_EN.xml new file mode 100644 index 000000000..942bf8bc3 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/App_Data/resources_EN.xml @@ -0,0 +1,948 @@ + + + + {0} Product Family Includes + Aspose.Cells + + Conversion + Viewer + Watermark + Search + Assembly + Annotation + Unlock + Protect + Editor + Free File Format Apps + Save as + DOWNLOAD NOW + Send to email + + Press Ctrl + D to store it in your bookmarks in order not to search it again + + Share on Facebook + Share on Twitter + Share on LinkedIn + See other apps + Try our Cloud API + Leave a feedback + See source code + Bookmark this app + + Press Ctrl + D to add this page to your favorites or Esc to cancel the action. + + Send the download link to + email address + Download File + Cancel + Send + Send us your feedback + Write here your opinion, suggestions, etc. + 1000 characters maximum + Work with your documents in other free apps + Conversion Quality + Powered by + + . All files are processed using Aspose APIs, which are being used by many Fortune 100 companies across 114 countries + + You are trying to upload document(s) of unsupported type: + Please select a file to upload + Please select less than ten files + File size must be equal or less than 5M bytes. + No search results + Wrong regular expression + Drop or upload your files + Editor Quality + document + Parse Quality + Save + Clear All + Metadata Quality + Viewer Quality + Watermark Quality + Merge Quality + Please select between two and ten files + Search Quality + Search query can't be empty + Please select only one file + Assemble Quality + Annotation Quality + Type Password + Unlock Quality + Password input can't be empty + Protection Quality + Your feedback is sent successfully + Feedback text message should be less than 1000 symbols + Please Enter Valid Email ID + + Excel + Please select an Excel spreadsheet to upload + Please select less than ten Excel files + No search results + Wrong regular expression + Drop or upload your Excel files + Drop or upload your Source Excel File + Drop or upload your Target Excel file + You are trying to upload Excel spreadsheet(s) of unsupported type: + Please, use our full version of {0} for uploading this type of Excel spreadsheet file(s): + Excel Editor + Excel Viewer + Please select between two and ten Excel files + Work with your Excel spreadsheets in other free apps + + Metadata has been saved successfully + Your files have been processed successfully + Annotations removed successfully + Your files have been processed successfully + Your file has been processed successfully + Your file has been processed successfully + Your file has been processed successfully + Your document has been assembled successfully + Your file has been unlocked successfully + Your file has been protected successfully + Your file has been processed successfully + + Your file(s) has been converted successfully, please check your email to download converted file(s) + Your file havs been processed successfully, please check your email to download results + Your file has been processed successfully, please check your email to download results + Your file has been compared successfully, please check your email to download compared file + Your file has been merged successfully, please check your email to download the merged file + Your file has been parsed successfully, please check your email to download parsed files + Your files have been split successfully, please check your email to download split files + The search in your file has been completed successfully, please check your email to download the file with search results + Your file has been unlocked successfully, please check your email to download unlocked files + Your file has been protected successfully, please check your email to download protected files + Your file has been charted successfully, please check your email to download chart files + Your file havs been processed successfully, please check your email to download results + Your file havs been processed successfully, please check your email to download results + Your file havs been processed successfully, please check your email to download results + + Invalid file, please upload a file with extension + API response timeout + No images found + Target + + + + + Fast and Easy Conversion + Upload your Excel spreadsheet, choose the save format type and click on “Convert” button. You will get the download link as soon as the file is converted + Convert from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Conversion Quality + CONVERT + Convert other files + Your files have been processed successfully + VIEW RESULTS + Convert + + Please enter watermark text + Fast and Easy Add + Add + Remove + Upload your file, enter watermark text and click on “Add Watermark” button. You will get the download link as soon as the watermark text is added. + Add Watermark from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Watermark Quality + View and edit your Excel and OpenOffice Spreadsheets metadata properties + View & Edit {0} Metadata Online - Free Online Excel Properties Viewer & Editor + Free online edit {0} spreadsheet properties: title, author, subject, keywords and more. + Free Online {0} Metadata Viewer & Editor + Online app to view & edit Excel & OpenDocument Spreadsheet properties: title, author, subject, keywords and more. + View, edit & clear all metadata from Excel and OpenOffice spreadsheet online + Edit Excel spreadsheet company, author, subject & keywords + Extract creation date, update date and last editor + View & edit custom properties + Fast and Easy Metadata + Upload your file, update the Metadata and click on "Save" button. You will get the download link as soon as the file is saved + Edit Metadata from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required by you + Metadata Quality + View your Excel file online + Open {0} Online + Free online {0} viewer. View Excel XLS, XLSX, XLSM, XLSB, TSV, CSV, HTML, MHT, MHTML & OpenDocument ODS spreadsheets online. + Online {0} Viewer + View {0} file online for free + Open your Excel spreadsheet online for free + Save your Excel spreadsheet as html or image file + View charts & shapes as images + View formulas calculation results + Find & copy cells values + View OpenDocument Spreadsheet online + Convert {0} Online - Free Online Excel Converter + Free online {0} converter. Convert {0} files to Word, Excel, PowerPoint, PDF, CSV, JPG, HTML, ODS, BMP, PNG, SVG, TIFF, XPS and more. + Free online {0} converter + Convert {0} to Word, Excel, PowerPoint, PDF, JPG, PNG, CSV & HTML and more + Convert {0} to {1} - Free Online {0} to {1} Converter + Free Online {0} to {1} Converter. Convert {0} files to Word, Excel, PowerPoint, PDF, CSV, JPG, HTML, ODS, BMP, PNG, SVG, TIFF, XPS and more. + Free Online {0} to {1} Converter + Convert {0} to Word, Excel, PowerPoint, PDF, JPG, PNG, CSV & HTML and more + DOCX, PPTX, PDF, XLS, XLSX, XLSM, XLSB, CSV, JPG, HTML, ODS, BMP, PNG, SVG, TIFF, XPS + Assemble data in your Excel spreadsheet + Search text in your Excel spreadsheet + Parse text and images from your Excel Spreadsheet + Merge Excel Spreadsheet Files + Remove annotations from your Excel or OpenDocument Spreadsheet online from anywhere + Add Watermark in your Excel spreadsheet online from anywhere + + Convert your Excel worksheets to PDF, HTML and other formats from any OS and browser + Add Text Watermark to Microsoft Excel & OpenDocument Spreadsheet Files + Upload spreadsheets to add watermark to worksheets in any specified color. + + Merge {0} Online - Free Online Excel Merger + Free online {0} merger. Merge Excel files into multiple sheets or single sheet online. Merge, concatenate or combine {0} files to Excel, PDF, Images and HTML online. + Free online {0} merger + Merge/Combine {0} files to Excel, PDF, Images & HTML online. + Merge {0} to {1} Online - Free Online {0} to {1} Merger + Free online {0} to {1} merger. Merge Excel files into multiple sheets or single sheet online. Merge, concatenate or combine {0} to {1} online. + Free online {0} to {1} merger + Merge/Combine {0} to {1} online from any device, with a modern browser like Chrome, Opera and Firefox. + + Free App to remove Annotations from Excel file + Remove Annotations from Excel and Open Office files. Perform operations in your favoritre browser on any platform including mobile. + Fast and Easy Parser + Upload your document and click on “PARSE NOW” button. You will get the text file or zip-file with text and images as soon as the Parsing is performed + Parse from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Parse Quality + Quick and Easy Viewer + Upload your Excel spreadsheet and you will be redirected to the Viewer app with great user experience and many more features + Upload your document and you will be redirected to the {0} Viewer app with great user experience and many more features + View from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Viewer Quality + Fast and Easy Way to Merge + Upload your documents and click on “MERGE NOW” button. It will merge your document files into one and provide you a download link to download merged document. The output format will be the output format of your first document + Merge from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Merge Quality + Fast and Easy Search + Upload your document and click on “SEARCH NOW” button. You will get the file with search results as soon as the operation is performed + Search from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Search Quality + Fast and Easy Assemble Data + Upload your template and data-source files, choose the appropriate options and click on “ASSEMBLE NOW” button. You will get the output file as soon as the files are assembled. + Assemble from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you. + Assemble Quality + Fast and Easy Annotation + Upload your document and click on “REMOVE” button. You will get the download link as soon as the annotations are removed. + Upload your document and click on “{0}” button. You will get the download link as soon as the annotations are removed. + Remove Annotations from Anywhere + {0} Annotations from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Annotation Quality + Fast and Easy Unlock + Upload your password protected file, enter current password and click on "UNLOCK NOW" button. You will get unlocked file as soon as the unlocking is performed + Unlock from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Unlock Quality + Fast and Easy Protection + Upload your file, enter new password and click on "PROTECT NOW" button. You will get protected file as soon as the protection is performed + Protect from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Protection Quality + Parse other file + Edit metadata in another file + View another file + Add watermark in another file + Merge other files + Search in other file + Assemble another file + Remove annotations from other files + Unlock another file + Protect another file + Edit your Excel Spreadsheet online + Edit {0} Online - Free Online Excel Editor + Free online {0} editor & viewer web app. View, edit Excel spreadsheets with advanced WYSIWYG editor. + Open {0} online to edit + Free online {0} editor + Fast and Easy Editor + Click on “Create New” button, a new Excel Spreadsheet will be rendered for you to edit. Upload your Excel file and click on “Edit Now” button, you will be redirected to the HTML Editor app with great user experience and many more features + Edit from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Editor Quality + Supported Documents: {0} + Quick way to convert multiple Excel spreadsheet files + Easily save document as pdf, images or html + Convert OpenDocument Spreadsheet + Upload maximum 10 files and convert them simultaneously + Your files have been processed successfully + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.tsv|.html|.mht|.mhtml + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.tsv|.html|.mht|.mhtml + .xls|.xlsx|.xlsm|.xlsb|.ods + .xls|.xlsx|.xlsm|.xlsb|.ods + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.tsv|.html|.mht|.mhtml + .xls|.xlsx|.xlsm|.xlsb|.ods + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.tsv|.html|.mht|.mhtml + .xls|.xlsx|.xlsm|.xlsb|.ods + .xls|.xlsx|.xlsm|.xlsb|.ods + VIEW RESULTS + VIEW RESULTS + SEARCH NOW + MERGE NOW + DELETE NOW + ASSEMBLE NOW + REMOVE + UNLOCK NOW + PROTECT NOW + Instantly download or send output file as an email + Extract images from Excel Workbook + Extract Images from Excel Workbook + Read all images from Microsoft Office (XLS, XLSX) and Open Office (ODS) files + Other Supported Conversions + You can also convert {0} into many other file formats. Please see the complete list below. + XLS, XLSX or ODS + Workbook + Excel + .xls|.xlsx|.xlsm|.xlsb|.ods + Instantly download or send output file as an email + Save to desired format: XLSX, PDF, HTML or original Excel format + Advanced WYSIWYG Excel editor online + Calculate formulas + Set fonts & styles + Render Charts & Shapes + Create or open Excel Spreadsheet to edit + Create or open OpenDocument Spreadsheet to edit + Instantly download or send output file as an email + Parse Microsoft Excel & OpenDocument Spreadsheet + Free app to parse & extract text & images from XLS, XLSX, XLSM, XLSB & ODS file formats. + Online Spreadsheet Parser App + Parse text & images from Microsoft Excel XLS, XLSX, XLSM, XLSB and OpenDocument ODS files. + PARSE NOW + Other Supported Mergers + You can also merge other file formats. Please see the list below. + Quick way to merge multiple Excel spreadsheet files + Combine different file formats into one + Easily save document as pdf, images or html + Merge OpenDocument Spreadsheet files + Choose the order of merged files + Merge Excel files into multiple sheets or single sheet + Free Online Excel Workbook Merger + Merge Microsoft Office (XLS, XLSX, XLSM, XLSB) and Open Document (ODS) files + Free App to remove Annotations from Excel file + Remove Annotations from Excel and Open Office files. Perform operations in your favoritre browser on any platform including mobile. + Annotation Removal App for Excel & OpenDocument Spreadsheet + Free app to remove annotations from spreadsheet files such as XLS, XLSX, XLSM, XLSM, XLSB, ODS and more. + Other Supported File Formats + You can also remove annotations from other file formats. Please see the list below. + Instantly download or send output file as an email + .xls|.xlsx|.xlsm|.xlsb|.ods + XLS, XLSX, XLSM, XLSB, ODS, PDF, CSV, TSV, HTML, BMP, JPG, PNG, SVG, TIFF, XPS, MHTML, MD + CSV,Tiff,Xlsb,Xlsm,Xlsx,Xltm,Xltx,pdf,xls,ods + Instantly download the assembled file + Other Supported Assemblies + You can also assemble data into reports in other file formats. Please see the list below. + Assemble data in Microsoft Excel (XLS, XLSX, XLSM, XLSB) and Open Document Spreadsheet (ODS) files + .xls|.xlsx|.xlsm|.xlsb|.ods + Assemble Excel Spreadsheet + Instantly download or send output file as an email + Search Text in Excel Files | Text Searching App for Spreadsheets + Search text in Microsoft Excel XLS, XLSX, XLSM, XLSB, CSV, Tab Delimited, TSV and OpenDocument ODS files. + Search Text in Microsoft Excel & OpenDocument Spreadsheet Files + Upload the spreadsheet and specify the text you want to search. App will return a file with results as soon as the processing is done. + Type text to search in Excel spreadsheet + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.txt|.tsv + + Convert {0} to {1} + Click inside the file drop area to upload one {0} file or drag & drop one {1} file. + Your {0} file will be uploaded and will be converted to {1} format. + Download link of {0} file will be available instantly after conversion. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + How to convert {0} files using {1} + Upload files + https://products.aspose.app/img/{0}/HowToExample/Step1.png + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Note + https://products.aspose.app/img/{0}/HowToExample/Step2.png + You can upload maximum 10 files for the operation. + Our {0} converter engine + https://products.aspose.app/img/{0}/HowToExample/Step3.png + Your {0} files will be uploaded and will be converted to {1} format. + Get the conversion result + https://products.aspose.app/img/{0}/HowToExample/Step4.png + Download link of {1} files will be available instantly after conversion. + Get results from anywhere + https://products.aspose.app/img/{0}/HowToExample/Step5.png + You can also send a link to the {0} file to your email address. + Note + https://products.aspose.app/img/{0}/HowToExample/Step6.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + + How to Remove Annotations from {0} file using {1} + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Your {0} file will be rendered automatically to remove annotations. + Download link of {0} file will be available instantly after remove annotations. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + + Merge {0} + Merge {0} to {1} + How to merge {0} files using {1} App + Upload files + https://products.aspose.app/cells/merger + https://products.aspose.app/cells/img/howto/merger-howto-step1.png + Click inside the file drop area to upload first {0} file or drag & drop one {0} file. + Note + https://products.aspose.app/cells/merger + https://products.aspose.app/cells/img/howto/merger-howto-step2.png + Likewise, upload second {0} file or drag & drop it. + Merge into single sheet + https://products.aspose.app/cells/merger + https://products.aspose.app/cells/img/howto/merger-howto-step3.png + Check 'Merge into one sheet' option if merging {0} files into one sheet. + Our {0} merger engine + https://products.aspose.app/cells/merger + https://products.aspose.app/cells/img/howto/merger-howto-step4.png + Click the 'MERGE NOW' button to start merging files. + Get the merging result + https://products.aspose.app/cells/merger + https://products.aspose.app/cells/img/howto/merger-howto-step5.png + Instantly download, view or send merged file as an email. + Note + https://products.aspose.app/cells/merger + https://products.aspose.app/cells/img/howto/merger-howto-step6.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + + How to assemble {0} file using {1} App + Click inside the file drop area to upload {0} template or drag & drop it. Click "Help" button to get help in creating template. + Click "Upload Template" button. Your template file will be uploaded to server. + Drop and upload your data source file. Click "Help" button to get help in creating data source file. + Click "Upload Data Source" button. Your data source file will be uploaded to server. + Click "ASSEMBLE NOW" button to assemble data into {0} template. You will get assembled file immediately. + + Add Text Watermark to Microsoft Excel & OpenDocument Spreadsheet Files + Free app to add text based Watermark to XLS, XLSX, XLSM, XLSB & ODS file formats. Save watermarked spreadsheet in TIFF, PDF & other formats. + Add Text Watermark to Microsoft Excel & OpenDocument Spreadsheet Files + Upload spreadsheets to add watermark to worksheets in any specified color. + + Assemble Microsoft Excel & OpenDocument Spreadsheets + Free app to generate reports in XLS, XLSX, XLSM, XLSB & ODS files using the template & data sheet. Process Smart Markers in template to fill data from another data sheet. + Assemble Spreadsheets On the Go. + Upload a template and process it against the data to generate elegant reports. + + You can also view or edit metadata from other file formats. Please see the list below. + Other Metadata editors + + How to edit one {0} file metadata using {1} App + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + File will be automatically rendered for you to view & edit metadata instantly. + Download updated {0} file with metadata. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + {0} Password Remover Online - Unlock {0} Online + Unlock password protected Excel and OpenDocument Spreadsheet online for free. + Free Online {0} Password Remover + Unprotect password protected {0} file + Unlock your password protected Excel and ODS file + Unprotect Excel from any device: Windows, Mac, Linux, Android and iOS. + Remove password in multiple Excel files + The Unlock app do not decrypt or recover the Excel spreadsheet. + Instantly download or send output file as an email + + How to parse one {0} file using {1} + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + Click on "PARSE NOW" button, file will be automatically uploaded to parse. + Download link of {0} file will be available instantly after parse. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + Other Parser file formats + You can also parse other file formats. Please see the list below. + Other file formats splitter + You can also split other file formats. Please see the list below. + + View {0} Spreadsheet + How to view one {0} file using {1} + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + Your {0} file will be automatically rendered for you to view in html. + Download the {0} file in html or image format. + View and navigate between worksheets. + Search & copy cells values. + Other Supported Viewers + You can also view many other file formats. Please see the complete list below. + + Edit {0} Spreadsheet + How to create / edit and download one {0} file using {1} + Create New + https://products.aspose.app/cells/editor + https://products.aspose.app/cells/img/howto/editor-howto-step1.png + Click the 'Create New' button, a new Excel Spreadsheet will be rendered for you to edit & download instantly. + Upload file + https://products.aspose.app/cells/editor + https://products.aspose.app/cells/img/howto/editor-howto-step2.png + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + Edit Now + https://products.aspose.app/cells/editor + https://products.aspose.app/cells/img/howto/editor-howto-step3.png + Click the 'Edit Now' button, the uploaded Excel file will be rendered for you to view, edit & download instantly. + Download {0} Spreadsheet + https://products.aspose.app/cells/editor + https://products.aspose.app/cells/img/howto/editor-howto-step4.png + Download the modified {0} Spreadsheet as original Excel format, XLSX, PDF or HTML. + Other Supported Editors + You can also edit other file formats. Please see the list below. + + How to search text in {0} file using {1} + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + Type text or regular expression and click on “SEARCH NOW” button. + File will be automatically rendered for you to view results & download instantly. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + Other Supported Search + You can also do search in other file formats. Please see the list below. + + How to Add Watermark in {0} file using {1} + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + Your {0} file will be rendered automatically to add watermark. + Download link of {0} file will be available instantly after add watermark. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + Other Supported Watermark + You can also add Watermark to other document file formats. Please see the list below. + You can also analyze headers from other file formats. Please see the list below. + Other Supported Headers + You can also explore {0} from many other file formats. Please see the complete list below. + + Other Supported Unlocks + You can also unlock other document file formats. Please see the list below. + How to Unlock {0} files using {1} App + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Your {0} file will be rendered automatically to unlock. + Download link of {0} file will be available instantly after unlock. + You can also send a link to the {0} file to your email address. + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + Protect {0} Online - Free Online Encrypt Excel with Password + Password protect MS Excel and OpenDocument Spreadsheet online, encrypt XLS, XLSX, XLSM, XLSB & ODS with password online free. + Free Online Encrypt {0} with Password + Protect your Excel and ODS file by making it password protected + Protect MS Excel and OpenDocument Spreadsheet by making them password protected. + Protect Excel from any device: Windows, Mac, Linux, Android and iOS. + Encrypt with password in multiple Excel files + Instantly download or send output file as an email + The protected excel files require a password to open + Other Supported Protections + You can also protect other Excel file formats. Please see the list below. + + Protect {0} Spreadsheet + How to Protect {0} files using {1} App + Upload files + https://products.aspose.app/cells/protect + https://products.aspose.app/cells/img/howto/protect-howto-step1.png + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Note + https://products.aspose.app/cells/protect + https://products.aspose.app/cells/img/howto/protect-howto-step2.png + Enter new password in Password input field to make your {0} file password protected. + Our {0} protect engine + https://products.aspose.app/cells/protect + https://products.aspose.app/cells/img/howto/protect-howto-step3.png + Click on Protect Now button. Download link of password protected {0} file will be shown. + Get the protect result + https://products.aspose.app/cells/protect + https://products.aspose.app/cells/img/howto/protect-howto-step4.png + You can also send a link to the {0} file to your email address. + Note + https://products.aspose.app/cells/protect + https://products.aspose.app/cells/img/howto/protect-howto-step5.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + + Online Excel Worksheet Apps + Convert, Add Watermark or View your Excel worksheets online from anywhere + + + ❓ How can I convert {0} file? + First, you need to add a file for conversion: drag & drop your {0} file or click inside the white area for choose a file. Then click the "Convert" button. When {0} conversion is completed, you can download your result file. + ⏱️ How long does it take to convert {0}? + This converter works fast. You can convert {0} file in a few seconds. + 🛡️ Is it safe to convert {0} using free Aspose converter? + Of course! The download link of result files will be available instantly after conversion. We delete uploaded files after 24 hours and the download links will stop working after this time period. No one has access to your files. File conversion is absolutely safe. + 💻 Can I convert {0} on Linux, Mac OS or Android? + Yes, you can use free Aspose converter on any operating system that has a web browser. Our {0} converter works online and does not require any software installation. + + + ❓ How convert {0} to {1}? + First, you need to add a file for conversion: drag & drop your {0} file or click inside the white area for choose a file. Then click the "Convert" button. When {0} to {1} conversion is completed, you can download your {1} file. + ⏱️ How long does {0} to {1} conversion work? + This converter works fast. You can change {0} to {1} in a few seconds. + 🛡️ Is it safe to use the free {0} to {1} conversion service? + Of course! The download link of {1} files will be available instantly after conversion. We delete uploaded files after 24 hours and the download links will stop working after this time period. No one has access to your files. File conversion (including {0} to {1}) is absolutely safe. + 💻 Can I convert {0} to {1} on Linux, Mac OS or Android? + Our {0} to {1} converter works online and does not require any software installation. + 🌐 What browser should I use to convert {0} to {1}? + You can use any modern browser to convert {0} to {1}, for example, Google Chrome, Firefox, Opera, Safari. + + + ❓ How can I merge {0} file? + First, you need to add a file for merge: drag & drop your {0} file or click inside the white area for choose a file. Then click the "Merge" button. When {0} merging is completed, you can download your result file. + ⏱️ How long does it take to merge {0}? + This merger works fast. You can merge {0} file in a few seconds. + 🛡️ Is it safe to merge {0} using free Aspose merger? + Of course! The download link of result files will be available instantly after merging. We delete uploaded files after 24 hours and the download links will stop working after this time period. No one has access to your files. File merging is absolutely safe. + 💻 Can I merge {0} on Mac OS, Android or Linux? + Yes, you can use free Aspose merger on any operating system that has a web browser. Our {0} merger works online and does not require any software installation. + + + ❓ How merge {0} to {1}? + First, you need to add a file for merge: drag & drop your {0} file or click inside the white area for choose a file. Then click the "Merge" button. When {0} to {1} merging is completed, you can download your {1} file. + ⏱️ How long does {0} to {1} merge work? + This merger works fast. You can merge {0} to {1} in a few seconds. + 🛡️ Is it safe to use the free {0} to {1} merger service? + Of course! The download link of {1} files will be available instantly after merging. We delete uploaded files after 24 hours and the download links will stop working after this time period. No one has access to your files. File merging (including {0} to {1}) is absolutely safe. + 💻 Can I merge {0} to {1} on Linux, Mac OS or Android? + Our {0} to {1} merger works online and does not require any software installation. + 🌐 What browser should I use to merge {0} to {1}? + You can use any modern browser to merge {0} to {1}, for example, Google Chrome, Firefox, Opera, Safari. + + + ❓ How can I split {0} spreadsheet? + First, you need to add a file for split: drag & drop your {0} file or click inside the white area for choose a file. Then click the "Split" button. When split {0} spreadsheet is completed, you can download your result files. + ⏱️ How long does it take to split {0}? + This splitter works fast. You can split {0} in a few seconds. + 🛡️ Is it safe to split {0} using free Aspose splitter? + Of course! The download link of result files will be available instantly after splitting. We delete uploaded files after 24 hours and the download links will stop working after this time period. No one has access to your files. File splitter is absolutely safe. + 💻 Can I split {0} on Mac OS, Android or Linux? + Yes, you can use free Aspose splitter on any operating system that has a web browser. Our {0} splitter works online and does not require any software installation. + + + ❓ How can I remove password from {0} Excel spreadsheet? + First, you need to add a file for unlock: drag & drop your {0} file or click inside the white area for choose a file. Then click the "Unlock" button. When remove password from {0} spreadsheet is completed, you can download your result files. + ⏱️ How long does it take to unlock {0}? + This Unlock app works fast. You can remove password from {0} in a few seconds. + 🛡️ Is it safe to remove password from {0} using free Aspose Unlock? + Of course! The download link of result files will be available instantly after unlock. We delete uploaded files after 24 hours and the download links will stop working after this time period. No one has access to your files. File Unlock is absolutely safe. + 💻 Can I remove password from {0} on Mac OS, Android or Linux? + Yes, you can use free Aspose Unlock on any operating system that has a web browser. Our {0} Unlock works online and does not require any software installation. + + + Splitter + Split other files + Split your Excel spreadsheet + Split {0} Online + Free online {0} file splitter. Split by worksheet. + Free online {0} splitter + Split {0} spreadsheet files by worksheet. + .xls|.xlsx|.xlsm|.xlsb|.ods + Split an Excel spreadsheet by worksheet + Split into multiple Excel spreadsheet files + Keep styles of the source Excel spreadsheet + Split OpenDocument Spreadsheet file + Split {0} Spreadsheet + SPLIT + Fast and Easy Splitter + Upload your Excel spreadsheet and click on “SPLIT” button. You will get the zip-file with the result Excel spreadsheet files as soon as the Splitting is performed + Parse from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Split Quality + Split Quality + Split + Please, enter number in the field + Please, enter valid page range in the field + + + How to split one {0} spreadsheet using {1} + Upload files + https://products.aspose.app/cells/splitter + https://products.aspose.app/cells/img/howto/splitter-howto-step1.png + Click inside the file drop area to upload one {0} file or drag & drop one {0} file. + Note + https://products.aspose.app/cells/splitter + https://products.aspose.app/cells/img/howto/splitter-howto-step2.png + Click on "SPLIT" button, file will be automatically uploaded to split. + Our {0} splitter engine + https://products.aspose.app/cells/splitter + https://products.aspose.app/cells/img/howto/splitter-howto-step3.png + Download link of {0} spreadsheet will be available instantly after splitting. + Get the splitting result + https://products.aspose.app/cells/splitter + https://products.aspose.app/cells/img/howto/splitter-howto-step4.png + You can also send a link to the {0} spreadsheet to your email address. + Note + https://products.aspose.app/cells/splitter + https://products.aspose.app/cells/img/howto/splitter-howto-step5.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + Xlsx,Xls,Xlsm,Xlsb,Ods + PDF, XLS, XLSX, DOCX, PPTX, XLSM, XLSB, ODS, CSV, TSV, HTML, JPG, BMP, PNG, SVG, TIFF, XPS, MHTML, MD + + Save to desired format: {0} + Edit + View + Metadata + Convert Excel Chart from + + Merge + Unlock + + Protect + PDF, XLS, XLSX, DOCX, PPTX, XLSM, XLSB, ODS, CSV, TSV, HTML, JPG, BMP, PNG, SVG, TIFF, XPS, MHTML, MD + + + Aspose <strong>{0} converter</strong> is a free app to convert {0} format, also you can save the result to PDF, DOCX, PPTX, XLS, XLSX, XLSM, XLSB, ODS, CSV, TSV, HTML, JPG, BMP, PNG, SVG, TIFF, XPS, MHTML and Markdown. Convert {0} online from Mac OS, Linux, Android, iOs, and anywhere. </p> <p style="font-size: 20px; margin-bottom: 10px !important"> If you want to convert programmatically please check <a target="_blank" href="https://docs.aspose.com/display/cellsnet/Convert+Workbook+to+Different+Formats"><strong>Aspose.Cells documentation</strong></a>. + Aspose <strong>{0} merger</strong> is a free web app to combine multiple {0} files: combine to PDF, DOCX, PPTX, XLS, XLSX, XLSM, XLSB, ODS, CSV, TSV, HTML, JPG, BMP, PNG, SVG, TIFF, XPS, MHTML and Markdown. Merge Excel online from Mac OS, Linux, Android, iOs, and anywhere. + + + + + + + + + + + + + + Chart + Convert Chart from your Excel spreadsheet + .xls|.xlsx|.xlsm|.xlsb|.ods + JPG, PNG, PDF, BMP, SVG, TIFF, XPS + + Convert {0} Chart to Image Online - Free Online Excel Chart to image converter + Free online {0} Chart Converter. Convert chart of XLS, XLSX, XLSM, XLSB & ODS files to PDF, JPG, BMP, PNG, SVG, TIFF, XPS and more. + Free online {0} Chart to image converter + A web app to convert Excel Chart to PDF, JPG, PNG, BMP, SVG, TIFF, XPS + Convert Excel Chart to {1} Online - Free Online Excel Chart to image converter + Free online {0} Chart to {1} Converter. Convert chart of XLS, XLSX, XLSM, XLSB & ODS files to PDF, JPG, BMP, PNG, SVG, TIFF, XPS and more. + Free online {0} Chart to {1} converter + A web app to convert {0} Chart to {1} online from any device, with a modern browser like Chrome, Opera and Firefox. + + Render Charts as Excel style + Easily save Charts as pdf or images + Preview Charts in a gallery + Select Charts to save from the gallery + Fast and Easy Chart Converter + Upload your Excel spreadsheet, choose the save format type and click on “Render Chart” button. You will get all charts to preview. Select the charts and click the "SAVE" button, You will get the download link + Convert Chart from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Save Chart Quality + Conversion Chart Quality + Render Chart + Convert Chart from other files + + + How to convert Excel Chart to image + Upload files + https://products.aspose.app/img/{0}/HowToExample/Step1.png + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Note + https://products.aspose.app/img/{0}/HowToExample/Step2.png + You can upload maximum 10 files for the operation. + Our {0} Chart Render engine + https://products.aspose.app/img/{0}/HowToExample/Step3.png + Click the 'Render Chart' button, charts will be rendered in a gallery. + Get the rendering result + https://products.aspose.app/img/{0}/HowToExample/Step4.png + Select charts in the gallery and click the 'SAVE' button, download link of {1} files will be available instantly after rendering. + Get results from anywhere + https://products.aspose.app/img/{0}/HowToExample/Step5.png + You can also send a link to the image file to your email address. + Note + https://products.aspose.app/img/{0}/HowToExample/Step6.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + Other Excel Chart Converters + You can also convert charts from other Excel formats. Please see the list below. + + + Translation + Translate your Excel Spreadsheet online + Free online {0} translation app. Translate Excel spreadsheets online. + Free online {0} translation app. Translate Excel spreadsheets online. + Translate {0} Online - Free Online Excel Translation app + Translate {0} Online - Free Online Excel Translation app + Translate {0} online + Translate {0} online + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.tsv|.html|.mht|.mhtml + Free online {0} translation app + Free online {0} translation app + XLSX, XLS, PDF, DOCX, PPTX, XLSM, XLSB, ODS, CSV, TSV, HTML, JPG, BMP, PNG, SVG, TIFF, XPS, MHTML, MD + Translate + Quick way to translate Excel files into multiple languages + Support translation in 10 major languages: <strong>English, Arabic (العربية), Chinese (中文), French (Français), German (Deutsch), Italian (Italiano), Polish (Polski), Portuguese (Português), Russian (Русский), Spanish (Español)</strong> + Upload maximum 10 files and translate them simultaneously + Fast and Easy Translation + Upload your file, choose translation languages and output format, click on "Translate Now" button. You will get download link as soon as the file is translated + Translate from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you. + Translation Quality + Translation Quality + TRANSLATE NOW + Translate other files + Translate from + Translate to + en, ar, zh, fr, de, it, pl, pt, ru, es + English, Arabic (العربية), Chinese (中文), French (Français), German (Deutsch), Italian (Italiano), Polish (Polski), Portuguese (Português), Russian (Русский), Spanish (Español) + + Your files have been processed successfully + How to translate {0} files using {1} + Upload files + https://products.aspose.app/img/{0}/HowToExample/Step1.png + Click inside the file drop area to upload {0} files or drag & drop {0} files. + https://products.aspose.app/img/{0}/HowToExample/Step2.png + Select language of your files in <strong>From language options</strong>. + https://products.aspose.app/img/{0}/HowToExample/Step3.png + Select language for translation in <strong>To language options</strong>. + https://products.aspose.app/img/{0}/HowToExample/Step4.png + If you want to receive translated file in another format, select format in <strong>Translated file format</strong>. + https://products.aspose.app/img/{0}/HowToExample/Step5.png + Click <strong>Translate Now</strong> button. + https://products.aspose.app/img/{0}/HowToExample/Step6.png + Once your document is translated click on Download Now button. + https://products.aspose.app/img/{0}/HowToExample/Step7.png + You may also send the download link to any email address by clicking on Email button. + Other Supported Translations + You can also translate other file formats. Please see the list below. + + Comparison + Compare your Excel Spreadsheets online + Compare {0} Online - Free Online Excel Comparison + Free online {0} comparison web app. Compare Excel spreadsheets online. + {0} comparison online + Compare Excel files online for free + .xls|.xlsx|.xlsm|.xlsb|.ods|.csv|.tsv|.html|.mht|.mhtml + + Quick way to compare two Excel files and view the differences + Compare different file formats of Excel + Highlight the differences + Fast and Easy Comparison + Upload two Excel files, click the "Compare Now" button, and the differences will be highlighted in the viewer + Compare from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you. + Comparison Quality + Comparison Quality + Compare other files + How to compare {0} files using {1} + Upload files + https://products.aspose.app/img/{0}/HowToExample/Step1.png + Click inside the <strong>Source</strong> Excel file drop area to upload or drag & drop the one {0} file. + https://products.aspose.app/img/{0}/HowToExample/Step2.png + Click inside the <strong>Target</strong> Excel file drop area to upload or drag & drop the one {0} file. + https://products.aspose.app/img/{0}/HowToExample/Step3.png + Press the <strong>"COMPARE NOW"</strong> button to compare Excel files. + https://products.aspose.app/img/{0}/HowToExample/Step4.png + View two files and highlight differences. + Other Supported Comparisons + You can also compare other file formats. Please see the list below. + COMPARE NOW + Only allow one Excel file to be uploaded in the file placement area + Compare + + Mortgage Calculator + Calculate mortgage online + Mortgage Calculator + Free online Mortgage Calculator. + Mortgage Calculator + Calculate Mortgage online for free + Fast and Easy Mortgage Calculator + Enter the mortgage information in the form, and then click the "Calculate" button, the mortgage calculation result will be displayed on the page + Calculate Mortgage from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Mortgage Calculator Quality + Enter the mortgage information in the form to calculate the mortgage repayment summary + Calculate + + + XLSX, PDF, XLS, DOCX, PPTX, XLSM, XLSB, ODS, CSV, TSV, HTML, JPG, BMP, PNG, SVG, TIFF, XPS, MHTML, MD + + + Repair {0} Online - Free Online Excel Repair + Repair Excel, XLS, XLSX, XLSM, XLSB, XLTX, XLT, XLTM & ODS Online for Free. + Repair {0} File Online for Free + Repair in your Excel spreadsheet + Repair {0} from any device and browser + Repair Excel from any device: Windows, Mac, Linux, Android and iOS. + Repair in multiple Excel files + Instantly download or send output file as an email + Other Supported Repairions + Repair Data Only + You can also repair other Excel file formats. Please see the list below. + + Repair {0} Spreadsheet + How to Repair {0} files using {1} App + Upload files + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step1.png + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Note + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step2.png + Select option if you need. + Our {0} repair engine + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step3.png + Click on Repair Now button. Download link of repaired {0} file will be shown. + Get the repair result + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step4.png + You can also send a link to the {0} file to your email address. + Note + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step5.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + + Repair + REPAIR NOW + .xls|.xlsx|.xlsm|.xlsb|.ods + Repair another file + Fast and Easy Repair + Upload your file, You will get repaired file as soon as the repair is performed + Repair from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Repair Quality + Your file has been repaired successfully + Your file has been repaired successfully, please check your email to download eepaired files + + + Esign {0} Online - Free Online Excel Esign + Esign Excel, XLS, XLSX, XLSM, XLSB, XLTX, XLT, XLTM & ODS Online for Free. + Esign {0} File Online for Free + Esign in your Excel spreadsheet + Esign {0} from any device and browser + Esign Excel from any device: Windows, Mac, Linux, Android and iOS. + Esign in multiple Excel files + Instantly download or send output file as an email + Other Supported Esignions + Esign Data Only + You can also repair other Excel file formats. Please see the list below. + + Esign {0} Spreadsheet + How to Esign {0} files using {1} App + Upload files + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step1.png + Click inside the file drop area to upload {0} files or drag & drop {0} files. + Note + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step2.png + Fill in the necessary options. + Our {0} repair engine + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step3.png + Click on Esign Now button. Download link of repaired {0} file will be shown. + Get the repair result + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step4.png + You can also send a link to the {0} file to your email address. + Note + https://products.aspose.app/cells/repair + https://products.aspose.app/cells/img/howto/repair-howto-step5.png + Note that file will be deleted from our servers after 24 hours and download links will stop working after this time period. + + Esign + REPAIR NOW + .xls|.xlsx|.xlsm|.xlsb|.ods + Esign another file + Fast and Easy Esign + Upload your file, You will get repaired file as soon as the repair is performed + Esign from Anywhere + It works from all platforms including Windows, Mac, Android and iOS. All files are processed on our servers. No plugin or software installation required for you + Esign Quality + Your file has been repaired successfully + Your file has been repaired successfully, please check your email to download eepaired files + Certificate + Password + + diff --git a/Demos/Apps/Aspose.Cells.Common/Aspose.Cells.Common.csproj b/Demos/Apps/Aspose.Cells.Common/Aspose.Cells.Common.csproj new file mode 100644 index 000000000..191486c10 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Aspose.Cells.Common.csproj @@ -0,0 +1,57 @@ + + + + netcoreapp3.1 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GridJs\Aspose.Cells.dll + + + GridJs\Aspose.Cells.GridJs.dll + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudApiControllerBase.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudApiControllerBase.cs new file mode 100644 index 000000000..70d559919 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudApiControllerBase.cs @@ -0,0 +1,226 @@ + + +namespace Aspose.Cells.Common.CloudHelper +{ + using Aspose.Cells.Common.Config; + using Aspose.Cells.Common.Controllers; + using Aspose.Cells.Common.Models; + using Aspose.Cells.Common.Services; + using Microsoft.AspNetCore.Http; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + + /// + /// + /// + public class CellsCloudApiControllerBase : CellsApiControllerBase + { + public CellsCloudApiControllerBase(IStorageService storage, IConfiguration configuration, ILogger logger) : base(storage, configuration, logger) + { + + } + + protected async Task> UploadFiles(string sessionId, string appName) + { + var duration = Stopwatch.StartNew(); + var sourceKeyLs = new List(); + IDictionary keyValues = new Dictionary(); + try + { + IEnumerable uploadProvider = HttpContext.Request.Form.Files; + + var form = await HttpContext.Request.ReadFormAsync(); + var service = new WebClientService(); + var internalService = new InternalLinkService(Storage); + var files = await Task.WhenAll( + form + .Where(item => + Uri.IsWellFormedUriString(item.Value, UriKind.Absolute)) + .AsParallel() + .Where(item => + item.Key.StartsWith("link_")) + .Select(async item => await service.Upload(item.Value))); + + var internalFiles = await Task.WhenAll( + form + .Where(item => Uri.IsWellFormedUriString(item.Value, UriKind.Relative)) + .AsParallel() + .Where(item => + item.Key.StartsWith("link_")) + .Select(async item => await internalService.Upload(item.Value))); + + uploadProvider = uploadProvider.Union(files.Union(internalFiles).Where(f => f != null).ToArray()); + + var formFiles = uploadProvider.ToList(); + Logger.FileUploading(formFiles.Select(x => x.FileName).ToArray(), "", false); + + foreach (var formFile in formFiles) + { + await using var memoryStream = new MemoryStream(); + await formFile.CopyToAsync(memoryStream); + await using (var stream = new MemoryStream()) + { + memoryStream.Seek(0, SeekOrigin.Begin); + await memoryStream.CopyToAsync(stream); + + // upload source files to AWS S3 + var objectPath = $"{Configuration.SourceFolder}/{sessionId}/{formFile.FileName}"; + sourceKeyLs.Add(objectPath); + await Storage.Upload(objectPath, stream, new AwsMetaInfo + { + OriginalFileName = formFile.FileName, + Title = formFile.FileName + }); + } + + memoryStream.Seek(0, SeekOrigin.Begin); + MemoryStream fileStream = new MemoryStream(); + memoryStream.CopyTo(fileStream); + fileStream.Seek(0, SeekOrigin.Begin); + keyValues.Add(formFile.FileName, fileStream); + } + + Logger.FileUploaded(formFiles.Select(x => x.FileName).ToArray(), "", duration.Elapsed); + return keyValues; + } + catch (CellsException e) + { + if (e.Code != ExceptionType.IncorrectPassword) + { + foreach (var sourceKey in sourceKeyLs) + { + var destinationKey = sourceKey.Replace(Configuration.SourceFolder, $"{Configuration.ErrorFolder}/{appName}"); + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + if (e.Code == ExceptionType.Interrupted) + { + Logger.LogError("UploadWorkbooks {SessionId}=>{ProcessingTimeout}", sessionId, Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + } + + Logger.FileUploadingError(HttpContext.Request?.Form?.Files?.Select(x => x.FileName).ToArray(), duration.Elapsed, e); + if (string.IsNullOrEmpty(e.Message)) + throw new Exception("Invalid file, please ensure that uploading correct file"); + throw; + } + catch (Exception e) + { + foreach (var sourceKey in sourceKeyLs) + { + var destinationKey = sourceKey.Replace(Configuration.SourceFolder, $"{Configuration.ErrorFolder}/{appName}"); + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + Logger.FileUploadingError(HttpContext.Request?.Form?.Files?.Select(x => x.FileName).ToArray(), duration.Elapsed, e); + if (string.IsNullOrEmpty(e.Message)) + throw new Exception("Invalid file, please ensure that uploading correct file"); + throw; + } + } + + + protected DocumentInfo[] GetDocumentInfos(IDictionary keyValues, string sessionId) + { + DocumentInfo[] documentInfos = new DocumentInfo[keyValues.Count]; + int pos = 0; + foreach (KeyValuePair keyValuePair in keyValues) + { + documentInfos[pos] = new DocumentInfo { FileName = keyValuePair.Key, FolderName = sessionId }; + pos++; + } + return documentInfos; + } + + + protected async Task RunBusinessCode( Func , string, string ,Task > action ,string AppName,string outputType) + { + var sessionId = Guid.NewGuid().ToString(); + + try + { + var taskUpload = Task.Run(() => UploadFiles(sessionId, AppName)); + taskUpload.Wait(Configuration.MillisecondsTimeout); + if (!taskUpload.IsCompleted) + { + Logger.LogError( + "{AppName} UploadFiles=>{SessionId}=>{Timeout}", + AppName, + sessionId, + Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + var docs = taskUpload.Result; + if (docs == null) + return PasswordProtectedResponse; + if (docs.Count == 0 || docs.Count > MaximumUploadFiles) + return MaximumFileLimitsResponse; + SetDefaultOptions(GetDocumentInfos(docs, sessionId)); + + Opts.FolderName = sessionId; + + await Storage.UpdateStatus(Common.Models.Response.Process(Opts.FolderName, Opts.ResultFileName)); + + var stopWatch = new Stopwatch(); + + stopWatch.Start(); + Logger.LogWarning( + "AppName = {AppName} | Filename = {Filename} | Start", + AppName, + string.Join(",", docs.Select(t => t.Key))); + + var taskProcessCellsBlock = action(docs, sessionId, outputType); + taskProcessCellsBlock.Wait(Configuration.MillisecondsTimeout); + if (!taskProcessCellsBlock.IsCompleted) + { + Logger.LogError( + "{AppName} ProcessCellsBlock=>{SessionId}=>{Timeout}", + AppName, + sessionId, + Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + + stopWatch.Stop(); + Logger.LogWarning( + "AppName = {AppName} | Filename = {Filename} | Cost Seconds = {Seconds}ms", + AppName, + string.Join(",", docs.Select(t => t.Key)), + stopWatch.Elapsed.TotalSeconds); + + if (!taskProcessCellsBlock.IsFaulted && taskProcessCellsBlock.Exception == null) + return taskProcessCellsBlock.Result; + + return Common.Models.Response.Error(Opts.FolderName, Opts.ResultFileName, taskProcessCellsBlock.Exception?.Message ?? "500"); + } + catch (Exception e) + { + var exception = e.InnerException ?? e; + var statusCode = 500; + if (exception is CellsException { Code: ExceptionType.IncorrectPassword }) + { + statusCode = 403; + } + + Logger.LogError("AppName = {AppName} | Message = {Message} | OutputType = {OutputType}", + AppName, exception.Message, outputType); + + return new Response + { + StatusCode = statusCode, + Status = exception.Message, + FolderName = sessionId, + Text = AppName + }; + } + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudApiDef.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudApiDef.cs new file mode 100644 index 000000000..0bc58570e --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudApiDef.cs @@ -0,0 +1,10 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + public class CellsCloudAPIDef + { + public string ApiName { get; set; } + public string ApiUri { get; set; } + + public string ApiReferenceUri { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudClient.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudClient.cs new file mode 100644 index 000000000..ddf243bb0 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudClient.cs @@ -0,0 +1,455 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + using Aspose.Cells.Common.Config; + using Invoker; + using System; + using System.Collections.Generic; + using System.Drawing; + using System.IO; + using System.Text; + using System.Threading.Tasks; + + public class CellsCloudClient + { + private ApiInvoker apiInvoker; + + private string token; + + //private string clientId = "91A2FD07-BBA1-4B32-9112-ABFB1FE8AEBD"; + //private string clientSecret = "0fbf678c5ecabdb5caca48452a736dd0"; + //private string baseUri = "https://api-qa.aspose.cloud"; + public CellsCloudClient() + { + var requestHandlers = new List + { + new ApiExceptionRequestHandler() + }; + + apiInvoker = new ApiInvoker(requestHandlers, 30000); + token = GetJwtTokenUsingClientCredentialsAsync(Configuration.CellsCloudBaseUrl, Configuration.CellsCloudClientId, Configuration.CellsCloudClientSecret); + } + + + public async Task Convert(string filename ,Stream stream ,string format) + { + var requestUrl = string.Format( "{0}/v3.0/cells/convert?format={1}", Configuration.CellsCloudBaseUrl, format); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + formParams.Add("File", new FormFileInfo + { + Name = filename, + MimeType = format, + FileContent = stream.ReadAll() + }); + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "PUT", null,headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task Merge(IDictionary files, string format,string mergeToOneSheet) + { + var requestUrl = string.Format("{0}/v3.0/cells/merge?format={1}&mergeToOneSheet={2}", Configuration.CellsCloudBaseUrl, format, mergeToOneSheet); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = format, + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task Split(IDictionary files, string format) + { + var requestUrl = string.Format("{0}/v3.0/cells/split?format={1}", Configuration.CellsCloudBaseUrl, format); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = format, + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task WaterMarker(IDictionary files, string watermarkText, string watermarkColor) + { + var requestUrl = string.Format("{0}/v3.0/cells/watermark?text={1}&color={2}", Configuration.CellsCloudBaseUrl, watermarkText, watermarkColor); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType =ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + public async Task Export(IDictionary files, string format,string objectType) + { + var requestUrl = string.Format("{0}/v3.0/cells/export?format={1}&objectType={2}", Configuration.CellsCloudBaseUrl, format, objectType); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = format, + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task ClearObjects(IDictionary files, string objectType) + { + var requestUrl = string.Format("{0}/v3.0/cells/clearobjects?objecttype={1}", Configuration.CellsCloudBaseUrl, objectType); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task Assembly(IDictionary files, string datasource) + { + var requestUrl = string.Format("{0}/v3.0/cells/assemble?datasource={1}", Configuration.CellsCloudBaseUrl, datasource); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task Unlock(IDictionary files,string password) + { + var requestUrl = string.Format("{0}/v3.0/cells/unlock?password={1}", Configuration.CellsCloudBaseUrl, password); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + public async Task PostMetadata(IDictionary files,string type ,IList cellsDocumentProperties) + { + var requestUrl = string.Format("{0}/v3.0/cells/metadata/update", Configuration.CellsCloudBaseUrl); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + var jsonArray = JsonSerializationHelper.Serialize(cellsDocumentProperties); + formParams.Add("DocumentProperties", new FormFileInfo + { + Name = "DocumentProperties", + MimeType = "application/json", + FileContent = Encoding.ASCII.GetBytes(jsonArray) + }); + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + public async Task DeleteMetadata(IDictionary files, string type) + { + var requestUrl = string.Format("{0}/v3.0/cells/metadata/delete?type={1}", Configuration.CellsCloudBaseUrl, type); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task> GetMetadata(IDictionary files, string type) + { + var requestUrl = string.Format("{0}/v3.0/cells/metadata/get?type={1}", Configuration.CellsCloudBaseUrl, type); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync>( + requestUrl, "POST", null, headerParams, + formParams); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task> Search(IDictionary files, string query) + { + var requestUrl = string.Format("{0}/v3.0/cells/search?text={1}", Configuration.CellsCloudBaseUrl, query); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync>( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public async Task Protect(IDictionary files, string password) + { + var requestUrl = string.Format("{0}/v3.0/cells/protect?password={1}", Configuration.CellsCloudBaseUrl, password); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + + Dictionary formParams = new Dictionary(); + foreach (var file in files) + { + formParams.Add(file.Key, new FormFileInfo + { + Name = file.Key, + MimeType = ExportData.GetFileMimeType(file.Key), + FileContent = file.Value.ReadAll() + }); + } + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "POST", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + private string GetJwtTokenUsingClientCredentialsAsync( string apiBaseUrl, string clientId, string clientSecret) + { + try + { + var requestUrl = string.Format("{0}/connect/token", apiBaseUrl); + + var postData = "grant_type=client_credentials"; + postData += "&client_id=" + clientId; + postData += "&client_secret=" + clientSecret; + + return apiInvoker.InvokeApiAsync(requestUrl, "POST", postData, contentType: "application/x-www-form-urlencoded").Result.AccessToken; + } + catch( Exception e) + { + throw e; + } + } + + + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudFileInfo.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudFileInfo.cs new file mode 100644 index 000000000..c3add403b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudFileInfo.cs @@ -0,0 +1,22 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + /// + /// + /// + public class CellsCloudFileInfo + { + /// + /// + /// + public string Filename { get; set; } + + /// + /// + /// + public long FileSize { get; set; } + /// + /// + /// + public string FileContent { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudFilesResult.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudFilesResult.cs new file mode 100644 index 000000000..3ebe3ae5b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsCloudFilesResult.cs @@ -0,0 +1,23 @@ + +namespace Aspose.Cells.Common.CloudHelper +{ + using System.Collections.Generic; + + /// + /// + /// + public class CellsCloudFilesResult + { + /// + /// + /// + public CellsCloudFilesResult() + { + Files = new List(); + } + /// + /// + /// + public IList Files { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsDocumentProperty.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsDocumentProperty.cs new file mode 100644 index 000000000..bf63dd6ec --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CellsDocumentProperty.cs @@ -0,0 +1,39 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + /// + /// + /// + public class CellsDocumentProperty + { + /// + /// Returns the name of the property. + /// + public string Name { get; set; } + + /// + /// Gets or sets the value of the property. + /// + public string Value { get; set; } + + /// + /// Indicates whether this property is linked to content + /// + public string IsLinkedToContent { get; set; } + + /// + /// The linked content source. + /// + public string Source { get; set; } + + /// + /// Gets the data type of the property. + /// + public string Type { get; set; } + + /// + /// Returns true if this property does not have a name in the OLE2 storage and a + /// unique name was generated only for the public API. + /// + public string IsGeneratedName { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/CloudHelperExtensions.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CloudHelperExtensions.cs new file mode 100644 index 000000000..fc9be0fda --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/CloudHelperExtensions.cs @@ -0,0 +1,37 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + using System.IO; + using System.Collections.Generic; + using System.Text; + using System; + + public static class CloudHelperExtensions + { + /// + /// ReadAsBytes + /// + /// + /// + public static byte[] ReadAsBytes(this Stream input) + { + var buffer = new byte[16 * 1024]; + using (var ms = new MemoryStream()) + { + int read; + while ((read = input.Read(buffer, 0, buffer.Length)) > 0) + ms.Write(buffer, 0, read); + + return ms.ToArray(); + } + } + public static IDictionary ToStream(this IList Files) + { + IDictionary keyValuePairs = new Dictionary(); + foreach (CellsCloudFileInfo cellsCloudFileInfo in Files) + { + keyValuePairs.Add(cellsCloudFileInfo.Filename, new MemoryStream(Convert.FromBase64String(cellsCloudFileInfo.FileContent))); + } + return keyValuePairs; + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/CellsCloudService.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/CellsCloudService.cs new file mode 100644 index 000000000..6e612469a --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/CellsCloudService.cs @@ -0,0 +1,71 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + using Invoker; + using System; + using System.Collections.Generic; + using System.IO; + using System.Text; + using System.Threading.Tasks; + + public class CellsCloudService : ICellsCloudService + { + private ApiInvoker apiInvoker; + public CellsCloudService() + { + var requestHandlers = new List + { + new ApiExceptionRequestHandler() + }; + + apiInvoker = new ApiInvoker(requestHandlers, 30000); + } + public async Task GetJwtTokenUsingClientCredentialsAsync() + { + //sessionId, "https://api-qa.aspose.cloud", "91A2FD07-BBA1-4B32-9112-ABFB1FE8AEBD", "0fbf678c5ecabdb5caca48452a736dd0" + + var requestUrl = string.Format("{0}/connect/token", "https://api-qa.aspose.cloud"); + + var postData = "grant_type=client_credentials"; + postData += "&client_id=" + "91A2FD07-BBA1-4B32-9112-ABFB1FE8AEBD"; + postData += "&client_secret=" + "0fbf678c5ecabdb5caca48452a736dd0"; + + var result = await apiInvoker.InvokeApiAsync(requestUrl, "POST", postData, contentType: "application/x-www-form-urlencoded"); + return result.AccessToken; + } + public async Task Convert( string requestId, string token, string filename, Stream stream, string format) + { + var requestUrl = string.Format("{0}/v3.0/cells/convert?format={1}", "https://api-qa.aspose.cloud", format.Substring(1)); + + var headerParams = new Dictionary(); + headerParams.Add("Authorization", "Bearer " + token); + //headerParams.Add("RequestId", requestId); + + Dictionary formParams = new Dictionary(); + formParams.Add("File", new FormFileInfo + { + Name = filename, + MimeType = format, + FileContent = stream.ReadAll() + }); + + try + { + return await apiInvoker.InvokeApiAsync( + requestUrl, "PUT", null, headerParams, + formParams, "application/octet-stream"); + } + catch (Exception webException) + { + + throw webException; + } + } + + public void Dispose() + { + + } + + + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/ExportData.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/ExportData.cs new file mode 100644 index 000000000..8bdfed516 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/ExportData.cs @@ -0,0 +1,443 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + using System; + using System.Collections.Generic; + using System.Drawing.Imaging; + using System.Linq; + using System.Net.Http.Headers; + + /// + /// + /// + internal class ExportData + { + private static readonly Dictionary AllOperationFormats = new Dictionary + { + {"CSV", new ExportData("CSV", FormatCsv, "csv")}, + {"XLS", new ExportData("XLS", FormatExcel, "xls")}, + {"HTML", new ExportData("HTML", FormatHtml, "html")}, + {"MHTML", new ExportData("MHTML", FormatMHtml, "mhtml")}, + {"ODS", new ExportData("ODS", FormatOds, "ods")}, + {"PDF", new ExportData("PDF", FormatPdf, "pdf")}, + {"XML", new ExportData("SPREADSHEETML", FormatXml, "xml")}, + {"TXT", new ExportData("TABDELIMITED", FormatTxt, "txt")}, + {"TIFF", new ExportData("TIFF", FormatTiff, "tiff")}, + {"XLSB", new ExportData("XLSB", FormatExcel, "xlsb")}, + {"XLSM", new ExportData("XLSM", FormatExcel, "xlsm")}, + {"XLSX", new ExportData("XLSX", FormatExcel, "xlsx")}, + {"XLTM", new ExportData("XLTM", FormatExcel, "xltm")}, + {"XLTX", new ExportData("XLTX", FormatExcel, "xltx")}, + {"XPS", new ExportData("XPS", FormatXps, "xps")}, + {"PNG", new ExportData("PNG", FormatPng, "png")}, + {"JPG", new ExportData("JPG", FormatJpeg, "jpg")}, + {"JPEG", new ExportData("JPEG", FormatJpeg, "jpeg")}, + {"GIF", new ExportData("GIF", FormatGif, "gif")}, + {"EMF", new ExportData("EMF", FormatEmf, "emf")}, + {"BMP", new ExportData("BMP", FormatBmp, "bmp")}, + {"MD", new ExportData("MD", FormatMD, "MD")}, + {"MARKDOWN", new ExportData("MARKDOWN", FormatMD, "Markdown")}, + {"NUMBERS", new ExportData("NUMBERS", FormatNumbers, "Numbers")}, + {"WMF",new ExportData("WMF",FormatWmf,"wmf") }, + {"SVG",new ExportData("SVG",FormatSvg,"svg") }, + {"AUTO", new ExportData("AUTO", FormatExcel, "auto")} + }; + + #region Private fields + + private readonly string _format; + private readonly string _contentType; + private readonly string _extension; + private readonly ImageFormat _imageFormat; + #endregion + + #region Protected constants + + /// + /// application/octet-stream + /// + protected const string FormatBin = "application/octet-stream"; + + /// + /// image/bmp + /// + protected const string FormatBmp = "image/bmp"; + /// + ///text/markdown + /// + protected const string FormatMD = "text/markdown"; + /// + /// + /// + protected const string FormatNumbers = "application/vnd.apple.numbers"; + /// + /// text/csv + /// + protected const string FormatCsv = "text/csv"; + + /// + /// message/rfc822 + /// + protected const string FormatEmail = "message/rfc822"; + + /// + /// image/emf + /// + protected const string FormatEmf = "image/emf"; + + /// + /// application/epub+zip + /// + protected const string FormatEpub = "application/epub+zip"; + + /// + /// application/vnd.ms-excel + /// + protected const string FormatExcel = "application/vnd.ms-excel"; + + /// + /// application/vnd.openxmlformats-package.relationships+xml + /// + protected const string FormatFlatopc = "application/vnd.openxmlformats-package.relationships+xml"; + + /// + /// image/gif + /// + protected const string FormatGif = "image/gif"; + + /// + /// text/html + /// + protected const string FormatHtml = "text/html"; + /// + /// text/html + /// + protected const string FormatMHtml = "tmultipart/related"; + /// + /// image/jpeg + /// + protected const string FormatJpeg = "image/jpeg"; + + /// + /// text/vnd.latex-z + /// + protected const string FormatLaTeX = "text/vnd.latex-z"; + + /// + /// application/vnd.ms-outlook + /// + protected const string FormatMsg = "application/vnd.ms-outlook"; + + /// + /// multipart/related + /// + protected const string FormatMultipart = "multipart/related"; + + /// + /// application/vnd.oasis.opendocument.presentation + /// + protected const string FormatOdp = "application/vnd.oasis.opendocument.presentation"; + + /// + /// application/vnd.oasis.opendocument.spreadsheet + /// + protected const string FormatOds = "application/vnd.oasis.opendocument.spreadsheet"; + + /// + /// application/vnd.oasis.opendocument.text + /// + protected const string FormatOdt = "application/vnd.oasis.opendocument.text"; + + /// + /// application/vnd.oasis.opendocument.text-template + /// + protected const string FormatOtt = "application/vnd.oasis.opendocument.text-template"; + + /// + /// application/pdf + /// + protected const string FormatPdf = "application/pdf"; + + /// + /// image/png + /// + protected const string FormatPng = "image/png"; + + /// + /// vnd.ms-powerpoint.template.macroEnabled.12 + /// + protected const string FormatPotm = "vnd.ms-powerpoint.template.macroEnabled.12"; + + /// + /// vnd.ms-powerpoint.slideshow.macroEnabled.12 + /// + protected const string FormatPpsm = "vnd.ms-powerpoint.slideshow.macroEnabled.12"; + + /// + /// application/vnd.ms-powerpoint + /// + protected const string FormatPpt = "application/vnd.ms-powerpoint"; + + /// + /// vnd.ms-powerpoint.presentation.macroEnabled.12 + /// + protected const string FormatPptm = "vnd.ms-powerpoint.presentation.macroEnabled.12"; + + /// + /// application/vnd.openxmlformats-officedocument.presentationml.presentation + /// + protected const string FormatPptx = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + + /// + /// application/postscript + /// + protected const string FormatPs = "application/postscript"; + + /// + /// application/rtf + /// + protected const string FormatRtf = "application/rtf"; + + /// + /// image/svg+xml + /// + protected const string FormatSvg = "image/svg+xml"; + + /// + /// application/x-shockwave-flash + /// + protected const string FormatSwf = "application/x-shockwave-flash"; + + /// + /// image/tiff + /// + protected const string FormatTiff = "image/tiff"; + + /// + /// text/plain + /// + protected const string FormatTxt = "text/plain"; + + /// + /// text/vnd.wap.wml + /// + protected const string FormatWml = "text/vnd.wap.wml"; + + /// + /// application/msword + /// + protected const string FormatWord = "application/msword"; + + /// + /// application/vnd.ms-word.document.macroEnabled.12 + /// + protected const string FormatWordDocm = "application/vnd.ms-word.document.macroEnabled.12"; + + /// + /// application/vnd.openxmlformats-officedocument.wordprocessingml.document + /// + protected const string FormatWordDocx = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + + /// + /// application/vnd.ms-word.template.macroEnabled.12 + /// + protected const string FormatWordDotm = "application/vnd.ms-word.template.macroEnabled.12"; + + /// + /// application/vnd.ms-word.document.macroEnabled.12 + /// + protected const string FormatWordDotx = "application/vnd.ms-word.document.macroEnabled.12"; + + /// + /// application/xaml+xml + /// + protected const string FormatXamlFlow = "application/xaml+xml"; + + /// + /// application/xaml+xml + /// + protected const string FormatXamlFixed = "application/xaml+xml"; + + /// + /// text/xml + /// + protected const string FormatXml = "text/xml"; + + /// + /// application/vnd.ms-xpsdocument + /// + protected const string FormatXps = "application/vnd.ms-xpsdocument"; + + /// + /// application/oxps + /// + protected const string FormatOpenXps = "application/oxps"; + + /// + /// application/zip + /// + protected const string FormatZip = "application/zip"; + + /// + /// application/vnd.ms-project + /// + protected const string FormatMpp = "application/vnd.ms-project"; + + /// + /// application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + /// + protected const string FormatXlsx = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + + /// + /// MPX - Exchange file (Microsoft Project) used for exporting data application/x-project + /// + protected const string FormatMpx = "application/x-project"; + + /// + /// Windows Metafile. + /// + protected const string FormatWmf = "application/x-msmetafile"; + + /// + /// Macintosh PICT. + /// + protected const string FormatPict = "image/pict"; + #endregion + + #region Private constructors + + static ExportData() + { + } + + /// + /// Constructor for specific format. + /// + /// The format. + /// HHTP content type for the format. + /// File extension for the format. + protected ExportData(string format, string contentType, string extension) + { + _format = format; + _contentType = contentType; + _extension = extension; + + switch (format.ToUpper()) + { + case "PNG": + _imageFormat = ImageFormat.Png; + break; + case "TIFF": + _imageFormat = ImageFormat.Tiff; + break; + case "JPEG": + _imageFormat = ImageFormat.Jpeg; + break; + case "GIF": + _imageFormat = ImageFormat.Gif; + break; + case "EMF": + _imageFormat = ImageFormat.Emf; + break; + case "BMP": + _imageFormat = ImageFormat.Bmp; + break; + case "WMF": + _imageFormat = ImageFormat.Wmf; + break; + } + } + + private ExportData(string format, string contentType, string extension, ImageFormat imageFormat) + { + _format = format; + _contentType = contentType; + _extension = extension; + _imageFormat = imageFormat; + } + + + #endregion + + #region Public properties + + /// + /// Export format. + /// + public string Format + { + get { return _format; } + } + + /// + /// Response content type. + /// + public string ContentType + { + get { return _contentType; } + } + + /// + /// Response file extension. + /// + public string Extension + { + get { return _extension; } + } + + /// + /// Image format + /// + public ImageFormat ImageFormat + { + get { return _imageFormat; } + } + + #endregion + + + + /// + /// + /// + /// + /// + public static string GetFileMimeType(string name) + { + string format = System.IO.Path.GetExtension(name); + if (format.StartsWith(".")) format = format.Substring(1); + var key = format.ToUpperInvariant(); + if (AllOperationFormats.ContainsKey(key)) + return AllOperationFormats[key].ContentType; + return null; + } + /// + /// + /// + /// + /// + /// + /// + public static ExportData GetExportData(string format) + { + if (format != null) + { + var key = format.ToUpperInvariant(); + if (AllOperationFormats.ContainsKey(key)) + return AllOperationFormats[key]; + } + + throw new NotSupportedException(string.Format("Format '{0}' is not supported.", format)); + } + + /// + /// Checks that the format is supported. + /// + /// The format to check. + /// + /// True if the format supported. + public static bool IsSupported(string format) + { + return AllOperationFormats.ContainsKey(format.ToUpperInvariant()); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/ICellsCloudService.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/ICellsCloudService.cs new file mode 100644 index 000000000..87e95a85c --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Internal/ICellsCloudService.cs @@ -0,0 +1,13 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + using System; + using System.IO; + using System.Threading.Tasks; + + public interface ICellsCloudService : IDisposable + { + Task GetJwtTokenUsingClientCredentialsAsync(); + + Task Convert(string requestId, string token, string filename, Stream stream, string format); + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiErrorResponse.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiErrorResponse.cs new file mode 100644 index 000000000..ee4ec3a52 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiErrorResponse.cs @@ -0,0 +1,13 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + /// + /// ApiError Response + /// + internal class ApiErrorResponse + { + /// + /// Error + /// + public System.ApplicationException Error { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiExceptionRequestHandler.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiExceptionRequestHandler.cs new file mode 100644 index 000000000..416785536 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiExceptionRequestHandler.cs @@ -0,0 +1,79 @@ + +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + using System; + using System.IO; + using System.Net; + + /// + /// Api Exception Request Handler + /// + internal class ApiExceptionRequestHandler : IRequestHandler + { + private string method; + + public string ProcessUrl(string url) + { + return url; + } + + public void BeforeSend(WebRequest request, Stream streamToSend) + { + method = request.Method; + } + + public void ProcessResponse(HttpWebResponse response, Stream resultStream) + { + if (method == "DELETE" && response.StatusCode == HttpStatusCode.NoContent) + return; + + if (method == "POST" && response.StatusCode == HttpStatusCode.Created) + return; + + if (method == "PUT" && response.StatusCode == HttpStatusCode.Created) + return; + + if (response.StatusCode != HttpStatusCode.OK) + ThrowApiException(response, resultStream); + } + + private void ThrowApiException(HttpWebResponse webResponse, Stream resultStream) + { + try + { + resultStream.Position = 0; + using (var responseReader = new StreamReader(resultStream)) + { + var responseData = responseReader.ReadToEnd(); + if (string.IsNullOrEmpty(responseData)) + { + var message = webResponse.GetResponseHeader("WWW-Authenticate"); + if (webResponse.StatusCode == HttpStatusCode.Unauthorized) + { + throw new ApplicationException(message); + } + else + { + throw new ApplicationException("An error occured."); + } + } + + var errorResponse = (ApiErrorResponse)JsonSerializationHelper.Deserialize(responseData, typeof(ApiErrorResponse)); + + if (errorResponse == null) + { + errorResponse = new ApiErrorResponse(); + errorResponse.Error = new ApplicationException(responseData); + } + + throw errorResponse.Error; + } + } + + catch (Exception) + { + throw ; + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiInvoker.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiInvoker.cs new file mode 100644 index 000000000..5dbeafa8b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/ApiInvoker.cs @@ -0,0 +1,317 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + using Newtonsoft.Json.Linq; + using System; + using System.Collections.Generic; + using System.IO; + using System.Net; + using System.Text; + using System.Threading.Tasks; + /// + /// Api Invoker + /// + internal class ApiInvoker + { + private readonly Dictionary defaultHeaderMap = new Dictionary(); + private readonly List requestHandlers; + private readonly int timeout; + + /// + /// Public constructor + /// + /// + /// + public ApiInvoker(List requestHandlers, int timeout) + { + this.requestHandlers = requestHandlers; + this.timeout = timeout; + } + + public async Task InvokeApiAsync( + string path, + string method, + string body = null, + Dictionary headerParams = null, + Dictionary formParams = null, + string contentType = "application/json") where T : class + { + return await InvokeInternalAsync(path, method, body, headerParams, formParams, contentType); + } + + private static byte[] GetMultipartFormData(Dictionary postParameters, string boundary) + { + Stream formDataStream = new MemoryStream(); + var needsClrf = false; + + if (postParameters.Count > 1) + { + foreach (var param in postParameters) + { + // Thanks to feedback from commenters, add a CRLF to allow multiple parameters to be added. + // Skip it on the first parameter, add it to subsequent parameters. + if (needsClrf) + { + formDataStream.Write(Encoding.UTF8.GetBytes("\r\n"), 0, Encoding.UTF8.GetByteCount("\r\n")); + } + + needsClrf = true; + + if (param.Value is FormFileInfo fileInfo) + { + var postData = + string.Format( + "--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n", + boundary, + param.Key, + fileInfo.MimeType); + formDataStream.Write(Encoding.UTF8.GetBytes(postData), 0, Encoding.UTF8.GetByteCount(postData)); + + // Write the file data directly to the Stream, rather than serializing it to a string. + formDataStream.Write(fileInfo.FileContent, 0, fileInfo.FileContent.Length); + } + else + { + var stringData = JsonSerializationHelper.Serialize(param.Value); + var postData = + string.Format( + "--{0}\r\nContent-Disposition: form-data; name=\"{1}\"\r\n\r\n{2}", + boundary, + param.Key, + stringData); + formDataStream.Write(Encoding.UTF8.GetBytes(postData), 0, Encoding.UTF8.GetByteCount(postData)); + } + } + + // Add the end of the request. Start with a newline + var footer = "\r\n--" + boundary + "--\r\n"; + formDataStream.Write(Encoding.UTF8.GetBytes(footer), 0, Encoding.UTF8.GetByteCount(footer)); + } + else + { + foreach (var param in postParameters) + if (param.Value is FormFileInfo fileInfo) + { + var postData = + string.Format( + "--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n", + boundary, + param.Key, + fileInfo.MimeType); + formDataStream.Write(Encoding.UTF8.GetBytes(postData), 0, Encoding.UTF8.GetByteCount(postData)); + + // Write the file data directly to the Stream, rather than serializing it to a string. + formDataStream.Write(fileInfo.FileContent, 0, fileInfo.FileContent.Length); + var footer = "\r\n--" + boundary + "--\r\n"; + formDataStream.Write(Encoding.UTF8.GetBytes(footer), 0, Encoding.UTF8.GetByteCount(footer)); + // Write the file data directly to the Stream, rather than serializing it to a string. + //formDataStream.Write(fileInfo.FileContent, 0, fileInfo.FileContent.Length); + } + else if (param.Value is byte[]) + { + // Write the file data directly to the Stream, rather than serializing it to a string. + formDataStream.Write(param.Value as byte[], 0, (param.Value as byte[]).Length); + } + else + { + string postData; + if (!(param.Value is string)) + { + postData = JsonSerializationHelper.Serialize(param.Value); + } + else + { + postData = (string)param.Value; + } + + formDataStream.Write(Encoding.UTF8.GetBytes(postData), 0, Encoding.UTF8.GetByteCount(postData)); + } + } + + // Dump the Stream into a byte[] + formDataStream.Position = 0; + var formData = new byte[formDataStream.Length]; + formDataStream.Read(formData, 0, formData.Length); + formDataStream.Close(); + + return formData; + } + + private void AddDefaultHeader(string key, string value) + { + if (!defaultHeaderMap.ContainsKey(key)) + { + defaultHeaderMap.Add(key, value); + } + } + + private async Task InvokeInternalAsync( + string path, + string method, + string body, + Dictionary headerParams, + Dictionary formParams, + string contentType) where T : class + { + if (formParams == null) + { + formParams = new Dictionary(); + } + + if (headerParams == null) + { + headerParams = new Dictionary(); + } + + requestHandlers.ForEach(p => path = p.ProcessUrl(path)); + + WebRequest request; + try + { + request = PrepareRequest(path, method, formParams, headerParams, body, contentType); + return await ReadResponseAsync(request); + } + catch (Exception) + { + request = PrepareRequest(path, method, formParams, headerParams, body, contentType); + return await ReadResponseAsync(request); + } + } + + private WebRequest PrepareRequest(string path, string method, Dictionary formParams, + Dictionary headerParams, string body, string contentType) + { + var client = WebRequest.Create(path); + client.Timeout = timeout; + + client.Method = method; + + byte[] formData = null; + if (formParams.Count > 0) + { + if (formParams.Count > 0) + { + string formDataBoundary = Guid.NewGuid().ToString("D"); + client.ContentType = "multipart/form-data; boundary=" + formDataBoundary; + formData = GetMultipartFormData(formParams, formDataBoundary); + } + else + { + client.ContentType = "multipart/form-data"; + formData = GetMultipartFormData(formParams, string.Empty); + } + + client.ContentLength = formData.Length; + } + else + { + client.ContentType = contentType; + } + + foreach (var headerParamsItem in headerParams) + client.Headers.Add(headerParamsItem.Key, headerParamsItem.Value); + + foreach (var defaultHeaderMapItem in defaultHeaderMap) + if (!headerParams.ContainsKey(defaultHeaderMapItem.Key)) + client.Headers.Add(defaultHeaderMapItem.Key, defaultHeaderMapItem.Value); + + MemoryStream streamToSend = null; + try + { + switch (method) + { + case "GET": + break; + case "POST": + case "PUT": + case "DELETE": + streamToSend = new MemoryStream(); + + if (formData != null) + streamToSend.Write(formData, 0, formData.Length); + + if (body != null) + { + var requestWriter = new StreamWriter(streamToSend); + requestWriter.Write(body); + requestWriter.Flush(); + } + + break; + default: + throw new ApplicationException("Unknown method type " + method); + } + + requestHandlers.ForEach(p => p.BeforeSend(client, streamToSend)); + + if (streamToSend != null) + using (var requestStream = client.GetRequestStream()) + { + streamToSend.Seek(0, SeekOrigin.Begin); + streamToSend.CopyTo(requestStream); + } + } + finally + { + if (streamToSend != null) + streamToSend.Dispose(); + } + + return client; + } + + private async Task ReadResponseAsync(WebRequest client) where T : class + { + var webResponse = (HttpWebResponse) await GetResponseAsync(client); + var resultStream = new MemoryStream(); + + var responseStream = webResponse.GetResponseStream(); + if (responseStream != null) + responseStream.CopyTo(resultStream); + + try + { + requestHandlers.ForEach(p => p.ProcessResponse(webResponse, resultStream)); + + resultStream.Position = 0; + + if (typeof(T) == typeof(HttpWebResponse)) + return webResponse as T; + + if (typeof(T) == typeof(Stream)) + return resultStream as T; + + var str = Encoding.UTF8.GetString(resultStream.ToArray()); + + if (typeof(T) == typeof(string)) + return str as T; + + if (typeof(T) == typeof(JObject)) + return JObject.Parse(str) as T; + + return JsonSerializationHelper.Deserialize(str, typeof(T)) as T; + } + catch (Exception) + { + resultStream.Dispose(); + throw; + } + } + + private async Task GetResponseAsync(WebRequest request) + { + try + { + return await request.GetResponseAsync(); + } + catch (WebException wex) + { + if (wex.Response != null) + { + return wex.Response; + } + + throw; + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/FormFileInfo.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/FormFileInfo.cs new file mode 100644 index 000000000..389a6d97f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/FormFileInfo.cs @@ -0,0 +1,23 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + /// + /// FileInfo + /// + internal struct FormFileInfo + { + /// + /// Name + /// + public string Name { get; set; } + + /// + /// MimeType + /// + public string MimeType { get; set; } + + /// + /// FileContent + /// + public byte[] FileContent { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/IRequestHandler.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/IRequestHandler.cs new file mode 100644 index 000000000..e839feb09 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/IRequestHandler.cs @@ -0,0 +1,31 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + using System.IO; + using System.Net; + /// + /// IRequestHandler + /// + internal interface IRequestHandler + { + /// + /// ProcessUrl + /// + /// + /// + string ProcessUrl(string url); + + /// + /// BeforeSend + /// + /// + /// + void BeforeSend(WebRequest request, Stream streamToSend); + + /// + /// ProcessResponse + /// + /// + /// + void ProcessResponse(HttpWebResponse response, Stream resultStream); + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/JsonSerializationHelper.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/JsonSerializationHelper.cs new file mode 100644 index 000000000..6d5f0d3f7 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/JsonSerializationHelper.cs @@ -0,0 +1,55 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + using System; + using System.IO; + using System.Xml; + using Newtonsoft.Json; + /// + /// Internal serializers to serialize/deserialize data using JsonConvert + /// + internal class JsonSerializationHelper + { + /// + /// Serialize object + /// + /// The object to serialize + public static string Serialize(object obj) + { + try + { + if (obj == null) return null; + + var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; + return JsonConvert.SerializeObject(obj, settings); + } + catch (Exception exc) + { + throw new ApplicationException(exc.Message); + } + } + + /// + /// Deserializes an object into specified type + /// + /// The object serialized + /// The type + public static object Deserialize(string json, Type type) + { + try + { + if (string.IsNullOrEmpty(json)) return null; + + if (json.StartsWith("{") || json.StartsWith("[")) + return JsonConvert.DeserializeObject(json, type); + + var xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(json); + return JsonConvert.SerializeXmlNode(xmlDoc); + } + catch (Exception e) + { + throw new ApplicationException(e.Message); + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/JwtTokenResource.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/JwtTokenResource.cs new file mode 100644 index 000000000..f141b9c10 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/JwtTokenResource.cs @@ -0,0 +1,27 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + using Newtonsoft.Json; + /// + /// Access Token Result + /// + internal class JwtTokenResource + { + /// + /// JWT access token + /// + [JsonProperty("access_token")] + public string AccessToken { get; set; } + + /// + /// Expires in + /// + [JsonProperty("expires_in")] + public string ExpiresIn { get; set; } + + /// + /// Token type + /// + [JsonProperty("token_type")] + public string TokenType { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/StreamExtension.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/StreamExtension.cs new file mode 100644 index 000000000..70bf44073 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Invoker/StreamExtension.cs @@ -0,0 +1,72 @@ +namespace Aspose.Cells.Common.CloudHelper.Invoker +{ + using System; + using System.Collections.Generic; + using System.IO; + /// + /// Stream helper + /// + internal static class StreamExtension + { + private const int BufferSize = 8192; + /// + /// Copy a stream to destination stream + /// + /// The source stream + /// The destination stream + /// The size of the buffer + public static void CopyTo(this Stream source, Stream destination, int bufferSize = 81920) + { + if (source.CanSeek) + { + source.Flush(); + source.Position = 0; + } + + var array = new byte[bufferSize]; + int count; + while ((count = source.Read(array, 0, array.Length)) != 0) + destination.Write(array, 0, count); + } + + public static byte[] ReadAll(this Stream stream) + { + return stream.CanSeek ? ReadAllImplForKnownLength(stream) : ReadAllImplForUnknownLength(stream); + } + + private static byte[] ReadAllImplForKnownLength(Stream stream) + { + stream.Seek(0, SeekOrigin.Begin); + byte[] buffer = new byte[stream.Length - stream.Position]; + stream.Read(buffer, 0, buffer.Length); + return buffer; + } + + private static byte[] ReadAllImplForUnknownLength(Stream stream) + { + List collector = new List(); + byte[] buffer = new byte[BufferSize]; + for (; ; ) + { + var count = stream.Read(buffer, 0, buffer.Length); + if (count == 0) + { + break; + } + + if (count < BufferSize) + { + byte[] rest = new byte[count]; + Array.Copy(buffer, rest, count); + collector.AddRange(rest); + } + else + { + collector.AddRange(buffer); + } + } + + return collector.ToArray(); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/Link.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Link.cs new file mode 100644 index 000000000..94f47ad38 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/Link.cs @@ -0,0 +1,68 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + using System.Xml.Serialization; + /// + /// + /// + public class Link + { + /// + /// + /// + public Link() + { + } + /// + /// + /// + /// + public Link(string href) + { + this.Href = href; + } + /// + /// + /// + /// + /// + public Link(string href, string rel) + { + this.Href = href; + this.Rel = rel; + } + /// + /// + /// + /// + /// + /// + /// + public Link(string href, string rel, string type, string title) + { + this.Href = href; + this.Rel = rel; + this.Type = type; + this.Title = title; + } + /// + /// + /// + [XmlElement(ElementName = "href")] + public string Href { get; set; } + /// + /// + /// + [XmlElement(ElementName = "rel")] + public string Rel { get; set; } + /// + /// + /// + [XmlElement(ElementName = "title")] + public string Title { get; set; } + /// + /// + /// + [XmlElement(ElementName = "type")] + public string Type { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/CloudHelper/TextItem.cs b/Demos/Apps/Aspose.Cells.Common/CloudHelper/TextItem.cs new file mode 100644 index 000000000..ca5ea9163 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/CloudHelper/TextItem.cs @@ -0,0 +1,17 @@ +namespace Aspose.Cells.Common.CloudHelper +{ + /// + /// + /// + public class TextItem + { + /// + /// + /// + public string Text { get; set; } + /// + /// + /// + public Link link { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Config/AppNames.cs b/Demos/Apps/Aspose.Cells.Common/Config/AppNames.cs new file mode 100644 index 000000000..56f394d8e --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/AppNames.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Aspose.Cells.Common.Config +{ + public enum AppNames + { + Merger, + Viewer, + Editor, + Parser, + Annotation, + Watermark, + Search, + Unlock, + Protect, + Conversion, + Comparison, + Splitter, + Metadata, + Compress, + Translation, + Assembly, + Chart, + Repair, + Esign, + MortgageCalculator + } + + public static class AppNamesEx + { + public static string ToRouteName(this Enum appName) + { + return appName.ToString().ToLower(); + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Config/AppXmlResource.cs b/Demos/Apps/Aspose.Cells.Common/Config/AppXmlResource.cs new file mode 100644 index 000000000..4a0874e98 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/AppXmlResource.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; + +namespace Aspose.Cells.Common.Config +{ + public class AppXmlResource + { + private static Dictionary resources = null; + private static object sync = new object(); + + public static string GetResource(string key) + { + if (resources == null) + { + lock (sync) + { + Initialize(); + } + } + try + { + return resources[key]; + } + catch (Exception e) + { + throw e; + } + } + + public static bool ContainsKey(string key) { + if (resources == null) + { + Initialize(); + } + return resources.ContainsKey(key); + } + + public static bool TryGetValue(string key, out string value) + { + if (ContainsKey(key)) + { + value = GetResource(key); + return true; + } + value = default(string); + return false; + } + + private static void Initialize() { + resources = new Dictionary(); + XmlDocument xml = new XmlDocument(); + string resourcesFilePath = Path.Combine(AppContext.BaseDirectory, "App_Data/resources_EN.xml"); + if (resourcesFilePath.Trim() != "") + { + xml.Load(resourcesFilePath); + } + XmlNodeList xl = xml.SelectNodes("resources/res"); + + foreach (XmlNode n in xl) + { + try + { + resources.Add(n.Attributes["name"].Value, n.InnerText); + } + catch (Exception ex) + { + throw ex; + } + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Config/CompositeFileWithOptionsProvider.cs b/Demos/Apps/Aspose.Cells.Common/Config/CompositeFileWithOptionsProvider.cs new file mode 100644 index 000000000..b2b19b0a4 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/CompositeFileWithOptionsProvider.cs @@ -0,0 +1,60 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Primitives; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Aspose.Cells.Common.Config +{ + public class CompositeFileWithOptionsProvider : IFileProvider + { + private readonly IFileProvider _webRootFileProvider; + private readonly IEnumerable _staticFileOptions; + + public CompositeFileWithOptionsProvider(IFileProvider webRootFileProvider, params StaticFileOptions[] staticFileOptions) + : this(webRootFileProvider, (IEnumerable)staticFileOptions) { } + + public CompositeFileWithOptionsProvider(IFileProvider webRootFileProvider, IEnumerable staticFileOptions) + { + _webRootFileProvider = webRootFileProvider ?? throw new ArgumentNullException(nameof(webRootFileProvider)); + _staticFileOptions = staticFileOptions; + } + + public IDirectoryContents GetDirectoryContents(string subpath) + { + var provider = GetFileProvider(subpath, out string outpath); + return provider.GetDirectoryContents(outpath); + } + + public IFileInfo GetFileInfo(string subpath) + { + var provider = GetFileProvider(subpath, out string outpath); + return provider.GetFileInfo(outpath); + } + + public IChangeToken Watch(string filter) + { + var provider = GetFileProvider(filter, out string outpath); + return provider.Watch(outpath); + } + + private IFileProvider GetFileProvider(string path, out string outpath) + { + outpath = path; + var fileProviders = _staticFileOptions; + if (fileProviders != null) + { + foreach (var item in fileProviders) + { + if (path.StartsWith(item.RequestPath, StringComparison.Ordinal)) + { + outpath = path.Substring(item.RequestPath.Value.Length, path.Length - item.RequestPath.Value.Length); + return item.FileProvider; + } + } + } + return _webRootFileProvider; + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Config/Configuration.cs b/Demos/Apps/Aspose.Cells.Common/Config/Configuration.cs new file mode 100644 index 000000000..ceb0e9618 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/Configuration.cs @@ -0,0 +1,62 @@ +namespace Aspose.Cells.Common.Config +{ + public static class Configuration + { + public static bool IsAsposeCloudApp { get; set; } + public static string CellsCloudClientId { get; set; } + public static string CellsCloudClientSecret { get; set; } + public static string CellsCloudBaseUrl { get; set; } + + public static string CellsCloudAPIMethod { get; set; } + public static string CellsCloudAPIMethodURI { get; set; } + + public static string CellsCloudAPIReferenceURI { get; set; } + + public static string CellsCloudAPIMethodDocument{ get; set; } + + public static bool IsProduction { get; set; } + + public static int MailServerTimeOut { get; set; } + + public static int MailServerPort { get; set; } + + public static string MailServer { get; set; } + + public static string MailServerUserId { get; set; } + + public static string MailServerUserPassword { get; set; } + + public static string RegionEndpoint { get; set; } + public static string Bucket { get; set; } + public static string AccessKeyId { get; set; } + public static string SecretAccessKey { get; set; } + + public static string FontFolderPath { get; set; } + + public static string ForumKey { get; set; } + public static string ForumUrl { get; set; } + public static string ForumCategoryId { get; set; } + + public static string TranslationClientId { get; set; } + + public static string TranslationClientSecret { get; set; } + + public static string SourceFolder => "Source"; + public static string ConvertFolder => "Convert"; + public static string ReportFolder => "Report"; + public static string ErrorFolder => "Error"; + public static string GridJsCacheFolder => "GridJsCache"; + public static string GridJsErrorJsonFolder => "GridJsErrorJson"; + + public static int MillisecondsTimeout => 300000; + + public const long MaxRequestBodySize = 0x9600000; // 150M, unit B + public const int MaximumUploadFileSize = 20; // 20M, unit M + public const int MaximumUploadFiles = 10; + public static string ProcessingTimeout => "Your file processing timed out"; + + public static int MaxPageCount = 100; + public static int MaxColumn = 16383; // 0x3FFF + public static int MaxRow = 0x100000 - 1; // 0xFFFFF + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Config/EmailManager.cs b/Demos/Apps/Aspose.Cells.Common/Config/EmailManager.cs new file mode 100644 index 000000000..1b715c4b8 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/EmailManager.cs @@ -0,0 +1,70 @@ +using System; +using System.IO; +using MailKit; +using MailKitClient = MailKit.Net.Smtp.SmtpClient; +using Microsoft.Extensions.Logging; +using MimeKit; +using MailKit.Security; + +namespace Aspose.Cells.Common.Config +{ + public static class EmailManager + { + public static bool SendEmail(string toEmailAddress, string fromEmailAddress, string subject, string body, string cc, ILogger logger) + { + var client = new MailKitClient(); + + var message = new MimeMessage(); + message.From.Add(MailboxAddress.Parse(fromEmailAddress)); + message.To.Add(MailboxAddress.Parse(toEmailAddress)); + if (!string.IsNullOrEmpty(cc)) + { + message.Cc.Add(MailboxAddress.Parse(cc)); + } + message.Subject = subject; + + var builder = new BodyBuilder + { + HtmlBody = body + }; + + message.Body = builder.ToMessageBody(); + + client.Timeout = Configuration.MailServerTimeOut; + client.Connect(Configuration.MailServer, Configuration.MailServerPort, SecureSocketOptions.StartTls); + client.Authenticate(Configuration.MailServerUserId, Configuration.MailServerUserPassword); + + if (message.To.Count > 0) + { + try + { + client.Send(message); + } + catch (CommandException ex) + { + logger.EmailSendError(ex); + return false; + } + catch (ProtocolException ex) + { + logger.EmailSendError(ex); + return false; + } + } + + return true; + } + + public static string PopulateBody(string featureTitle, string url, string successMessage) + { + string body; + using (var reader = new StreamReader(Path.Combine(AppContext.BaseDirectory, "App_Data/EmailTemplate.html")!)) + body = reader.ReadToEnd(); + + body = body.Replace("{FeatureTitle}", featureTitle); + body = body.Replace("{Url}", url); + body = body.Replace("{SuccessMessage}", successMessage); + return body; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Config/LoggerExtensions.cs b/Demos/Apps/Aspose.Cells.Common/Config/LoggerExtensions.cs new file mode 100644 index 000000000..61742a334 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/LoggerExtensions.cs @@ -0,0 +1,237 @@ +using Microsoft.Extensions.Logging; +using System; + +namespace Aspose.Cells.Common.Config +{ + public static class LoggerExtensions + { + private static readonly Action applicationStarting = LoggerMessage.Define( + eventId: LoggerEventIds.ApplicationStarting, + logLevel: LogLevel.Information, + formatString: "Starting application ({ApplicationId})"); + + private static readonly Action applicationShutdown = LoggerMessage.Define( + eventId: LoggerEventIds.ApplicationShutdown, + logLevel: LogLevel.Information, + formatString: "Application ({ApplicationId}) shutdown"); + + private static readonly Action applicationTerminatedException = LoggerMessage.Define( + eventId: LoggerEventIds.ApplicationTerminatedException, + logLevel: LogLevel.Critical, + formatString: "Application ({ApplicationId}) terminated unexpectedly!"); + + private static readonly Action applicationVersion = LoggerMessage.Define( + eventId: LoggerEventIds.ApplicationInformation, + logLevel: LogLevel.Information, + formatString: "Application Version: {ApplicationVersion}"); + + private static readonly Action applicationEnvironment = LoggerMessage.Define( + eventId: LoggerEventIds.ApplicationInformation, + logLevel: LogLevel.Information, + formatString: "Hosting environment: {ApplicationEnvironment}"); + + private static readonly Action fileUploading = LoggerMessage.Define( + eventId: LoggerEventIds.FileUploading, + logLevel: LogLevel.Debug, + formatString: "Uploading file ({OriginalFileName}) of ({ContentType}) type {hasPassword}"); + + private static readonly Action fileUploaded = LoggerMessage.Define( + eventId: LoggerEventIds.FileUploaded, + logLevel: LogLevel.Information, + formatString: "File ({OriginalFileName}) uploaded as ({FileName}) after {ElapsedMilliseconds}ms"); + + private static readonly Action fileUploadingError = LoggerMessage.Define( + eventId: LoggerEventIds.FileUploadingError, + logLevel: LogLevel.Error, + formatString: "File ({FileName}) uploading was failed after {ElapsedMilliseconds}ms"); + + private static readonly Action fileSaveError = LoggerMessage.Define( + eventId: LoggerEventIds.FileSaveError, + logLevel: LogLevel.Error, + formatString: "File ({FileName}) save to local was failed after {ElapsedMilliseconds}ms"); + + private static readonly Action fileDownloading = LoggerMessage.Define( + eventId: LoggerEventIds.FileDownloading, + logLevel: LogLevel.Information, + formatString: "Downloading file {FileName}"); + + private static readonly Action fileDownloadingError = LoggerMessage.Define( + eventId: LoggerEventIds.FileDownloadingError, + logLevel: LogLevel.Error, + formatString: "File ({FileName}) downloading failed after {ElapsedMilliseconds}ms"); + + private static readonly Action fileCreateTempDirectoryError = LoggerMessage.Define( + eventId: LoggerEventIds.FileCreateTempDirectoryError, + logLevel: LogLevel.Error, + formatString: "Folder ({FileName}) creating failed after {ElapsedMilliseconds}ms"); + + private static readonly Action fileCreateZipError = LoggerMessage.Define( + eventId: LoggerEventIds.FileCreateZipError, + logLevel: LogLevel.Error, + formatString: "File ({FileName}) creating failed after {ElapsedMilliseconds}ms"); + + private static readonly Action fileWrongExtension = LoggerMessage.Define( + eventId: LoggerEventIds.FileInvalidExtension, + logLevel: LogLevel.Error, + formatString: "Uploading file ({FileName}) with wrong extension. Should be ({InputType})"); + + private static readonly Action directoryDeleteError = LoggerMessage.Define( + eventId: LoggerEventIds.DirectoryDeleteError, + logLevel: LogLevel.Error, + formatString: "Can not delete directory ({FolderName})"); + + private static readonly Action fileMoveError = LoggerMessage.Define( + eventId: LoggerEventIds.DirectoryDeleteError, + logLevel: LogLevel.Error, + formatString: "Can not move file ({fileName}) to ({destinationFolder})"); + + private static readonly Action awsUploadStatusError = LoggerMessage.Define( + eventId: LoggerEventIds.AWSUploadStatusError, + logLevel: LogLevel.Error, + formatString: "Can not change upload status on aws"); + + private static readonly Action lockEncryptError = LoggerMessage.Define( + eventId: LoggerEventIds.LockEncryptError, + logLevel: LogLevel.Error, + formatString: "Can not encrypt file"); + + private static readonly Action emailSendError = LoggerMessage.Define( + eventId: LoggerEventIds.EmailSendError, + logLevel: LogLevel.Error, + formatString: "Email not sent"); + + private static readonly Action feedbackSendError = LoggerMessage.Define( + eventId: LoggerEventIds.FeedbackSendError, + logLevel: LogLevel.Error, + formatString: "Feedback not sent"); + + public static void ApplicationStarting(this ILogger logger, string applicationId) + { + applicationStarting(logger, applicationId, null); + } + + public static void ApplicationShutdown(this ILogger logger, string applicationId) + { + applicationShutdown(logger, applicationId, null); + } + + public static void ApplicationTerminatedException(this ILogger logger, string applicationId, Exception exception) + { + applicationTerminatedException(logger, applicationId, exception); + } + + public static void ApplicationVersion(this ILogger logger, string version) + { + applicationVersion(logger, version, null); + } + + public static void ApplicationEnvironment(this ILogger logger, string environment) + { + applicationEnvironment(logger, environment, null); + } + + public static void FileUploading(this ILogger logger, string[] fileNames, string contentType, bool hasPassword) + { + fileUploading(logger, string.Join(", ", fileNames), contentType, hasPassword ? "has password" : "", null); + } + + public static void FileUploaded(this ILogger logger, string[] fileNames, string fileLink, TimeSpan duration) + { + fileUploaded(logger, string.Join(", ", fileNames), fileLink, duration.TotalMilliseconds, null); + } + + public static void FileUploadingError(this ILogger logger, string[] fileNames, TimeSpan duration, Exception exception) + { + fileUploadingError(logger, string.Join(", ", fileNames), duration.TotalMilliseconds, exception); + } + + public static void FileSaveError(this ILogger logger, string fileName, TimeSpan duration, Exception exception) + { + fileSaveError(logger, fileName, duration.TotalMilliseconds, exception); + } + + public static void FileDownloading(this ILogger logger, string fileName) + { + fileDownloading(logger, fileName, null); + } + + public static void FileDownloadingError(this ILogger logger, string fileName, TimeSpan duration, Exception exception) + { + fileDownloadingError(logger, fileName, duration.TotalMilliseconds, exception); + } + + public static void FileCreateTempDirectoryError(this ILogger logger, string fileName, TimeSpan duration, Exception exception) + { + fileCreateTempDirectoryError(logger, fileName, duration.TotalMilliseconds, exception); + } + + public static void FileCreateZipError(this ILogger logger, string fileName, TimeSpan duration, Exception exception) + { + fileCreateZipError(logger, fileName, duration.TotalMilliseconds, exception); + } + + public static void FileWrongExtension(this ILogger logger, string fileName, string inputType) + { + fileWrongExtension(logger, fileName, inputType, null); + } + + public static void DirectoryDeleteError(this ILogger logger, string folderName, Exception exception) + { + directoryDeleteError(logger, folderName, exception); + } + + public static void FileMoveError(this ILogger logger, string fileName, string destinationFolder, Exception exception) + { + fileMoveError(logger, fileName, destinationFolder, exception); + } + + public static void AWSUploadStatusError(this ILogger logger, Exception exception) + { + awsUploadStatusError(logger, exception); + } + + public static void LockEncryptError(this ILogger logger, Exception ex) + { + lockEncryptError(logger, ex); + } + + public static void EmailSendError(this ILogger logger, Exception ex) + { + emailSendError(logger, ex); + } + + public static void FeedbackSendError(this ILogger logger, Exception ex) + { + feedbackSendError(logger, ex); + } + } + + static class LoggerEventIds + { + // Application Core EventIds: 1 - 99 + public static readonly EventId ApplicationStarting = new EventId(1, "ApplicationStarting"); + public static readonly EventId ApplicationShutdown = new EventId(2, "ApplicationShutdown"); + public static readonly EventId ApplicationTerminatedException = new EventId(3, "ApplicationTerminatedException"); + public static readonly EventId ApplicationError = new EventId(4, "ApplicationError"); + public static readonly EventId ApplicationInformation = new EventId(5, "ApplicationInformation"); + + // File EventIds: 100 - 199 + public static readonly EventId FileUploading = new EventId(100, "FileUploading"); + public static readonly EventId FileUploaded = new EventId(101, "FileUploaded"); + public static readonly EventId FileUploadingError = new EventId(102, "FileUploadingError"); + public static readonly EventId FileDownloading = new EventId(103, "FileDownloading"); + public static readonly EventId FileDownloadingError = new EventId(104, "FileDownloadingError"); + public static readonly EventId FileCreateTempDirectoryError = new EventId(105, "FileCreateTempDirectoryError"); + public static readonly EventId FileCreateZipError = new EventId(106, "FileCreateZipError"); + public static readonly EventId FileSaveError = new EventId(107, "FileSaveError"); + public static readonly EventId FileInvalidExtension = new EventId(108, "FileInvalidExtensionError"); + public static readonly EventId DirectoryDeleteError = new EventId(109, "DirectoryDeleteError"); + public static readonly EventId FileMoveError = new EventId(110, "FileMoveError"); + public static readonly EventId AWSUploadStatusError = new EventId(111, "AWSUploadStatusError"); + public static readonly EventId AWSFileDeleteError = new EventId(112, "AWSFileDeleteError"); + + public static readonly EventId LockEncryptError = new EventId(1200, "LockEncryptError"); + public static readonly EventId EmailSendError = new EventId(908, "EmailSendError"); + public static readonly EventId FeedbackSendError = new EventId(909, "FeedbackSendError"); + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Config/ServiceCollectionExtension.cs b/Demos/Apps/Aspose.Cells.Common/Config/ServiceCollectionExtension.cs new file mode 100644 index 000000000..da18e3789 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Config/ServiceCollectionExtension.cs @@ -0,0 +1,74 @@ +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.ResponseCompression; +using Microsoft.AspNetCore.Server.Kestrel.Core; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using System; +using System.IO.Compression; +using Newtonsoft.Json.Serialization; + +namespace Aspose.Cells.Common.Config +{ + public static class ServiceCollectionExtension + { + public static void AddSharedConfigParams(this IServiceCollection services) + { + services.AddScoped(f => new AwsStorageService( + new AwsConfig + { + RegionEndpoint = Configuration.RegionEndpoint, + ServiceUrl = Configuration.RegionEndpoint, + ForcePathStyle = true, + AccessKeyId = Configuration.AccessKeyId, + SecretAccessKey = Configuration.SecretAccessKey + }, + Configuration.Bucket, + f.GetService>() + )); + services.Configure(options => { options.MaxRequestBodySize = ViewModel.MaximumUploadFileSize; }); + services.Configure(x => + { + x.ValueLengthLimit = int.MaxValue; + x.MultipartBodyLengthLimit = ViewModel.MaximumUploadFileSize; + x.MultipartHeadersLengthLimit = int.MaxValue; + }); + services.Configure(options => { options.Limits.MaxRequestBodySize = ViewModel.MaximumUploadFileSize; }); + + services.Configure(options => + { + // This lambda determines whether user consent for non-essential cookies is needed for a given request. + options.CheckConsentNeeded = context => true; + options.MinimumSameSitePolicy = SameSiteMode.None; + }); + services.AddDistributedMemoryCache(); + + services.AddSession(options => + { + options.IdleTimeout = TimeSpan.FromSeconds(10); + options.Cookie.HttpOnly = true; + options.Cookie.IsEssential = true; + }); + + services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0) + .AddNewtonsoftJson(options => + { + options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + options.SerializerSettings.ContractResolver = new DefaultContractResolver(); + }); + services.AddControllersWithViews() + .AddNewtonsoftJson(options => + options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore + ); + + services.AddRazorPages().AddRazorRuntimeCompilation(); + + services.Configure(options => { options.Level = CompressionLevel.Fastest; }); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Controllers/CellsApiControllerBase.cs b/Demos/Apps/Aspose.Cells.Common/Controllers/CellsApiControllerBase.cs new file mode 100644 index 000000000..0e8f2b341 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Controllers/CellsApiControllerBase.cs @@ -0,0 +1,967 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Aspose.Cells.Drawing; +using Aspose.Cells.GridJs; +using Aspose.Cells.Rendering; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using DocumentInfo = Aspose.Cells.Common.Models.DocumentInfo; +using Image = System.Drawing.Image; + +namespace Aspose.Cells.Common.Controllers +{ + public class CellsApiControllerBase : Controller, ICellsController + { + protected readonly IStorageService Storage; + + private IConfiguration _configuration; + + private readonly object _readSync = new object(); + + protected readonly ILogger Logger; + + private const string ZipFolderName = "output"; + + /// + /// Maximum number of files which can be uploaded for MVC Aspose.Words apps + /// + protected const int MaximumUploadFiles = 10; + + /// + /// Original file format SaveAs option for multiple files uploading. By default, "-" + /// + private const string SaveAsOriginalName = ".-"; + + /// + /// Response when uploaded files exceed the limits + /// + protected readonly Response MaximumFileLimitsResponse = new Response + { + Status = $"Number of files should be less {MaximumUploadFiles}", + StatusCode = 403 + }; + + /// + /// Response when uploaded files exceed the limits + /// + protected readonly Response PasswordProtectedResponse = new Response + { + Status = "Some of your documents are password protected", + StatusCode = 403 + }; + + /// + /// initialize Options + /// + protected readonly Options Opts = new Options(); + + /// + /// UTF8WithoutBom + /// + private static readonly Encoding fileUtf8WithoutBom = new UTF8Encoding(false); + + /// + /// initialize AsposeCellsBaseController + /// + public CellsApiControllerBase(IStorageService storage, IConfiguration configuration, ILogger logger) + { + Storage = storage; + _configuration = configuration; + Logger = logger; + } + + /// + /// Prepare upload files and return as documents + /// + protected async Task UploadWorkbooks(string sessionId, string appName) + { + var duration = Stopwatch.StartNew(); + var sourceKeyLs = new List(); + try + { + IEnumerable uploadProvider = HttpContext.Request.Form.Files; + uploadProvider = uploadProvider.Union(await UploadLinks()); + var formFiles = uploadProvider.ToList(); + Logger.FileUploading(formFiles.Select(x => x.FileName).ToArray(), "", false); + + var res = new List(); + + foreach (var formFile in formFiles) + { + await using var memoryStream = new MemoryStream(); + await formFile.CopyToAsync(memoryStream); + await using (var stream = new MemoryStream()) + { + memoryStream.Seek(0, SeekOrigin.Begin); + await memoryStream.CopyToAsync(stream); + + // upload source files to AWS S3 + var objectPath = $"{Configuration.SourceFolder}/{sessionId}/{formFile.FileName}"; + sourceKeyLs.Add(objectPath); + await Storage.Upload(objectPath, stream, new AwsMetaInfo + { + OriginalFileName = formFile.FileName, + Title = formFile.FileName + }); + } + + memoryStream.Seek(0, SeekOrigin.Begin); + lock (_readSync) + { + var interruptMonitor = new InterruptMonitor(); + var thread = new Thread(InterruptMonitor); + try + { + thread.Start(new object[] {interruptMonitor, Configuration.MillisecondsTimeout, formFile.FileName}); + Workbook workbook; + if (IsImage(memoryStream)) + { + workbook = new Workbook(); + workbook.Worksheets[0].Pictures.Add(0, 0, memoryStream); + } + else + { + var loadOptions = GetLoadOptionsByExtension(Path.GetExtension(formFile.FileName), interruptMonitor); + workbook = new Workbook(memoryStream, loadOptions); + } + + res.Add(new DocumentInfo + { + FolderName = sessionId, + FileName = formFile.FileName, + Workbook = workbook + }); + } + finally + { + thread.Interrupt(); + } + } + } + + Logger.FileUploaded(res.Select(x => x.FileName).ToArray(), "", duration.Elapsed); + return res.ToArray(); + } + catch (CellsException e) + { + if (e.Code != ExceptionType.IncorrectPassword) + { + foreach (var sourceKey in sourceKeyLs) + { + var destinationKey = sourceKey.Replace(Configuration.SourceFolder, $"{Configuration.ErrorFolder}/{appName}"); + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + if (e.Code == ExceptionType.Interrupted) + { + Logger.LogError("UploadWorkbooks {SessionId}=>{ProcessingTimeout}", sessionId, Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + } + + Logger.FileUploadingError(HttpContext.Request?.Form?.Files?.Select(x => x.FileName).ToArray(), duration.Elapsed, e); + if (string.IsNullOrEmpty(e.Message)) + throw new Exception("Invalid file, please ensure that uploading correct file"); + throw; + } + catch (Exception e) + { + foreach (var sourceKey in sourceKeyLs) + { + var destinationKey = sourceKey.Replace(Configuration.SourceFolder, $"{Configuration.ErrorFolder}/{appName}"); + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + Logger.FileUploadingError(HttpContext.Request?.Form?.Files?.Select(x => x.FileName).ToArray(), duration.Elapsed, e); + if (string.IsNullOrEmpty(e.Message)) + throw new Exception("Invalid file, please ensure that uploading correct file"); + throw; + } + } + + /// + /// Set default parameters into Opts + /// + /// + protected void SetDefaultOptions(DocumentInfo[] docs) + { + // all files move to AWS + Opts.DeleteSourceFolder = true; + + if (docs.Length <= 0) return; + + SetDefaultOptions(Path.GetFileName(docs[0].FileName)); + // Opts.CreateZip = docs.Length > 1 || Opts.IsPicture; + } + + /// + /// Set default parameters into Opts + /// + /// + private void SetDefaultOptions(string filename) + { + Opts.FileName = Path.GetFileName(filename); + var query = Request.Query.ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase); + string outputType = null; + if (query.ContainsKey("outputType")) outputType = query["outputType"]; + Opts.OutputType = !string.IsNullOrEmpty(outputType) ? outputType : Path.GetExtension(Opts.FileName); + Opts.OutputType = Opts.OutputType?.ToLower() == SaveAsOriginalName ? Path.GetExtension(Opts.FileName)?.ToLower() : Opts.OutputType?.ToLower(); + Opts.ResultFileName = Path.GetFileNameWithoutExtension(Opts.FileName) + Opts.OutputType; + } + + protected static LoadOptions GetLoadOptionsByExtension(string extension, InterruptMonitor interruptMonitor) + { + var loadOptions = extension.ToLower() switch + { + ".ods" => new OdsLoadOptions(LoadFormat.Ods), + ".csv" => new TxtLoadOptions(LoadFormat.Csv), + ".html" => new HtmlLoadOptions(LoadFormat.Html), + ".mhtml" => new HtmlLoadOptions(LoadFormat.MHtml), + ".tabdelimited" => new TxtLoadOptions(LoadFormat.TabDelimited), + ".tsv" => new TxtLoadOptions(LoadFormat.Tsv), + _ => new LoadOptions() + }; + + loadOptions.CheckExcelRestriction = false; + loadOptions.InterruptMonitor = interruptMonitor; + return loadOptions; + } + + protected static LoadOptions GetLoadOptionsByExtension(string extension) + { + var loadOptions = extension.ToLower() switch + { + ".ods" => new OdsLoadOptions(LoadFormat.Ods), + ".csv" => new TxtLoadOptions(LoadFormat.Csv), + ".html" => new HtmlLoadOptions(LoadFormat.Html), + ".mhtml" => new HtmlLoadOptions(LoadFormat.MHtml), + ".tabdelimited" => new TxtLoadOptions(LoadFormat.TabDelimited), + ".tsv" => new TxtLoadOptions(LoadFormat.Tsv), + _ => new LoadOptions() + }; + + loadOptions.CheckExcelRestriction = false; + return loadOptions; + } + + protected static SaveFormatType GetSaveFormatTypeByOutputType(string outputType) + { + var saveFormat = new SaveFormatType {SaveOptions = null}; + switch (outputType.ToLower()) + { + case "ods": + { + saveFormat.SaveOptions = new OdsSaveOptions(); + saveFormat.SaveType = SaveType.Ods; + saveFormat.SaveFormat = SaveFormat.Ods; + break; + } + case "pdf": + { + saveFormat.SaveOptions = new PdfSaveOptions(); + saveFormat.SaveType = SaveType.Pdf; + saveFormat.SaveFormat = SaveFormat.Pdf; + break; + } + case "docx": + { + saveFormat.SaveOptions = new DocxSaveOptions(); + saveFormat.SaveType = SaveType.Docx; + saveFormat.SaveFormat = SaveFormat.Docx; + break; + } + case "pptx": + { + saveFormat.SaveOptions = new PptxSaveOptions(); + saveFormat.SaveType = SaveType.Pptx; + saveFormat.SaveFormat = SaveFormat.Pptx; + break; + } + case "xps": + { + saveFormat.SaveOptions = new XpsSaveOptions(); + saveFormat.SaveType = SaveType.Xps; + saveFormat.SaveFormat = SaveFormat.Xps; + break; + } + case "xlsx": + { + saveFormat.SaveOptions = null; + saveFormat.SaveType = SaveType.Xlsx; + saveFormat.SaveFormat = SaveFormat.Xlsx; + break; + } + case "xls": + { + saveFormat.SaveOptions = new XlsSaveOptions(); + saveFormat.SaveType = SaveType.Xls; + saveFormat.SaveFormat = SaveFormat.Unknown; + break; + } + case "xlsm": + { + saveFormat.SaveOptions = null; + saveFormat.SaveType = SaveType.Xlsm; + saveFormat.SaveFormat = SaveFormat.Xlsm; + break; + } + case "xlsb": + { + saveFormat.SaveOptions = new XlsbSaveOptions(); + saveFormat.SaveType = SaveType.Xlsb; + saveFormat.SaveFormat = SaveFormat.Xlsb; + break; + } + case "xlam": + { + saveFormat.SaveOptions = null; + saveFormat.SaveType = SaveType.Xlam; + saveFormat.SaveFormat = SaveFormat.Xlam; + break; + } + case "csv": + { + saveFormat.SaveOptions = new TxtSaveOptions(SaveFormat.Csv) {Encoding = Encoding.GetEncoding("UTF-8")}; + saveFormat.SaveType = SaveType.Csv; + saveFormat.SaveFormat = SaveFormat.Csv; + break; + } + case "html": + { + saveFormat.SaveOptions = new HtmlSaveOptions + { + // ExportFontsAsBase64 = true, + ExportImagesAsBase64 = true, + // CssStyleSheetType = CssStyleSheetType.Inline, + Encoding = fileUtf8WithoutBom, + // HtmlVersion = HtmlVersion.Html5 + }; + saveFormat.SaveType = SaveType.Html; + saveFormat.SaveFormat = SaveFormat.Html; + break; + } + case "mhtml": + { + saveFormat.SaveOptions = new HtmlSaveOptions(SaveFormat.MHtml) + { + // ExportFontsAsBase64 = true, + ExportImagesAsBase64 = true, + // CssStyleSheetType = CssStyleSheetType.Inline, + Encoding = fileUtf8WithoutBom, + // HtmlVersion = HtmlVersion.Html5 + }; + saveFormat.SaveType = SaveType.Mhtml; + saveFormat.SaveFormat = SaveFormat.MHtml; + break; + } + case "svg": + { + saveFormat.SaveOptions = new SvgSaveOptions(); + saveFormat.ImageOrPrintOptions = new ImageOrPrintOptions {SaveFormat = SaveFormat.Svg}; + saveFormat.SaveType = SaveType.Svg; + saveFormat.SaveFormat = SaveFormat.Svg; + break; + } + case "bmp": + { + saveFormat.SaveOptions = null; + saveFormat.ImageOrPrintOptions = new ImageOrPrintOptions {ImageType = ImageType.Bmp}; + saveFormat.SaveType = SaveType.Bmp; + saveFormat.SaveFormat = SaveFormat.Unknown; + break; + } + case "png": + { + saveFormat.SaveOptions = null; + saveFormat.ImageOrPrintOptions = new ImageOrPrintOptions {ImageType = ImageType.Png}; + saveFormat.SaveType = SaveType.Png; + saveFormat.SaveFormat = SaveFormat.Unknown; + break; + } + case "tiff": + { + saveFormat.SaveOptions = new ImageSaveOptions(SaveFormat.Tiff); + saveFormat.ImageOrPrintOptions = new ImageOrPrintOptions {ImageType = ImageType.Tiff}; + saveFormat.SaveType = SaveType.Tiff; + saveFormat.SaveFormat = SaveFormat.Tiff; + break; + } + case "jpg": + { + saveFormat.SaveOptions = null; + saveFormat.ImageOrPrintOptions = new ImageOrPrintOptions {ImageType = ImageType.Jpeg}; + saveFormat.SaveType = SaveType.Jpg; + saveFormat.SaveFormat = SaveFormat.Unknown; + break; + } + case "tabdelimited": + { + saveFormat.SaveOptions = null; + saveFormat.SaveType = SaveType.Tabdelimited; + saveFormat.SaveFormat = SaveFormat.TabDelimited; + break; + } + case "tsv": + { + saveFormat.SaveOptions = new TxtSaveOptions(SaveFormat.Tsv) {Encoding = Encoding.GetEncoding("UTF-8")}; + saveFormat.SaveType = SaveType.Tsv; + saveFormat.SaveFormat = SaveFormat.Tsv; + break; + } + case "md": + { + saveFormat.SaveOptions = new MarkdownSaveOptions(); + saveFormat.SaveType = SaveType.Md; + saveFormat.SaveFormat = SaveFormat.Markdown; + break; + } + } + + return saveFormat; + } + + protected static SaveFormatType GetSaveFormatTypeByFilename(string filename) + { + var outputType = Path.GetExtension(filename); + + if (string.IsNullOrEmpty(outputType)) throw new FormatException(); + + if (outputType[0] == '.') + { + outputType = outputType.Substring(1); + } + + return GetSaveFormatTypeByOutputType(outputType); + } + + protected async Task UploadFiles(string sessionId, string password, string appName) + { + var duration = Stopwatch.StartNew(); + var sourceKeyLs = new List(); + try + { + IEnumerable uploadProvider = HttpContext.Request.Form.Files; + uploadProvider = uploadProvider.Union(await UploadLinks()); + var formFiles = uploadProvider.ToList(); + Logger.FileUploading(formFiles.Select(x => x.FileName).ToArray(), "", true); + + var res = new List(); + + foreach (var formFile in formFiles) + { + await using var memoryStream = new MemoryStream(); + await formFile.CopyToAsync(memoryStream); + await using (var stream = new MemoryStream()) + { + memoryStream.Seek(0, SeekOrigin.Begin); + await memoryStream.CopyToAsync(stream); + + // upload source files to AWS S3 + var objectPath = $"{Configuration.SourceFolder}/{sessionId}/{formFile.FileName}"; + sourceKeyLs.Add(objectPath); + await Storage.Upload(objectPath, stream, new AwsMetaInfo + { + OriginalFileName = formFile.FileName, + Title = formFile.FileName + }); + } + + memoryStream.Seek(0, SeekOrigin.Begin); + lock (_readSync) + { + var interruptMonitor = new InterruptMonitor(); + var thread = new Thread(InterruptMonitor); + try + { + thread.Start(new object[] {interruptMonitor, Configuration.MillisecondsTimeout, formFile.FileName}); + Workbook workbook; + if (IsImage(memoryStream)) + { + workbook = new Workbook(); + workbook.Worksheets[0].Pictures.Add(0, 0, memoryStream); + } + else + { + var loadOptions = GetLoadOptionsByExtension(Path.GetExtension(formFile.FileName), interruptMonitor); + loadOptions.Password = password; + workbook = new Workbook(memoryStream, loadOptions); + } + + res.Add(new DocumentInfo + { + FolderName = sessionId, + FileName = formFile.FileName, + Workbook = workbook + }); + } + finally + { + thread.Interrupt(); + } + } + } + + Logger.FileUploaded(res.Select(x => x.FileName).ToArray(), "", duration.Elapsed); + return res.ToArray(); + } + catch (CellsException e) + { + if (e.Code != ExceptionType.IncorrectPassword) + { + foreach (var sourceKey in sourceKeyLs) + { + var destinationKey = sourceKey.Replace(Configuration.SourceFolder, $"{Configuration.ErrorFolder}/{appName}"); + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + if (e.Code == ExceptionType.Interrupted) + { + Logger.LogError("UploadFiles {SessionId}=>{ProcessingTimeout}", sessionId, Configuration.ProcessingTimeout); + throw new TimeoutException(Configuration.ProcessingTimeout); + } + } + + Logger.FileUploadingError(HttpContext.Request?.Form?.Files?.Select(x => x.FileName).ToArray(), duration.Elapsed, e); + if (string.IsNullOrEmpty(e.Message)) + throw new Exception("Invalid file, please ensure that uploading correct file"); + throw; + } + catch (Exception e) + { + foreach (var sourceKey in sourceKeyLs) + { + var destinationKey = sourceKey.Replace(Configuration.SourceFolder, $"{Configuration.ErrorFolder}/{appName}"); + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + Logger.FileUploadingError(HttpContext.Request?.Form?.Files?.Select(x => x.FileName).ToArray(), duration.Elapsed, e); + if (string.IsNullOrEmpty(e.Message)) + throw new Exception("Invalid file, please ensure that uploading correct file"); + throw; + } + } + + protected async Task UploadLinks() + { + var form = await HttpContext.Request.ReadFormAsync(); + var service = new WebClientService(); + var internalService = new InternalLinkService(Storage); + var files = await Task.WhenAll( + form + .Where(item => + Uri.IsWellFormedUriString(item.Value, UriKind.Absolute)) + .AsParallel() + .Where(item => + item.Key.StartsWith("link_")) + .Select(async item => await service.Upload(item.Value))); + + var internalFiles = await Task.WhenAll( + form + .Where(item => Uri.IsWellFormedUriString(item.Value, UriKind.Relative)) + .AsParallel() + .Where(item => + item.Key.StartsWith("link_")) + .Select(async item => await internalService.Upload(item.Value))); + return files.Union(internalFiles).Where(f => f != null).ToArray(); + } + + protected Dictionary SaveDocument(DocumentInfo doc, SaveFormatType saveOptions) + { + var streams = new Dictionary(); + doc.Workbook.InterruptMonitor = new InterruptMonitor(); + var thread = new Thread(InterruptMonitor); + try + { + thread.Start(new object[] {doc.Workbook.InterruptMonitor, Configuration.MillisecondsTimeout, doc.FileName}); + switch (saveOptions.SaveType) + { + case SaveType.Xls: + case SaveType.Ods: + case SaveType.Pdf: + case SaveType.Xps: + case SaveType.Xlsx: + case SaveType.Xlsm: + case SaveType.Xlsb: + case SaveType.Xlam: + case SaveType.Tabdelimited: + case SaveType.Md: + case SaveType.Csv: + case SaveType.Tsv: + case SaveType.Docx: + case SaveType.Pptx: + case SaveType.Mhtml: + { + if (saveOptions.SaveOptions == null && saveOptions.SaveFormat == SaveFormat.Unknown) + { + throw new Exception("Represents unrecognized format, cannot be saved."); + } + + var stream = new MemoryStream(); + if (saveOptions.SaveOptions != null) + { + doc.Workbook.Save(stream, saveOptions.SaveOptions); + } + + if (saveOptions.SaveOptions == null) + { + doc.Workbook.Save(stream, saveOptions.SaveFormat); + } + + stream.Seek(0, SeekOrigin.Begin); + streams.Add(doc.FileName, stream); + break; + } + case SaveType.Html: + { + streams = SaveHtml(doc, saveOptions.SaveFormat); + break; + } + case SaveType.Tiff: + case SaveType.Png: + case SaveType.Jpg: + case SaveType.Bmp: + case SaveType.Svg: + { + streams = SaveImage(doc, saveOptions.ImageOrPrintOptions); + break; + } + default: + throw new ArgumentOutOfRangeException(); + } + + return streams; + } + finally + { + thread.Interrupt(); + } + } + + /// + /// SaveFormatType + /// + protected class SaveFormatType + { + /// + /// SaveOptions + /// + public SaveOptions SaveOptions { get; set; } + + /// + /// SaveType + /// + public SaveType SaveType { get; set; } + + public ImageOrPrintOptions ImageOrPrintOptions { get; set; } + + public SaveFormat SaveFormat { get; set; } + } + + /// + /// SaveType + /// + protected enum SaveType + { + Ods, + Pdf, + Docx, + Pptx, + Xps, + Html, + Jpg, + Png, + Bmp, + Tiff, + Svg, + Xls, + Xlsx, + Xlsm, + Xlsb, + Xlam, + Csv, + Tabdelimited, + Tsv, + Mhtml, + Md + } + + /// + /// Prepare output folder for using when multiple files are uploaded + /// Creates folder by filename without extension + /// + /// + /// Zip folder name + /// Tuple(original filename, output folder) + protected static (string, string) PrepareFolder(DocumentInfo doc, string path) + { + var filename = Path.GetFileNameWithoutExtension(doc.FileName); + var folder = path + "/"; + folder += filename; + while (Directory.Exists(folder)) + folder += "_"; + folder += "/"; + Directory.CreateDirectory(folder); + return (Path.GetFileName(doc.FileName), folder); + } + + /// + /// todo IsImage + /// + /// + /// + public bool IsImage(Stream stream) + { + try + { + Image.FromStream(stream); + return true; + } + catch (Exception) + { + return false; + } + } + + private Dictionary SaveImage(DocumentInfo doc, ImageOrPrintOptions imgOptions) + { + var streams = new Dictionary(); + var sheetCount = doc.Workbook.Worksheets.Count; + var outFilename = $"{Path.GetFileNameWithoutExtension(doc.FileName)}{Opts.OutputType}"; + + foreach (var sheet in doc.Workbook.Worksheets) + { + imgOptions.OutputBlankPageWhenNothingToPrint = true; + var sr = new SheetRender(sheet, imgOptions); + var srPageCount = Math.Min(sr.PageCount, Configuration.MaxPageCount); + for (var i = 0; i < srPageCount; i++) + { + if (sheetCount > 1 || srPageCount > 1) + { + outFilename = $"{sheet.Name}_{(i + 1)}{Opts.OutputType}"; + } + + var outStream = new MemoryStream(); + sr.ToImage(i, outStream); + outStream.Seek(0, SeekOrigin.Begin); + streams.Add(outFilename, outStream); + } + } + + return streams; + } + + private Dictionary SaveHtml(DocumentInfo doc, SaveFormat saveFormat) + { + var streams = new Dictionary(); + var ms = new MemoryStream(); + + var options = new HtmlSaveOptions(saveFormat) {ExportImagesAsBase64 = true}; + var streamProvider = new HtmlExportStreamProvider(doc.FileName); + options.StreamProvider = streamProvider; + doc.Workbook.Save(ms, options); + ms.Seek(0, SeekOrigin.Begin); + streams.Add(doc.FileName, ms); + foreach (var (key, value) in streamProvider.FileStreams) + { + value.Seek(0, SeekOrigin.Begin); + streams.Add(key, value); + } + + return streams; + } + + public (string, string) BeforeAction() + { + var outputFolder = Opts.CreateZip ? $"{Opts.FolderName}/{ZipFolderName}" : Opts.FolderName; + var outFilePath = $"{outputFolder}/{Opts.ResultFileName}"; + return (outputFolder, outFilePath); + } + + public async Task AfterAction(string outFilePath, Dictionary streams) + { + var duration = Stopwatch.StartNew(); + await using var outStream = new MemoryStream(); + + if (streams.Count > 1) + { + Opts.ResultFileName = $"{Opts.ZipFileName}.zip"; + await using var zipStream = new MemoryStream(); + using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true)) + { + foreach (var (filename, stream) in streams) + { + var entry = archive.CreateEntry(filename); + await using var entryStream = entry.Open(); + stream.Seek(0, SeekOrigin.Begin); + await stream.CopyToAsync(entryStream); + stream.Close(); + } + } + + zipStream.Seek(0, SeekOrigin.Begin); + await zipStream.CopyToAsync(outStream); + } + else + { + await using var sourceStream = streams.First().Value; + sourceStream.Seek(0, SeekOrigin.Begin); + await sourceStream.CopyToAsync(outStream); + } + + try + { + // Upload result file + Logger.FileUploading(new[] {outFilePath}, "", false); + outStream.Seek(0, SeekOrigin.Begin); + var objectPath = $"{Configuration.ConvertFolder}/{Opts.FolderName}/{Opts.ResultFileName}"; + await Storage.Upload(objectPath, outStream, new AwsMetaInfo + { + OriginalFileName = Opts.ResultFileName, + Title = Opts.ResultFileName + }); + Logger.FileUploaded(new[] {outFilePath}, "", duration.Elapsed); + } + catch (Exception e) + { + Logger.FileUploadingError(new[] {outFilePath}, duration.Elapsed, e); + var response = Models.Response.Error(Opts.FolderName, Opts.ResultFileName, "Error when processing"); + await Storage.UpdateStatus(response); + return response; + } + + try + { + // Update status of result file + var response = Models.Response.Complete(Opts.FolderName, Opts.ResultFileName); + response.FileProcessingErrorCode = FileProcessingErrorCode.OK; + await Storage.UpdateStatus(response); + return response; + } + catch (Exception e) + { + Logger.FileUploadingError(new[] {"status.json"}, duration.Elapsed, e); + var response = Models.Response.Error(Opts.FolderName, Opts.ResultFileName, "Error when processing"); + await Storage.UpdateStatus(response); + return response; + } + } + + protected async Task UploadErrorFiles(DocumentInfo[] docs, string appName) + { + foreach (var doc in docs) + { + var sourceKey = $"{Configuration.SourceFolder}/{doc.FolderName}/{doc.FileName}"; + var destinationKey = $"{Configuration.ErrorFolder}/{appName}/{doc.FolderName}/{doc.FileName}"; + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + } + + protected async Task UploadErrorFile(string folderName, string filename, string appName) + { + var sourceKey = $"{Configuration.SourceFolder}/{folderName}/{filename}"; + var destinationKey = $"{Configuration.ErrorFolder}/{appName}/{folderName}/{filename}"; + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + protected async Task UploadUidFile(string folderName, string uid, string appName) + { + var sourceKey = $"{Configuration.GridJsCacheFolder}/{uid}"; + var destinationKey = $"{Configuration.ErrorFolder}/{appName}/{folderName}/{uid}"; + await Storage.CopyingObjectAsync(sourceKey, destinationKey); + } + + protected async Task UploadGridJsErrorJson(string errorJson, string id) + { + var duration = Stopwatch.StartNew(); + var objectPath = $"{Configuration.GridJsErrorJsonFolder}/{id}.json"; + try + { + await using var memoryStream = new MemoryStream(); + await using var requestWriter = new StreamWriter(memoryStream); + await requestWriter.WriteAsync(errorJson); + await requestWriter.FlushAsync(); + await Storage.Upload(objectPath, memoryStream); + } + catch (Exception e) + { + Logger.FileUploadingError(new[] {objectPath}, duration.Elapsed, e); + } + } + + public void InterruptMonitor(object o) + { + var os = (object[]) o; + try + { + Thread.Sleep((int) os[1]); + Logger.LogError("Failed to process file in given time: {Time}ms | filename : {Filename}", os[1], os[2]); + ((InterruptMonitor) os[0]).Interrupt(); + } + catch (ThreadInterruptedException) + { + } + } + + public void GridInterruptMonitor(object o) + { + var os = (object[]) o; + try + { + Thread.Sleep((int) os[1]); + Logger.LogError("GridJs failed to process file in given time: {Time}ms | filename : {Filename}", os[1], os[2]); + ((GridInterruptMonitor) os[0]).Interrupt(); + } + catch (ThreadInterruptedException) + { + } + } + + public async Task GetWorkbook(InterruptMonitor interruptMonitor) + { + var objectPath = $"{Configuration.SourceFolder}/{Opts.FolderName}/{Opts.FileName}"; + var stream = await Storage.Download(objectPath); + var loadOptions = GetLoadOptionsByExtension(Path.GetExtension(Opts.FileName), interruptMonitor); + var workbook = new Workbook(stream, loadOptions); + return workbook; + } + + public async Task GetWorkbook(string objectPath, InterruptMonitor interruptMonitor) + { + var stream = await Storage.Download(objectPath); + var loadOptions = GetLoadOptionsByExtension(Path.GetExtension(objectPath), interruptMonitor); + var workbook = new Workbook(stream, loadOptions); + return workbook; + } + + public GridLoadFormat GetGridLoadFormat(string extension) + { + return extension.ToLower() switch + { + ".csv" => GridLoadFormat.CSV, + ".xls" => GridLoadFormat.Excel97To2003, + ".xlsx" => GridLoadFormat.Xlsx, + ".tsv" => GridLoadFormat.TSV, + ".tabDelimited" => GridLoadFormat.TabDelimited, + ".html" => GridLoadFormat.Html, + ".mhtml" => GridLoadFormat.MHtml, + ".ods" => GridLoadFormat.ODS, + ".xlsb" => GridLoadFormat.Xlsb, + ".fods" => GridLoadFormat.FODS, + ".sxc" => GridLoadFormat.SXC, + _ => GridLoadFormat.Unknown + }; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Controllers/CommonController.cs b/Demos/Apps/Aspose.Cells.Common/Controllers/CommonController.cs new file mode 100644 index 000000000..574c9ccb1 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Controllers/CommonController.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Models; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json.Linq; + +namespace Aspose.Cells.Common.Controllers +{ + public class CommonController : ControllerBase + { + private readonly IStorageService _storage; + private readonly ILogger _logger; + + public CommonController(IStorageService storage, ILogger logger) + { + _storage = storage; + _logger = logger; + } + + [HttpPost] + public async Task Delete([FromBody] JObject obj) + { + var folderName = Convert.ToString(obj["FolderName"]); + var filename = Convert.ToString(obj["Filename"]); + var objectPath = $"{Configuration.ConvertFolder}/{folderName}/{filename}"; + + if (folderName.IsNullOrEmpty() || !await _storage.CheckExists(objectPath)) + { + return NotFound(); + } + + try + { + await _storage.Delete(objectPath); + return Ok(); + } + catch (Exception e) + { + _logger.LogError("AppName = {AppName} | Message = {Message} | FolderName = {FolderName}", + "Common.Delete", e.Message, folderName); + return BadRequest(); + } + } + + [HttpPost] + [ActionName("UploadFile")] + public async Task UploadFile() => (await Upload(Guid.NewGuid().ToString())).First(); + + [ApiExplorerSettings(IgnoreApi = true)] + [NonAction] + private async Task> Upload(string sessionId) + { + IEnumerable uploadProvider = HttpContext.Request.Form.Files; + uploadProvider = uploadProvider.Union(await UploadLinks()); + var formFiles = uploadProvider.ToList(); + + foreach (var formFile in formFiles) + { + var objectPath = $"{Configuration.SourceFolder}/{sessionId}/{formFile.FileName}"; + + await using var memoryStream = new MemoryStream(); + await formFile.CopyToAsync(memoryStream); + + await _storage.Upload(objectPath, memoryStream, new AwsMetaInfo + { + OriginalFileName = formFile.FileName, + Title = formFile.FileName + }); + } + + return + from formFile in formFiles + let localFileName = formFile.FileName + select new FileSafeResult(localFileName) + { + id = sessionId, + FileName = Path.GetFileName(localFileName) + }; + } + + private async Task UploadLinks() + { + var form = await HttpContext.Request.ReadFormAsync(); + var service = new WebClientService(); + var internalService = new InternalLinkService(_storage); + var files = await Task.WhenAll( + form + .Where(item => + Uri.IsWellFormedUriString(item.Value, UriKind.Absolute)) + .AsParallel() + .Where(item => + item.Key.StartsWith("link_")) + .Select(async item => await service.Upload(item.Value))); + + var internalFiles = await Task.WhenAll( + form + .Where(item => Uri.IsWellFormedUriString(item.Value, UriKind.Relative)) + .AsParallel() + .Where(item => + item.Key.StartsWith("link_")) + .Select(async item => await internalService.Upload(item.Value))); + return files.Union(internalFiles).Where(f => f != null).ToArray(); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Controllers/DownloadController.cs b/Demos/Apps/Aspose.Cells.Common/Controllers/DownloadController.cs new file mode 100644 index 000000000..ff4defd17 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Controllers/DownloadController.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using System.Net; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Services; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Common.Controllers +{ + public class DownloadController : ControllerBase + { + private readonly IStorageService _storage; + private readonly ILogger _logger; + + public DownloadController(IStorageService storage, ILogger logger) + { + _storage = storage; + _logger = logger; + } + + [HttpGet] + public async Task Download([FromRoute] string id, [FromQuery] string file) + { + var convertPath = $"{Configuration.ConvertFolder}/{id}"; + var url = AwsStorageService.Join(convertPath, file); + if (!await _storage.CheckExists(url)) + { + Response.StatusCode = (int) HttpStatusCode.NotFound; + throw new KeyNotFoundException(); + } + + var (stream, contentType, info) = await _storage.DownloadEx(url); + return new FileStreamResult(stream, contentType) + { + FileDownloadName = info.OriginalFileName ?? id + }; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Controllers/ICellsController.cs b/Demos/Apps/Aspose.Cells.Common/Controllers/ICellsController.cs new file mode 100644 index 000000000..5631d9b1c --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Controllers/ICellsController.cs @@ -0,0 +1,6 @@ +namespace Aspose.Cells.Common.Controllers +{ + public interface ICellsController + { + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Controllers/ReportController.cs b/Demos/Apps/Aspose.Cells.Common/Controllers/ReportController.cs new file mode 100644 index 000000000..d21d9a004 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Controllers/ReportController.cs @@ -0,0 +1,35 @@ +using System; +using System.Threading.Tasks; +using Aspose.Cells.Common.Services; +using Microsoft.AspNetCore.Mvc; + +namespace Aspose.Cells.Common.Controllers +{ + public sealed class ReportController : ControllerBase + { + private readonly IStorageService _storage; + + public ReportController(IStorageService storage) + { + _storage = storage; + } + + [HttpPost] + [ActionName("Error")] + public async Task Error(ReportModel model) + { + try + { + return await Task.Run(() => ReportService.Submit(model, _storage)); + } + catch (Exception e) + { + return new ReportResult + { + StatusCode = 500, + Status = e.Message + }; + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Controllers/UIControllerBase.cs b/Demos/Apps/Aspose.Cells.Common/Controllers/UIControllerBase.cs new file mode 100644 index 000000000..5593a1d5b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Controllers/UIControllerBase.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Threading.Tasks; +using System.Web; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Models; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Common.Controllers +{ + public class UIControllerBase : Controller, ICellsController + { + public readonly ILogger logger; + public IWebHostEnvironment Env { get; } + public string ContentRootPath { get; } + + private FlexibleResources _resources; + + public virtual IEnumerable Applications { get; } = null; + + public UIControllerBase(IWebHostEnvironment env, ILogger logger) + { + Env = env; + ContentRootPath = Env.ContentRootPath; + this.logger = logger; + } + + private readonly string[] _feedbackEmails = {"nick.liu@aspose.com"}; + + public const string Product = "cells"; + + public virtual FlexibleResources Resources => _resources ??= new FlexibleResources(Env, "EN"); + + public bool IsValidEmail(string email) + { + try + { + var addr = new System.Net.Mail.MailAddress(email); + return addr.Address == email; + } + catch + { + return false; + } + } + + [HttpPost] + public JsonResult SendEmail(string url, string title, string appName, string email) + { + try + { + if (IsValidEmail(email)) + { + Task.Factory.StartNew(() => + { + var successMessage = Resources[Product + appName + "SuccessMessage"]; + var emailBody = EmailManager.PopulateBody(title, url, successMessage); + EmailManager.SendEmail(email, Configuration.MailServerUserId, Resources["EmailTitle"], emailBody, "", logger); + }); + return Json(new {message = Resources[Product + appName + "SentEmailSuccessMessage"]}); + } + + HttpContext.Response.StatusCode = (int) HttpStatusCode.InternalServerError; + return Json(new {message = Resources["ValidateEmailMessage"]}); + } + catch (Exception ex) + { + logger.EmailSendError(ex); + HttpContext.Response.StatusCode = (int) HttpStatusCode.InternalServerError; + return Json(new {message = ex.Message}); + } + } + + [HttpPost] + public JsonResult SendFeedback(string text, string appName, int score = 0) + { + try + { + if (text.Length > 1000) + { + HttpContext.Response.StatusCode = (int) HttpStatusCode.InternalServerError; + return Json(new {message = Resources["FeedbackLengthError"]}); + } + + var subject = $"aspose.app feedback {appName}"; + var body = score == 0 + ? text + : $"Score: {score}{Environment.NewLine}{text}"; + Task.Factory.StartNew(() => + { + foreach (var email in _feedbackEmails) + { + try + { + EmailManager.SendEmail(email, Configuration.MailServerUserId, subject, body, "", logger); + } + catch (Exception ex) + { + logger.FeedbackSendError(ex); + } + } + }); + return Json(new {message = Resources["FeedbackSuccess"]}); + } + catch (Exception ex) + { + logger.FeedbackSendError(ex); + HttpContext.Response.StatusCode = (int) HttpStatusCode.InternalServerError; + return Json(new {message = ex.Message}); + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.GridJs.dll b/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.GridJs.dll new file mode 100644 index 000000000..cfbc860c9 Binary files /dev/null and b/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.GridJs.dll differ diff --git a/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.dll b/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.dll new file mode 100644 index 000000000..12f372816 Binary files /dev/null and b/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.dll differ diff --git a/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.xml b/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.xml new file mode 100644 index 000000000..e1ea384b7 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/GridJs/Aspose.Cells.xml @@ -0,0 +1,48191 @@ + + + + Aspose.Cells + + + + + Represents autofiltering for the specified worksheet. + + + + + [C#] + + //Creating a file stream containing the Excel file to be opened + FileStream fstream = new FileStream("C:\\book1.xls", FileMode.Open); + //Instantiating a Workbook object and open a stream. + Workbook workbook = new Workbook(fstream); + //Accessing the first worksheet in the Excel file + Worksheet worksheet = workbook.Worksheets[0]; + //Creating AutoFilter by giving the cells range of the heading row + worksheet.AutoFilter.Range = "A1:B1"; + //Filtering columns with specified values + worksheet.AutoFilter.Filter(1, "Bananas"); + //Saving the modified Excel file. + workbook.Save("C:\\output.xls"); + //Closing the file stream to free all resources + fstream.Close(); + + [Visual Basic] + + 'Creating a file stream containing the Excel file to be opened + Dim fstream As FileStream = New FileStream("C:\\book1.xls", FileMode.Open) + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook(fstream) + 'Accessing the first worksheet in the Excel file + Dim worksheet As Worksheet = workbook.Worksheets(0) + 'Creating AutoFilter by giving the cells range of the heading row + worksheet.AutoFilter.Range = "A1:B1" + 'Filtering columns with specified values + Worksheet.AutoFilter.Filter(1, "Bananas") + 'Saving the modified Excel file + workbook.Save("C:\\output.xls") + 'Closing the file stream to free all resources + fstream.Close() + + + + + + Gets the data sorter. + + + + + Sets the range to which the specified AutoFilter applies. + + Row index. + Start column index. + End column Index. + + + + Represents the range to which the specified AutoFilter applies. + + + + + Adds a filter for a filter column. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + The specified criteria (a string; for example, "101"). + It only can be null or be one of the cells' value in this column. + + + MS Excel 2007 supports multiple selection in a filter column. + + + + + Adds a date filter. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + + + + The year. + The month. + The day. + The hour. + The minute. + The second. + + If DateTimeGroupingType is Year, only the param year effects. + If DateTiemGroupingType is Month, only the param year and month effect. + + + + + Removes a date filter. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + + + + The year. + The month. + The day. + The hour. + The minute. + The second. + + If DateTimeGroupingType is Year, only the param year effects. + If DateTiemGroupingType is Month, only the param year and month effect. + + + + + Removes a filter for a filter column. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + The specified criteria (a string; for example, "101"). + It only can be null or be one of the cells' value in this column. + + + + + Filters a list with specified criteria. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + The specified criteria (a string; for example, "101"). + + Aspose.Cells will remove all other filter setting on this field as Ms Excel 97-2003. + + + + + Filter the top 10 item in the list + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + Indicates whether filter from top or bottom + Indicates whether the items is percent or count + The item count + + + + Adds a dynamic filter. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + Dynamic filter type. + + + + + Adds a font color filter. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + The object. + + + + + Adds a fill color filter. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + The background pattern type. + The foreground color. + The background color. + + + + Adds an icon filter. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + The icon set type. + The icon id. + + Only supports to add the icon filter. + Not supports checking which row is visible if the filter is icon filter. + + + + + Match all blank cell in the list. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + + + Match all not blank cell in the list. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + + + Filters a list with a custom criteria. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + The filter operator type + The custom criteria + + + + Filters a list with custom criteria. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + The filter operator type + The custom criteria + + + The filter operator type + The custom criteria + + + + Unhide all rows. + + + + + Remove the specific filter. + + The specific filter index + + + + Refresh auto filters to hide or unhide the rows. + + + Returns all hidden rows' indexes. + + + + + Gets all hidden rows' indexes. + + + If true, hide the filtered rows. + + + Returns all hidden rows indexes. + + + + + Indicates whether the AutoFilter button for this column is visible. + + + + + Gets the collection of the filter columns. + + + + + Represents the color filter. + + + + + Flag indicating whether or not to filter by the cell's fill color. + + + + + + + + + + + + + Represents the custom filter. + + + + + Gets and sets the filter operator type. + + + + + Gets and sets the criteria. + + + + + Sets the filter criteria. + + filter operator type + filter criteria value + + + + Represents the custom filters. + + + + + Indicates whether the two criteria have an "and" relationship. + + + + + Gets the custom filter in the specific index. + + The index. + + + + + + Specifies how to group dateTime values. + + + + + Group by day. + + + + + Group by hour. + + + + + Group by Minute. + + + + + Group by Month. + + + + + Group by Second. + + + + + Group by Year. + + + + + Represents the datetime's group setting. + + + + + Gets the min value. + + + + + + + + + + + + + + + + + + + + + + + Gets and sets the group type. + + + + + Gets and sets the year of the grouped date time. + + + + + Gets and sets the month of the grouped date time. + + + + + Gets and sets the day of the grouped date time. + + + + + Gets and sets the hour of the grouped date time. + + + + + Gets and sets the minute of the grouped date time. + + + + + Gets and sets the second of the grouped date time. + + + + + Represents the dynamic filter. + + + + + Gets and sets the dynamic filter type. + + + + + Gets and sets the dynamic filter value. + + + + + Gets and sets the dynamic filter max value. + + + + + Dynamic filter type. + + + + + Shows values that are above average. + + + + + Shows values that are below average. + + + + + Shows last month's dates. + + + + + Shows last quarter's dates. + + + + + Shows last week's dates. + + + + + Shows last year's dates. + + + + + Shows the dates that are in January, regardless of year. + + + + + Shows the dates that are in October, regardless of year. + + + + + Shows the dates that are in November, regardless of year. + + + + + Shows the dates that are in December, regardless of year. + + + + + Shows the dates that are in February, regardless of year. + + + + + Shows the dates that are in March, regardless of year. + + + + + Shows the dates that are in April, regardless of year. + + + + + Shows the dates that are in May, regardless of year. + + + + + Shows the dates that are in June, regardless of year. + + + + + Shows the dates that are in July, regardless of year. + + + + + Shows the dates that are in August, regardless of year. + + + + + Shows the dates that are in September, regardless of year. + + + + + Shows next month's dates. + + + + + Shows next quarter's dates. + + + + + Shows next week's dates. + + + + + Shows next year's dates. + + + + + None. + + + + + Shows the dates that are in the 1st quarter, regardless of year. + + + + + Shows the dates that are in the 2nd quarter, regardless of year. + + + + + Shows the dates that are in the 3rd quarter, regardless of year. + + + + + Shows the dates that are in the 4th quarter, regardless of year. + + + + + Shows this month's dates. + + + + + Shows this quarter's dates. + + + + + Shows this week's dates. + + + + + Shows this year's dates. + + + + + Shows today's dates. + + + + + Shows tomorrow's dates. + + + + + Shows the dates between the beginning of the year and today, inclusive. + + + + + Shows yesterday's dates. + + + + + Represents a filter for a single column. The Filter object is a member of the Filters collection + + + + + Indicates whether the AutoFilter button for this column is visible. + + + + + Indicates whether the AutoFilter button for this column is visible. + + NOTE: This member is now obsolete. + Instead, please use FilterColumn.IsDropdownVisible to check whether the AutoFilter button for this column is visible. + This property will be removed 12 months later since September 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + + + + + + + + + + + + + A collection of Filter objects that represents all the filters in an autofiltered range. + + + + + + + + + + + Returns a single Filter object from a collection. + + + + + Gets object at the special field. + + The integer offset of the field on which you want to base the filter + (from the left of the list; the leftmost field is field 0). + + + Returns object. + + + + + Custom Filter operator type. + + + + + Represents LessOrEqual operator. + + + + + Represents LessThan operator. + + + + + Represents Equal operator. + + + + + Represents GreaterThan operator. + + + + + Represents NotEqual operator. + + + + + Represents GreaterOrEqual operator. + + + + + Represents no comparison. + + + + + Begins with the text. + + + + + Ends with the text. + + + + + Contains the text. + + + + + Not contains the text. + + + + + The filter type. + + + + + Filter by fill color of the cell. + + + + + Custom filter type. + + + + + Dynamic filter type. + + + + + When multiple values are chosen to filter by, or when a group of date values are chosen to filter by, + this element groups those criteria together. + + + + + Filter by icon of conditonal formatting. + + + + + Top 10 filter. + + + + + No filter. + + + + + Represents icon filter. + + + + + Gets and sets which icon set is used in the filter criteria. + + + + + Gets and sets Zero-based index of an icon in an icon set. + + + + + Represents the multiple filter collection. + + + + + Indicates whether to filter by blank. + + + + + DateTimeGroupItem or a simple object. + + + + + + + + + Adds string filter. + + The filter data. + + + + Represents the top 10 filter. + + + + + Indicates whether it's top filter. + + + + + Indicates whether the items is percent. + + + + + Gets and sets the items of the filter. + + + + + + + + + Represents the type of auto fitting merged cells. + + + + + Ignore merged cells. + + + Default. + + + + + Only expands the height of the first row. + + + + + Only expands the height of the last row. + + + + + Only expands the height of each row. + + + + + Represents all auto fitter options. + + + + + Gets or sets default edit language. + + + It may display/render different layouts for text paragraph when different edit languages is set. + Default is . + + + + + Indicates whether auto fit row height when the cells is merged in a row. + The default value is false. + + NOTE: This member is now obsolete. Instead, + please use AutoFitterOptions.AutoFitMergedCellsType property, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and set the type of auto fitting row height of merged cells. + + + Excel defaults to ignore merged cells when fitting the row height, so Aspose.Cells works as MS Excel default. + Please set this type to change the way of auto fitting row height of merged cells. + + + + + Indicates whether only fit the rows which height are not customed. + + + + + Ignores the hidden rows/columns. + + + + + Gets and sets the max row height(in unit of Point) when autofitting rows. + + + + + Gets and sets the type of auto fitting wrapped text. + + + + + Represents the type of auto fitting wrapped text. + + + + + Works as MS Excel. + + + + + Auto fit width with the longest paragraph. + + + + + Represents the mode type of calculating formulas. + + + Only sets for MS Excel. + + + + + + + + + + + + + + + + + Encapsulates the object that represents a single Workbook cell. + + + + [C#] + + Workbook excel = new Workbook(); + Cells cells = excel.Worksheets[0].Cells; + + //Put a string into a cell + Cell cell = cells[0, 0]; + cell.PutValue("Hello"); + + string first = cell.StringValue; + + //Put an integer into a cell + cell = cells["B1"]; + cell.PutValue(12); + + int second = cell.IntValue; + + //Put a double into a cell + cell = cells[0, 2]; + cell.PutValue(-1.234); + + double third = cell.DoubleValue; + + //Put a formula into a cell + cell = cells["D1"]; + cell.Formula = "=B1 + C1"; + + //Put a combined formula: "sum(average(b1,c1), b1)" to cell at b2 + cell = cells["b2"]; + cell.Formula = "=sum(average(b1,c1), b1)"; + + //Set style of a cell + Style style = cell.GetStyle(); + //Set background color + style.BackgroundColor = Color.Yellow; + //Set format of a cell + style.Font.Name = "Courier New"; + style.VerticalAlignment = TextAlignmentType.Top; + cell.SetStyle(style); + + + + [Visual Basic] + + Dim excel as Workbook = new Workbook() + Dim cells as Cells = exce.Worksheets(0).Cells + + 'Put a string into a cell + Dim cell as Cell = cells(0, 0) + cell.PutValue("Hello") + + Dim first as String = cell.StringValue + + //Put an integer into a cell + cell = cells("B1") + cell.PutValue(12) + + Dim second as Integer = cell.IntValue + + //Put a double into a cell + cell = cells(0, 2) + cell.PutValue(-1.234) + + Dim third as Double = cell.DoubleValue + + //Put a formula into a cell + cell = cells("D1") + cell.Formula = "=B1 + C1" + + //Put a combined formula: "sum(average(b1,c1), b1)" to cell at b2 + cell = cells("b2") + cell.Formula = "=sum(average(b1,c1), b1)" + + //Set style of a cell + Dim style as Style = cell.GetStyle() + + //Set background color + style.BackgroundColor = Color.Yellow + //Set font of a cell + style.Font.Name = "Courier New" + style.VerticalAlignment = TextAlignmentType.Top + cell.SetStyle(style) + + + + + + Calculates the formula of the cell. + + Options for calculation + + + + Calculates the formula of the cell. + + Indicates if hide the error in calculating formulas. + The error may be unsupported function, external links, etc. + The custom formula calculation functions to extend the calculation engine. + + NOTE: This member is now obsolete. Instead, + please use Calculate(CalculationOptions) method. + This method will be removed 12 months later since August 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets the parent worksheet. + + + + + Puts an boolean value into the cell. + + + + + + + Puts an integer value into the cell. + + Input value + + + + Puts a double value into the cell. + + Input value + + + + Puts a value into the cell, if appropriate the value will be converted to other data type and cell's number format will be reset. + + Input value + True: converted to other data type if appropriate. + True: set the number format to cell's style when converting to other data type + + + + Puts a string value into the cell and converts the value to other data type if appropriate. + + Input value + True: converted to other data type if appropriate. + + + + Puts a string value into the cell. + + Input value + + + + Puts a DateTime value into the cell. + + Input value + + + + Gets the DateTime value contained in the cell. + + + + + Puts an object value into the cell. + + input value + + + + Gets row number (zero based) of the cell. + + Cell row number + + + + Gets column number (zero based) of the cell. + + + + + Represents if the specified cell contains formula. + + + + + Represents cell value type. + + + + + Gets the name of the cell. + + + A cell name includes its column letter and row number. For example, the name of a cell in row 0 and column 0 is A1. + + + + + Checks if a formula can properly evaluate a result. + + Also applies to formula cell to check the calculated result + + + + Indicates whether the inner value of this cell is numeric(int, double and datetime) + + Also applies to formula cell to check the calculated result + + + + Gets the string value by specific formatted strategy. + + The formatted strategy. + + + + + + Gets the string value contained in the cell. If the type of this cell is string, then return the string value itself. + For other cell types, the formatted string value (formatted with the specified style of this cell) will be returned. + The formatted cell value is same with what you can get from excel when copying a cell as text(such as + copying cell to text editor or exporting to csv). + + + + + Gets cell's value as string without any format. + + + NOTE: This class is now obsolete. Instead, + User should get the value object and format it according to the value type and the specific requirement. + This property will be removed 12 months later since December 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents the category type of this cell's number formatting. + + + + + Gets the formatted string value of this cell. + + + + + Gets the integer value contained in the cell. + + + + + Gets the double value contained in the cell. + + + + + Gets the float value contained in the cell. + + + + + Gets the boolean value contained in the cell. + + + + + Gets the width of the value in unit of pixels. + + + + + + + Gets the height of the value in unit of pixels. + + + + + + + Gets the display style of the cell. + If the cell is conditional formatted, the display style is not same as the cell.GetStyle(). + + + + + Gets the display style of the cell. + If the cell is conditional formatted, the display style is not same as the cell.GetStyle(). + + Indicates whether checking borders of the merged cells. + + + + + Gets format conditions which applies to this cell. + + Returns object + + + + Gets the cell style. + + Style object. + To change the style of the cell, please call Cell.SetStyle() method after changing the style. + + + + + If checkBorders is true, check whether other cells' borders will effect the style of this cell. + + Check other cells' borders + Style object. + + + + + + Sets the cell style. + + The cell style. + + If the border settings are changed, the border of adjust cells will be updated too. + + + + + Apply the cell style. + + The cell style. + True, only overwriting formatting which is explicitly set. + + + + + Apply the cell style. + + The cell style. + The style flag. + + + + Gets cell's shared style index in the style pool. + + + + + Gets or sets a formula of the . + + A formula string always begins with an equal sign (=). + And please always use comma(,) as parameters delimiter, such as "=SUM(A1, E1, H2)". + + + + [C#] + + Workbook excel = new Workbook(); + Cells cells = excel.Worksheets[0]; + cells["B6"].Formula = "=SUM(B2:B5, E1) + sheet1!A1"; + + [Visual Basic] + + Dim excel As Workbook = New Workbook() + Dim cells As Cells = excel.Worksheets(0) + cells("B6").Formula = "=SUM(B2:B5, E1) + sheet1!A1" + + + + + + Get the locale formatted formula of the cell. + + + + + Gets or sets a R1C1 formula of the . + + + + + Set the formula and the value of the formula. + + The formula. + The value of the formula. + + + + Get the formula of this cell. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + the formula of this cell. + + + + Set the formula and the value of the formula. + + The formula. + Whether the formula is R1C1 formula. + Whether the formula is locale formatted. + The value of the formula. + + NOTE: This class is now obsolete. Instead, + please use Cell.SetFormula(string,FormulaParseOptions,object). + This property will be removed 12 months later since December 2019. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Set the formula and the value of the formula. + + The formula. + Options for parsing the formula. + The value of the formula. + + + + Sets an array formula to a range of cells. + + Array formula. + Number of rows to populate result of the array formula. + Number of columns to populate result of the array formula. + whether the formula is R1C1 formula + whether the formula is locale formatted + + NOTE: This class is now obsolete. Instead, + please use Cell.SetArrayFormula(string,int,int,FormulaParseOptions). + This property will be removed 12 months later since December 2019. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Sets an array formula to a range of cells. + + Array formula. + Number of rows to populate result of the array formula. + Number of columns to populate result of the array formula. + Options for parsing the formula. + + + + Sets an array formula to a range of cells. + + Array formula. + Number of rows to populate result of the array formula. + Number of columns to populate result of the array formula. + Options for parsing the formula. + values for those cells with given array formula + + + + Sets a formula to a range of cells. + + Shared formula. + Number of rows to populate the formula. + Number of columns to populate the formula. + whether the formula is R1C1 formula + whether the formula is locale formatted + + NOTE: This class is now obsolete. Instead, + please use Cell.SetSharedFormula(string,int,int,FormulaParseOptions). + This property will be removed 12 months later since December 2019. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Sets a formula to a range of cells. + + Shared formula. + Number of rows to populate the formula. + Number of columns to populate the formula. + Options for parsing the formula. + + + + Sets a formula to a range of cells. + + Shared formula. + Number of rows to populate the formula. + Number of columns to populate the formula. + Options for parsing the formula. + values for those cells with given shared formula + + + + Indicates whether this cell contains an external link. + Only applies when the cell is a formula cell. + + + + + Gets all cells or ranges which this cell's formula depends on. + + + Returns all cells or ranges. + + Returns null if this is not a formula cell. + + + + [C#] + + Workbook workbook = new Workbook(); + Cells cells = workbook.Worksheets[0].Cells; + cells["A1"].Formula = "= B1 + SUM(B1:B10) + [Book1.xls]Sheet1!A1"; + ReferredAreas areas = cells["A1"].GetPrecedents(); + for (int i = 0; i < areas.Count; i++) + { + ReferredArea area = areas[i]; + StringBuilder stringBuilder = new StringBuilder(); + if (area.IsExternalLink) + { + stringBuilder.Append("["); + stringBuilder.Append(area.ExternalFileName); + stringBuilder.Append("]"); + } + stringBuilder.Append(area.SheetName); + stringBuilder.Append("!"); + stringBuilder.Append(CellsHelper.CellIndexToName(area.StartRow, area.StartColumn)); + if (area.IsArea) + { + stringBuilder.Append(":"); + stringBuilder.Append(CellsHelper.CellIndexToName(area.EndRow, area.EndColumn)); + } + Console.WriteLine(stringBuilder.ToString()); + } + workbook.Save(@"C:\Book2.xls"); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + Dim cells As Cells = workbook.Worksheets(0).Cells + cells("A1").Formula = "= B1 + SUM(B1:B10) + [Book1.xls]Sheet1!A1" + Dim areas As ReferredAreas = cells("A1").GetPrecedents() + For i As Integer = 0 To areas.Count - 1 + Dim area As ReferredArea = areas(i) + Dim stringBuilder As StringBuilder = New StringBuilder() + If (area.IsExternalLink) Then + stringBuilder.Append("[") + stringBuilder.Append(area.ExternalFileName) + stringBuilder.Append("]") + End If + stringBuilder.Append(area.SheetName) + stringBuilder.Append("!") + stringBuilder.Append(CellsHelper.CellIndexToName(area.StartRow, area.StartColumn)) + If (area.IsArea) Then + stringBuilder.Append(":") + stringBuilder.Append(CellsHelper.CellIndexToName(area.EndRow, area.EndColumn)) + End If + Console.WriteLine(stringBuilder.ToString()) + Next + workbook.Save("C:\Book2.xls") + + + + + + Get all cells which refer to the specific cell. + + Indicates whether check other worksheets + + + + Get all cells which will be updated when this cell is modified. + This method can only work after calling Workbook.CalculateFormula + with WorkbookSettings.CreateCalcChain of value true. + + + + + Indicates the cell's formula is and array formula + and it is the first cell of the array. + + + + + Gets the array range if the cell's formula is an array formula. + + + The array range. + + Only applies when the cell's formula is an array formula + + + + Indicates whether the cell formula is an array formula. + + + + + Indicates whether the cell formula is an array formula. + + + NOTE: This class is now obsolete. Instead, + please use Cell.IsArrayFormula to check whether the cell formula is an array formula. + This property will be removed 12 months later since May 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Indicates whether the cell formula is part of shared formula. + + + + + Indicates whether this cell is part of table formula. + + + + + Indicates whether this cell is part of table formula. + + + NOTE: This class is now obsolete. Instead, + please use Cell.IsTableFormula to check whether the cell formula is part of table formula. + This property will be removed 12 months later since May 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Sets dynamic array formula and make the formula spill into neighboring cells if possible. + + the formula expression + options to parse formula. + "Parse" option will be ignored and the formula will always be parsed immediately + whether calculate this dynamic array formula for those cells in the spilled range. + the range that the formula should spill into. + + + + Sets dynamic array formula and make the formula spill into neighboring cells if possible. + + the formula expression + options to parse formula. + "Parse" option will be ignored and the formula will always be parsed immediately + values for those cells with given dynamic array formula + + Whether calculate the spilled range for this dynamic array formula. + If the "values" parameter is not null and this flag is false, + then the spilled range's height will be values.Length and width will be values[0].Length. + + + whether calculate this dynamic array formula for those cells in the spilled range when "values" is null + or corresponding item in "values" for one cell is null. + + the range that the formula should spill into. + + + + Sets an array formula(legacy array formula entered via CTRL+SHIFT+ENTER in ms excel) to a range of cells. + + Array formula. + Number of rows to populate result of the array formula. + Number of columns to populate result of the array formula. + + + + Sets a formula to a range of cells. + + Shared formula. + Number of rows to populate the formula. + Number of columns to populate the formula. + + + + + + Remove array formula. + + True represents converting the array formula to normal formula. + + + + Sets an Add-In formula to the cell. + + Add-In file name. + Add-In function name. + + + [C#] + cells["h11"].SetAddInFormula("HRVSTTRK.xla", "=pct_overcut(F3:G3)"); + cells["h12"].SetAddInFormula("HRVSTTRK.xla", "=pct_overcut()"); + + [Visual Basic] + cells("h11").SetAddInFormula("HRVSTTRK.xla", "=pct_overcut(F3:G3)") + cells("h12").SetAddInFormula("HRVSTTRK.xla", "=pct_overcut()") + + + + Add-In file should be placed in the directory or sub-directory of Workbook Add-In library. + For example, file name can be "Eurotool.xla" or "solver\solver.xla". + NOTE: This class is now obsolete. Instead, + please use Cell.Formula/Cell.SetFormula() to set cell formula with the Add-In functions after registering it by WorksheetCollection.RegisterAddInFunction(). + This property will be removed 12 months later since January 2019. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Copies data from a source cell. + + Source object. + + + + Gets the value contained in this cell. + + Possible type: +

null,

Boolean,

DateTime,

Double,

Integer

String.

+ For int value, it may be returned as an Integer object or a Double object. + And there is no guarantee that the returned value will be kept as the same type of object always. +
+
+ + + Indicates if the cell's style is set. If return false, it means this cell has a default cell format. + + + + + Returns a Characters object that represents a range of characters within the cell text. + + The index of the start of the character. + The number of characters. + Characters object. + This method only works on cell with string value. + + + [C#] + excel.Worksheets[0].Cells["A1"].PutValue("Helloworld"); + excel.Worksheets[0].Cells["A1"].Characters(5, 5).Font.IsBold = true; + excel.Worksheets[0].Cells["A1"].Characters(5, 5).Font.Color = Color.Blue; + + [Visual Basic] + excel.Worksheets(0).Cells("A1").PutValue("Helloworld") + excel.Worksheets(0).Cells("A1").Characters(5, 5).Font.IsBold = True + excel.Worksheets(0).Cells("A1").Characters(5, 5).Font.Color = Color.Blue + + + + + + Indicates whether the cell string value is a rich text. + + + + + Returns all Characters objects + that represents a range of characters within the cell text. + + All Characters objects + + + + Returns all Characters objects + that represents a range of characters within the cell text. + + Indicates whether applying table style to the cell if the cell is in the table. + All Characters objects + + + + Sets rich text format of the cell. + + All Characters objects. + + + + Checks if a cell is part of a merged range or not. + + + + + Returns a object which represents a merged range. + + + object. Null if this cell is not merged. + + + + Gets the comment of this cell. + + + If there is no comment applies to the cell, returns null. + + + + + Gets and sets the html string which contains data and some formats in this cell. + + + + + Gets the html string which contains data and some formats in this cell. + + Indicates whether the value is compatible for html5 + + + + + + Returns a string represents the current Cell object. + + + + + + + Checks whether this object refers to the same cell with another. + + another object + true if two objects refers to the same cell. + + + + Serves as a hash function for a particular type. + + A hash code for current Cell object. + + + + Checks whether this object refers to the same cell with another cell object. + + another cell object + true if two cell objects refers to the same cell. + + + + Get the result of the conditional formatting. + + + Returns null if no conditional formatting is applied to this cell, + + + + + Gets the validation applied to this cell. + + + + + + + Gets the value of validation which applied to this cell. + + + + + + + Gets the table which contains this cell. + + + + + + + Represent an area of cells. + + + + + [C#] + + //Create Cell Area + CellArea ca = new CellArea(); + ca.StartRow = 0; + ca.EndRow = 0; + ca.StartColumn = 0; + ca.EndColumn = 0; + + [VB.NET] + + 'Create Cell Area + Dim ca As CellArea = New CellArea() + ca.StartRow = 0 + ca.EndRow = 0 + ca.StartColumn = 0 + ca.EndColumn = 0 + + + + + + + Gets or set the start row of this area. + + + + + Gets or set the end row of this area. + + + + + Gets or set the start column of this area. + + + + + Gets or set the end column of this area. + + + + + Internal use only. + + + + + + + + + Returns a string represents the current Worksheet object. + + + + + + + Creates a cell area. + + The start row. + The start column. + The end row. + The end column. + Return a . + + + + Creates a cell area. + + The top-left cell of the range. + The bottom-right cell of the range. + Return a . + + + + Encapsulates a collection of cell relevant objects, such as , , ...etc. + + + + + [C#] + + Workbook excel = new Workbook(); + Cells cells = excel.Worksheets[0].Cells; + + //Set default row height + cells.StandardHeight = 20; + //Set row height + cells.SetRowHeight(2, 20.5); + + //Set default colum width + cells.StandardWidth = 15; + //Set column width + cells.SetColumnWidth(3, 12.57); + + //Merge cells + cells.Merge(5, 4, 2, 2); + + //Import data + DataTable dt = new DataTable("Products"); + dt.Columns.Add("Product_ID",typeof(Int32)); + dt.Columns.Add("Product_Name",typeof(string)); + dt.Columns.Add("Units_In_Stock",typeof(Int32)); + DataRow dr = dt.NewRow(); + dr[0] = 1; + dr[1] = "Aniseed Syrup"; + dr[2] = 15; + dt.Rows.Add(dr); + dr = dt.NewRow(); + dr[0] = 2; + dr[1] = "Boston Crab Meat"; + dr[2] = 123; + dt.Rows.Add(dr); + cells.ImportDataTable(dt, true, 12, 12, 10, 10); + + //Export data + DataTable outDataTable = cells.ExportDataTable(12, 12, 10, 10); + + [Visual Basic] + + Dim excel as Workbook = new Workbook() + Dim cells as Cells = excel.Worksheets(0).Cells + + 'Set default row height + cells.StandardHeight = 20 + 'Set row height + cells.SetRowHeight(2, 20.5) + + 'Set default colum width + cells.StandardWidth = 15 + 'Set column width + cells.SetColumnWidth(3, 12.57) + + 'Merge cells + cells.Merge(5, 4, 2, 2) + + 'Import data + Dim dt as DataTable = new DataTable("Employee") + dt.Columns.Add("Employee_ID",typeof(Int32)) + dt.Columns.Add("Employee_Name",typeof(string)) + dt.Columns.Add("Gender",typeof(string)) + Dim dr as DataRow = dt.NewRow() + dr(0) = 1 + dr(1) = "John Smith" + dr(2) = "Male" + dt.Rows.Add(dr) + dr = dt.NewRow() + dr(0) = 2 + dr(1) = "Mary Miller" + dr(2) = "Female" + dt.Rows.Add(dr) + cells.ImportDataTable(dt, true, 12, 12, 10, 10) + + 'Export data + Dim outDataTable as DataTable = cells.ExportDataTable(12, 12, 10, 10) + + + + + + Gets the list of fields of ods. + + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources. + + + + + Gets the total count of instantiated Cell objects. + + + + + Gets the total count of instantiated Cell objects. + + + + + Gets item within the worksheet + + The zero based index of the element. + The element at the specified index. + NOTE: This member is now obsolete. + Instead, please use Cells.GetEnumerator() method to iterate all cells in this worksheet. + This property will be removed 12 months later since February 2015. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets the cells enumerator. + + The cells enumerator + When traversing elements by the returned Enumerator, the cells collection + should not be modified(such as operations that will cause new Cell/Row be instantiated or existing Cell/Row be deleted). + Otherwise the enumerator may not be able to traverse all cells correctly(some elements may be traversed repeatedly or skipped). + + + + Gets the rows enumerator. + + The rows enumerator. + + + + Gets the collection of objects that represents the individual rows in this worksheet. + + + + + Gets the collection of merged cells. + + In this collection, each item is a structure which represents an area of merged cells. + + + + Gets the element or null at the specified cell row index and column index. + + Row index + Column index + Return Cell object if a Cell object exists. + Return null if the cell does not exist. + + + + + Gets the element at the specified cell row index. + + Row index + + If the row object does exist return Row object, otherwise return null. + + + + + Gets the element or null at the specified cell row index and column index. + + Row index + Column index + Return Cell object if a Cell object exists. + Return null if the cell does not exist. + + + + + Gets the element or at the specified cell row index. + + Row index + + If the row object does exist return Row object, otherwise return null. + + + + + Gets the element or null at the specified column index. + + The column index. + The Column object. + + + + Checks whether a row at given index is hidden. + + row index + true if the row is hidden + + + + Checks whether a column at given index is hidden. + + column index + true if the column is hidden. + + + + Adds a range object reference to cells + + The range object will be contained in the cells + + + + Creates a object from a range of cells. + + Upper left cell name. + Lower right cell name. + A object + + + + Creates a object from a range of cells. + + First row of this range + First column of this range + Number of rows + Number of columns + A object + + + + Creates a object from an address of the range. + + The address of the range. + A object + + + + Creates a object from rows of cells or columns of cells. + + First row index or first column index, zero based. + Total number of rows or columns, one based. + True - Range created from columns of cells. False - Range created from rows of cells. + A object. + + + + Gets the element at the specified cell row index and column index. + + Row index. + Column index. + The object. + + + [C#] + + Cells cells = excel.Worksheets[0].Cells; + Cell cell = cells[0, 0]; //Gets the cell at "A1" + + [Visual Basic] + + Dim cells As Cells = excel.Worksheets(0).Cells + Dim cell As Cell = cells(0,0) 'Gets the cell at "A1" + + + + + + Gets the element at the specified cell name. + + Cell name,including its column letter and row number, for example A5. + A object + + + [C#] + + Cells cells = excel.Worksheets[0].Cells; + Cell cell = cells["A1"]; //Gets the cell at "A1" + + [Visual Basic] + + Dim cells As Cells = excel.Worksheets(0).Cells + Dim cell As Cell = cells("A1") 'Gets the cell at "A1" + + + + + + Gets or sets whether the cells data model should support Multi-Thread reading. + Default value of this property is false. + If there are multiple threads to read Row/Cell objects in this collection concurrently, + this property should be set as true, otherwise unexpected result may be produced. + Supporting Multi-Thread reading may degrade the performance for accessing Row/Cell objects from this collection. + + + + + Gets or sets the memory usage option for this cells. + + + + + Clears all cell and row objects. + + + + + Gets and sets the default style. + + + + + Gets or sets the default column width in the worksheet, in unit of inches. + + + + + Gets or sets the default column width in the worksheet, in unit of pixels. + + + + + Gets or sets the default column width in the worksheet, in unit of characters. + + + + + Gets or sets the default row height in this worksheet, in unit of points. + + + + + Gets or sets the default row height in this worksheet, in unit of pixels. + + + + + Exports data in the collection to a object. + + + + [C#] + + + string designerFile = MapPath("Designer") + "\\List.xls"; + Workbook excel = new Workbook(designerFile); + Worksheet sheet = excel.Worksheets[0]; + DataTable dt = sheet.Cells.ExportDataTable(6, 1, 69, 4); + this.DataGrid1.DataSource = dt; + this.DataGrid1.DataBind(); + + [Visual Basic] + + + Dim designerFile As String = MapPath("Designer") + "\List.xls" + Dim excel As excel = New excel(designerFile) + Dim sheet As Worksheet = excel.Worksheets(0) + Dim dt As DataTable = sheet.Cells.ExportDataTable(6, 1, 69, 4) + Me.DataGrid1.DataSource = dt + Me.DataGrid1.DataBind() + + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be imported. + Number of columns to be imported. + Exported object. + + If you use this method to export a block of data, please be sure that the data in a column + should be the same data type. Otherwise, use the method instead. + + + + + Exports data in the collection to a object. + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether the data in the first row are exported to the column name of the DataTable. + Exported object. + + + + Exports data in the collection to a object. + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be imported. + Number of columns to be imported. + Exported object. + All data in the collection are converted to strings. + + + + Exports data in the collection to a object. + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether the data in the first row are exported to the column name of the DataTable. + Exported object. + All data in the collection are converted to strings. + + + + Exports data in the collection to a object. + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be imported. + Number of columns to be imported. + All export table options + Exported object. + + + + Import data from custom data table. + + The custom data table. + First row index. + First column index. + The import options + + + + + + Import data from custom data table. + + The object to be imported. + First row index. + First column index. + The import options + Total number of rows imported. + + + + Import data from data view. + + The object to be imported. + First row index. + First column index. + The import options + Total number of rows imported. + + + + Import data from data view. + + The object to be imported. + First row index. + First column index. + The import options + Total number of rows imported. + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(IDataReader,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a object into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + The name of start cell to insert the DataTable, such as "A2". + Total number of rows imported + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a object into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + The row number of the first cell to import. + The column number of the first cell to import. + Indicates whether extra rows are added to fit data. + Indicates if this method will try to convert string to number. + Total number of rows imported + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a object into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + The row number of the first cell to import. + The column number of the first cell to import. + Total number of rows imported + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a object into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + The row number of the first cell to import. + The column number of the first cell to import. + Indicates whether extra rows are added to fit data. + Total number of rows imported + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + + + + [C#] + + DataTable dt = new DataTable("Employee"); + dt.Columns.Add("Employee_ID",typeof(Int32)); + dt.Columns.Add("Employee_Name",typeof(string)); + dt.Columns.Add("Gender",typeof(string)); + DataRow dr = dt.NewRow(); + dr[0] = 1; + dr[1] = "John Smith"; + dr[2] = "Male"; + dt.Rows.Add(dr); + dr = dt.NewRow(); + dr[0] = 2; + dr[1] = "Mary Miller"; + dr[2] = "Female"; + dt.Rows.Add(dr); + cells.ImportDataTable(dt, true, 12, 12, 10, 10); + + [Visual Basic] + + Dim dt As DataTable = New DataTable("Employee") + dt.Columns.Add("Employee_ID",Type.GetType(Int32)) + dt.Columns.Add("Employee_Name",Type.GetType(String)) + dt.Columns.Add("Gender",Type.GetType(String)) + Dim dr As DataRow = dt.NewRow() + dr(0) = 1 + dr(1) = "John Smith" + dr(2) = "Male" + dt.Rows.Add(dr) + dr = dt.NewRow() + dr(0) = 2 + dr(1) = "Mary Miller" + dr(2) = "Female" + dt.Rows.Add(dr) + cells.ImportDataTable(dt, True, 12, 12, 10, 10) + + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Total number of rows imported + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports data from a object. + + The object which contains data. + The row number of the first cell to import in. + The column number of the first cell to import in. + Total number of rows imported. + + + + Imports data from a object. + + The object which contains data. + The row number of the first cell to import in. + The column number of the first cell to import in. + The options of importing table. + Total number of rows imported. + + + + Imports data from a object. + + The object which contains data. + + Indicates whether the field name of the data reader will be imported to the first row. + + The row number of the first cell to import in. + The column number of the first cell to import in. + Indicates whether extra rows are added to fit data. + Date format string for cells. + Indicates if this method will try to convert string to number. + Total number of rows imported. + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(IDataReader, int, int,ImportTableOptions) method. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether extra rows are added to fit data. + Date format string for cells. + Total number of rows imported. + This method automatically format date time values. + However, if the DateTable is very huge, this method may slow down the program. + In this case, you'd better format the cell manually. + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether extra rows are added to fit data. + Date format string for cells. + Indicates if this method will try to convert string to number. + Total number of rows imported. + This method automatically format date time values. + However, if the DateTable is very huge, this method may slow down the program. + In this case, you'd better format the cell manually. + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a DataRow into the Excel file. + + DataRow object. + Row index. + First column index. + + + + Imports a into a worksheet. + + The object to be imported. + + Indicates whether the field name of the datatable will be imported to the first row. + Default is true. + + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether extra rows are added to fit data. + Total number of rows imported. + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataTable,int,int,ImportTableOptions) method, instead. + This property will be removed 12 months later since December 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a two-dimension array of data into a worksheet. + + Two-dimension data array. + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Imports a two-dimension array of data into a worksheet. + + Two-dimension data array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Indicates if this method will try to convert string to number. + + + + Imports a two-dimension array of data into a worksheet. + + Two-dimension data array. + Two-dimension data style. + The row number of the first cell to import in. + The column number of the first cell to import in. + Indicates if this method will try to convert string to number. + + + + Imports a two-dimension array of data into a worksheet. + + Two-dimension data array. + Two-dimension data style. + The row number of the first cell to import in. + The column number of the first cell to import in. + Options for converting string values + + + + Imports an array of data into a worksheet. + + Data array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + + + + Imports an arraylist of data into a worksheet. + + Data arraylist. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + + + + Imports an array of data into a worksheet. + + Data array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + Skipped number of rows or columns. + + + + Imports a two-dimension array of string into a worksheet. + + Two-dimension string array. + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Imports an array of formula into a worksheet. + + Formula array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + + + + Imports an array of string into a worksheet. + + String array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + + + + Imports a two-dimension array of integer into a worksheet. + + Two-dimension integer array. + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Imports an array of integer into a worksheet. + + Integer array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + + + + Imports a two-dimension array of double into a worksheet. + + Two-dimension double array. + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Imports an array of double into a worksheet. + + Double array. + The row number of the first cell to import in. + The column number of the first cell to import in. + Specifies to import data vertically or horizontally. + + + + Splits the text in the column to columns. + + The row index. + The column index. + The number of rows. + The split options. + + + + Import a CSV file to the cells. + + The CSV file name. + The splitter + Whether the string in text file is converted to numeric data. + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Import a CSV file to the cells. + + The CSV file stream. + The splitter + Whether the string in text file is converted to numeric data. + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Import a CSV file to the cells. + + The CSV file name. + The load options for reading text file + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Import a CSV file to the cells. + + The CSV file stream. + The load options for reading text file + The row number of the first cell to import in. + The column number of the first cell to import in. + + + + Gets or sets a value indicating whether all worksheet values are preserved as strings. + Default is false. + + + + + Merges a specified range of cells into a single cell. + + First row of this range(zero based) + First column of this range(zero based) + Number of rows(one based) + Number of columns(one based) + + Reference the merged cell via the address of the upper-left cell in the range. + + + + + Merges a specified range of cells into a single cell. + + First row of this range(zero based) + First column of this range(zero based) + Number of rows(one based) + Number of columns(one based) + Merge conflict merged ranges. + + Reference the merged cell via the address of the upper-left cell in the range. + If mergeConflict is true and the merged range conflicts with other merged cells, + other merged cells will be automatically removed. + + + + + Merges a specified range of cells into a single cell. + + First row of this range(zero based) + First column of this range(zero based) + Number of rows(one based) + Number of columns(one based) + Indicates whether check the merged cells intersects other merged cells + Merge conflict merged ranges. + + Reference the merged cell via the address of the upper-left cell in the range. + If mergeConflict is true and the merged range conflicts with other merged cells, + other merged cells will be automatically removed. + + + + + Unmerges a specified range of merged cells. + + First row of this range(zero based) + First column of this range(zero based) + Number of rows(one based) + Number of columns(one based) + + + + Clears all merged ranges. + + + + + Hides a row. + + Row index. + + + + Unhides a row. + + Row index. + Row height. The row's height will be changed only when the row is hidden and given height value is positive. + + + + Hides multiple rows. + + The row index. + The row number. + + + + Unhides the hidden rows. + + The row index. + The row number. + Row height. The row's height will be changed only when the row is hidden and given height value is positive. + + + + Sets row height in unit of pixels. + + Row index. + Number of pixels. + + + + Sets row height in unit of inches. + + Row index. + Number of inches. It should be between 0 and 409.5/72. + + + + Sets the height of the specified row. + + Row index. + Height of row.In unit of point It should be between 0 and 409.5. + + + + Hides a column. + + Column index. + + + + Unhides a column + + Column index. + Column width. + + + + Hide multiple columns. + + Column index. + Column number. + + + + Unhide multiple columns. + + Column index. + Column number + Column width. + + Only applies the column width to the hidden columns. + + + + + Gets the height of a specified row. + + Row index + Height of row + + + + Gets the height of a specified row. + + Row index + Height of row + + + + Gets the height of a specified row in unit of pixel. + + Row index + Height of row + + + + Gets the height of a specified row in unit of inches. + + Row index + Height of row + + + + Gets the height of a specified row in unit of inches. + + Row index + Height of row + + + + Sets column width in unit of pixels in normal view. + + Column index. + Number of pixels. + + + + Sets column width in unit of inches in normal view. + + Column index. + Number of inches. + + + + Sets the width of the specified column in normal view. + + Column index. + Width of column.Column width must be between 0 and 255. + To hide a column, sets column width to zero. + + + + Gets the width of the specified column in normal view, in units of pixel. + + Column index + Width of column in normal view. + + + + Gets the width of the specified column in normal view, in units of inches. + + Column index + Width of column + + + + Gets the width of the specified column in normal view + + Column index + Width of column + + + + Get the width in different view type. + + The column index. + the column width in unit of pixels + + + + Sets the width of the column in different view. + + The column index. + The width in unit of pixels. + + If the current view type is , the column's width is same as printed width. + + + + + Minimum row index of cell which contains data or style. + + + + + Maximum row index of cell which contains data or style. + + + Return -1 if there is no cell which contains data or style in the worksheet. + + + + + Minimum column index of cell which contains data or style. + + + + + Maximum column index of cell which contains data or style. + + + Return -1 if there is no cell. + + + + + Minimum row index of cell which contains data. + + + + + Maximum row index of cell which contains data. + + + Return -1 if there is no cell which contains data. + + + + + Minimum column index of cell which contains data. + + + + + Maximum column index of cell which contains data. + + + Return -1 if there is not cell which contains data. + Don't call this property repeatedly. This property will iterate all cells in a worksheet. + + + + Gets the last row index of cell which contains data in the specified column. + + Column index. + last row index. + + + + Indicates that row height and default font height matches + + + + + Indicates whether the row is default hidden. + + + + + Gets the collection of objects that represents the individual columns in this worksheet. + + + + + Applies formats for a whole column. + + The column index. + The style object which will be applied. + Flags which indicates applied formatting properties. + + + + Applies formats for a whole row. + + The row index. + The style object which will be applied. + Flags which indicates applied formatting properties. + + + + Applies formats for a whole worksheet. + + The style object which will be applied. + Flags which indicates applied formatting properties. + + + + Copies data and formats of a whole column. + + Source Cells object contains data and formats to copy. + Source column index. + Destination column index. + The copied column number. + the options of pasting. + + + + Copies data and formats of a whole column. + + Source Cells object contains data and formats to copy. + Source column index. + Destination column index. + + + + Copies data and formats of a whole column. + + Source Cells object contains data and formats to copy. + Source column index. + Destination column index. + The copied column number. + + + + Copies data and formats of the whole columns. + + Source Cells object contains data and formats to copy. + Source column index. + The number of the source columns. + Destination column index. + The number of the destination columns. + + + + Copies data and formats of a whole row. + + Source Cells object contains data and formats to copy. + Source row index. + Destination row index. + + + + Copies data and formats of some whole rows. + + Source Cells object contains data and formats to copy. + Source row index. + Destination row index. + The copied row number. + + + + Copies data and formats of some whole rows. + + Source Cells object contains data and formats to copy. + Source row index. + Destination row index. + The copied row number. + The copy options. + + + + Copies data and formats of some whole rows. + + Source Cells object contains data and formats to copy. + Source row index. + Destination row index. + The copied row number. + The copy options. + the options of pasting. + + + + Gets the outline level (zero-based) of the row. + + The row index. + The outline level (zero-based) of the row. + If the row is not grouped, returns zero. + + + + Gets the outline level (zero-based) of the column. + + The column index + The outline level of the column + If the column is not grouped, returns zero. + + + + Gets the max grouped column outline level (zero-based). + + The max grouped column outline level (zero-based) + + + + Gets the max grouped row outline level (zero-based). + + The max grouped row outline level (zero-based) + + + + Uncollapses the grouped rows/columns. + + True, uncollapses the grouped rows. + The row/column index + + + + Collapses the grouped rows/columns. + + True, collapse the grouped rows. + The row/column index + + + + Ungroups columns. + + The first column index to be ungrouped. + The last column index to be ungrouped. + + + + Groups columns. + + The first column index to be grouped. + The last column index to be grouped. + + + + Groups columns. + + The first column index to be grouped. + The last column index to be grouped. + Specifies if the grouped columns are hidden. + + + + Ungroups rows. + + The first row index to be ungrouped. + The last row index to be ungrouped. + True, removes all grouped info.Otherwise, remove the outer group info. + + + + Ungroups rows. + + The first row index to be ungrouped. + The last row index to be ungrouped. + + Only removes outer group info. + + + + + Groups rows. + + The first row index to be grouped. + The last row index to be grouped. + Specifies if the grouped columns are hidden. + + + + Groups rows. + + The first row index to be grouped. + The last row index to be grouped. + + + + Deletes a column. + + Column index. + Indicates if update references in other worksheets. + + + + Deletes a column. + + Column index. + + + + Deletes several columns. + + Column index. + Number of columns to be deleted. + Indicates if update references in other worksheets. + + + + Check whether the range could be deleted. + + The start row index of the range. + The start column index of the range. + The number of the rows in the range. + The number of the columns in the range. + + + + + + Deletes several rows. + + The first row index to be deleted. + Number of rows to be deleted. + + If the deleted range contains the top part(not whole) of the table(ListObject), + the ranged could not be deleted and nothing will be done.It works as MS Excel. + + + + + Deletes a row. + + Row index. + + + + Deletes multiple rows in the worksheet. + + Row index. + Number of rows to be deleted. + Indicates if update references in other worksheets. + + + + + + Delete all blank columns which do not contain any data. + + + + + Delete all blank columns which do not contain any data. + + The options of deleting range. + + + + Checks whether given column is blank(does not contain any data). + + the column index + true if given column does not contain any data + + + + Delete all blank rows which do not contain any data. + + + + + Delete all blank rows which do not contain any data. + + The options of deleting range. + + + + Inserts some columns into the worksheet. + + Column index. + The number of columns. + + + + Inserts some columns into the worksheet. + + Column index. + The number of columns. + Indicates if references in other worksheets will be updated. + + + + Inserts a new column into the worksheet. + + Column index. + Indicates if references in other worksheets will be updated. + + + + Inserts a new column into the worksheet. + + Column index. + + + + Inserts multiple rows into the worksheet. + + Row index. + Number of rows to be inserted. + Indicates if references in other worksheets will be updated. + + + + Inserts multiple rows into the worksheet. + + Row index. + Number of rows to be inserted. + Indicates if references in other worksheets will be updated. + + + + Inserts multiple rows into the worksheet. + + Row index. + Number of rows to be inserted. + + + + Inserts a new row into the worksheet. + + Row index. + + + + Gets the collection of objects created at run time. + + + + + Clears contents and formatting of a range. + + Range to be cleared. + + + + Clears contents and formatting of a range. + + Start row index. + Start column index. + End row index. + End column index. + + + + Clears contents of a range. + + Range to be cleared. + + + + Clears contents of a range. + + Start row index. + Start column index. + End row index. + End column index. + + + + Clears formatting of a range. + + Range to be cleared. + + + + Clears formatting of a range. + + Start row index. + Start column index. + End row index. + End column index. + + + + Gets the last cell in this worksheet. + + + + + Link to a xml map. + + name of xml map + row of the destination cell + column of the destination cell + path of xml element in xml map + e.g. A xml map element structure: + + -RootElement + |-Attribute1 + |-SubElement + |-Attribute2 + |-Attribute3 + + To link "Attribute1", path is "/RootElement/Attribute1" + To link "Attribute2", path is "/RootElement/SubElement/Attribute2" + To link whole "SubElement", path is "/RootElement/SubElement" + + + + Gets the max range which includes data, merged cells and shapes. + + + Reutrns null if the worksheet is empty since Aspose.Cells 21.5.2. + + + + + Gets the first cell in this worksheet. + + + + + Imports a into a worksheet. + + The object to be imported. + The row number of the first cell to import in. + The column number of the first cell to import in. + Total number of rows imported + + + + Imports a into a worksheet. + + The object to be imported. + The row number of the first cell to import in. + The column number of the first cell to import in. + Indicates whether extra rows are added to fit data. + Total number of rows imported + + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataView,int,int,ImportTableOptions) method. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Total number of rows imported + + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataView,int,int,ImportTableOptions) method. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether extra rows are added to fit data. + Total number of rows imported + + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataView,int,int,ImportTableOptions) method. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + + Indicates whether the field name of the data view will be imported to the first row. + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether extra rows are added to fit data. + Total number of rows imported + + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataView,int,int,ImportTableOptions) method. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + + Indicates whether the field name of the data view will be imported to the first row. + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Number of columns to be imported. + Indicates whether extra rows are added to fit data. + Number format string for cells. + Total number of rows imported + + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataView,int,int,ImportTableOptions) method. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Imports a into a worksheet. + + The object to be imported. + + Indicates whether the field name of the data view will be imported to the first row. + The row number of the first cell to import in. + The column number of the first cell to import in. + Indicates whether extra rows are added to fit data. + Total number of rows imported + + NOTE: This member is now obsolete. Instead, + please use Cells.ImportData(DataView,int,int,ImportTableOptions) method. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Finds the cell with the input string. + + The formula to search for. + Previous cell with the same formula. This parameter can be set to null if searching from the start. + Cell object. + Returns null (Nothing) if no cell is found. + NOTE: This member is now obsolete. Instead, + please use Cells.Find(object,Cell,FindOptions) method with LookInType as LookInType.OnlyFormulas + and LookAtType as LookAtType.EntireContent. + This member will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Finds the cell with formula which contains the input string. + + The formula to search for. + Previous cell with the same formula. This parameter can be set to null if searching from the start. + Cell object. + Returns null (Nothing) if no cell is found. + NOTE: This member is now obsolete. Instead, + please use Cells.Find(object,Cell,FindOptions) method with LookInType as LookInType.OnlyFormulas + and LookAtType as LookAtType.Contains. + This member will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Finds the cell containing with the input object. + + The object to search for. + The type should be int,double,DateTime,string,bool. + + Previous cell with the same object. + This parameter can be set to null if searching from the start. + Cell object. + Returns null (Nothing) if no cell is found. + + + + Finds the cell containing with the input object. + + The object to search for. + The type should be int,double,DateTime,string,bool. + + Previous cell with the same object. + This parameter can be set to null if searching from the start. + Find options + Cell object. + Returns null (Nothing) if no cell is found. + + + + Gets the last cell in this row. + + Row index. + Cell object. + + + + Gets the last cell in this column. + + Column index. + Cell object. + + + + Gets the last cell with maximum column index in this range. + + Start row index. + End row index. + Start column index. + End column index. + Cell object. + + + + Gets the last cell with maximum row index in this range. + + Start row index. + End row index. + Start column index. + End column index. + Cell object. + + + + Moves the range. + + The range which should be moved. + The dest row. + The dest column. + + + + Insert cut range. + + The cut range. + The row. + The column. + The shift type . + + + + Inserts a range of cells and shift cells according to the shift option. + + Shift area. + Number of rows or columns to be inserted. + Shift cells option. + Indicates if update references in other worksheets. + + + + Inserts a range of cells and shift cells according to the shift option. + + Shift area. + Shift cells option. + + + + Inserts a range of cells and shift cells according to the shift option. + + Shift area. + Number of rows or columns to be inserted. + Shift cells option. + + + + Deletes a range of cells and shift cells according to the shift option. + + Start row index. + Start column index. + End row index. + End column index. + Shift cells option. + + + + Exports data in the collection to a two-dimension array object. + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be exported + Number of columns to be exported + Exported cell value array object. + + + + Exports cell value type in the collection to a two-dimension array object. + + The row number of the first cell to export out. + The column number of the first cell to export out. + Number of rows to be exported. + Number of columns to be exported. + Exported array object. + + + + Imports custom objects. + + The custom object + The property names.If it is null,we will import all properties of the object. + + Indicates whether the property name will be imported to the first row. + + The row number of the first cell to import in. + The column number of the first cell to import in. + Number of rows to be imported. + Indicates whether extra rows are added to fit data. + Date format string for cells. + Indicates if this method will try to convert string to number. + Total number of rows imported. + The custom objects should be the same type. + + + + Imports custom objects. + + The custom object + The row number of the first cell to import in. + The column number of the first cell to import in. + The import options. + Total number of rows imported. + The custom objects should be the same type. + + + + Retrieves subtotals setting of the range. + + The range + + + + + + Creates subtotals for the range. + + The range + The field to group by, as a zero-based integer offset + The subtotal function. + An array of zero-based field offsets, indicating the fields to which the subtotals are added. + + + + Creates subtotals for the range. + + The range + The field to group by, as a zero-based integer offset + The subtotal function. + An array of zero-based field offsets, indicating the fields to which the subtotals are added. + Indicates whether replace the current subtotals + Indicates whether add page break between groups + Indicates whether add summary below data. + + + + Removes all formula and replaces with the value of the formula. + + + + + Removes duplicate rows in the sheet. + + + + + Removes duplicate values in the range. + + The start row. + The start column + The end row index. + The end column index. + + + + Removes duplicate data of the range. + + The start row. + The start column + The end row index. + The end column index. + Indicates whether the range contains headers. + The column offsets. + + + + Converts string data in cells to numeric value if possible. + + + + + Get all cells which refer to the specific cell. + + Indicates whether check other worksheets + The row index. + The column index. + + + + + + Get the style of given cell. + + row index + column + the style of given cell. + + + + The exception that is thrown when Aspose.Cells specified error occurs. + + + + + Represents custom exception code. + + + + + Utility for instantiating classes of Cells model. + + + + + Creates a new style. + + Returns a style object. + + + + Cache options for data access. Can be combined with | operator for multiple options together. + + + For some features, accessing large dataset requires a lot of repeated and complicated operations + such as search, calculation, ...etc and those operations will take a lot of extra time. + For common situations, all dependent data remains unchanged during the access, so some caches can be built and used to + improve the access performance. + For this purpose, we provide this API so that user can specify which kind of data access needs + to be optimized by possible caching mechanism. +

+ Please note, for different options, different data set may be required to be "read-only". + And performance of accessing data depends on many aspects, the use of caching mechanism + does not guarantee that performance will be improved. For some situations, + such as the dataset to be accessed is small, using cache may cause even more time because + caching itself also needs certain extra time. +
+
+ + + No cache for any data access. + + + + + Apply all possible optimizations for all kinds of data access in the workbook. + All settings and data should not be changed during the optimized access. + + + + + Apply possible optimization for getting object(such as Shape)'s position and size. + Row height and column width settings should not be changed during the optimized access. + + + + + Apply possible optimization for getting cells' values. + Cells data(data and settings of Cell, Row) should not be changed during + the optimized access, no new Cell/Row objects should be created either(such as + by ). + + + + + Apply possible optimization for getting display-related results of + cells(, , , etc.). + Cells data and style-related objects(Cell/Row/Column styles, column width, etc.) should not be changed + during the optimized access. + + + + + Apply possible optimization for getting formulas. + All data and settings which may affect the formula expression(Worksheet's name, Name's text, + table's column, etc.) should not be changed during the optimized access. + + + + + Apply possible optimization for setting formulas. + All data and settings which may affect the formula expression(Worksheet's name, Name's text, + table's column, etc.) should not be changed during the optimized access. + + + + + Apply possible optimization for calculating formulas. + Cells data should not be changed during the optimized access, none new objects(Cell, Row, etc.) + should be created either(such as by ). + + + + + Apply possible optimization for getting formatting result of conditional formattings. + All data and settings which may affect the result of conditional formattings(settings of + conditional formattings, dependent cell values, etc.) should not be changed during the optimized access. + + + + + Apply possible optimization for getting validation result. + All data and settings which may affect the result of validation(settings of the validation, + dependent cell values, etc.) should not be changed during the optimized access. + + + + + Memory usage options. + + + + + Default option for cells model. + + This option is applied for all versions. + + + + Memory performance preferrable. + With this option the data will be held in compact format so for common scenarios it may give lower memory cost. + However, this option also may degrade R/W performance a bit in some special cases. + + This option is available since v 8.0.0. + + + + Specifies how to apply style for the value of the cell. + + + + + Not formatted. + + + + + Only formatted with the cell's original style. + + + + + Formatted with the cell's displayed style. + + + + + Specifies a cell value type. + + + + + Cell value is boolean. + + + + + Cell value is datetime. + + + + + Cell contains error value + + + + + Blank cell. + + + + + Cell value is numeric. + + + + + Cell value is string. + + + + + Cell value type is unknown. + + + + + Represents Cell Watch Item in the 'watch window'. + + + + + Gets and sets the row of the cell. + + + + + Gets and sets the column of the cell. + + + + + Gets and sets the name of the cell. + + + + + Represents the collection of cells on this worksheet being watched in the 'watch window'. + + + + + Adds with row and column. + + The row index. + The column index. + Returns the position of this item in the collection. + + + + Adds + + + + + + + + + Gets and sets by index. + + The index. + + + + + + Gets and sets by the name of the cell. + + The name of the cell. + + + + + + PdfBookmarkEntry is an entry in pdf bookmark. + if Text property of current instance is null or "", + current instance will be hidden and children will be inserted on current level. + + + + [C#] + Workbook workbook = new Workbook(); + workbook.Worksheets.Add(); + workbook.Worksheets.Add(); + Cell cellInPage1 = workbook.Worksheets[0].Cells["A0"]; + Cell cellInPage2 = workbook.Worksheets[1].Cells["A0"]; + Cell cellInPage3 = workbook.Worksheets[2].Cells["A0"]; + cellInPage1.PutValue("page1"); + cellInPage2.PutValue("page2"); + cellInPage3.PutValue("page3"); + + PdfBookmarkEntry pbeRoot = new PdfBookmarkEntry(); + pbeRoot.Text = "root"; // if pbeRoot.Text = null, all children of pbeRoot will be inserted on the top level in the bookmark. + pbeRoot.Destination = cellInPage1; + pbeRoot.SubEntry = new ArrayList(); + pbeRoot.IsOpen = false; + + PdfBookmarkEntry subPbe1 = new PdfBookmarkEntry(); + subPbe1.Text = "section1"; + subPbe1.Destination = cellInPage2; + + PdfBookmarkEntry subPbe2 = new PdfBookmarkEntry(); + subPbe2.Text = "section2"; + subPbe2.Destination = cellInPage3; + + pbeRoot.SubEntry.Add(subPbe1); + pbeRoot.SubEntry.Add(subPbe2); + + workbook.SaveOptions.PdfBookmark = pbeRoot; + workbook.Save("c:\\Test.pdf"); + + [VB] + Dim workbook As Workbook = New Workbook + workbook.Worksheets.Add("sheet2") + workbook.Worksheets.Add("sheet3") + + Dim cells As Cells = workbook.Worksheets(0).Cells + Dim cellInPage1 As Cell = cells("A0") + cellInPage1.PutValue("Page1") + + cells = workbook.Worksheets(1).Cells + Dim cellInPage2 As Cell = cells("A0") + cellInPage2.PutValue("Page2") + + cells = workbook.Worksheets(2).Cells + Dim cellInPage3 As Cell = cells("A0") + cellInPage3.PutValue("Page3") + + Dim pbeRoot As PdfBookmarkEntry = New PdfBookmarkEntry() + pbeRoot.Text = "root" + pbeRoot.Destination = cellInPage1 + pbeRoot.SubEntry = New ArrayList + pbeRoot.IsOpen = False + + Dim subPbe1 As PdfBookmarkEntry = New PdfBookmarkEntry() + subPbe1.Text = "section1" + subPbe1.Destination = cellInPage2 + + Dim subPbe2 As PdfBookmarkEntry = New PdfBookmarkEntry() + subPbe2.Text = "section2" + subPbe2.Destination = cellInPage3 + + pbeRoot.SubEntry.Add(subPbe1) + pbeRoot.SubEntry.Add(subPbe2) + + workbook.SaveOptions.PdfBookmark = pbeRoot + workbook.Save("c:\\Test.pdf") + + + + + + Title of a bookmark. + + + + + The cell to which the bookmark link. + + + + + Gets or sets name of destination. + + + If destination name is set, the destination will be defined as a named destination with this name. + + + + + SubEntry of a bookmark. + + + + + When this property is true, the bookmarkentry will expand, otherwise it will collapse. + + + + + When this property is true, the bookmarkentry will collapse, otherwise it will expand. + + + + + Specifies the way are exported to PDF file. + + + + + No custom properties are exported. + + + + + Custom properties are exported as entries in Info dictionary. + + + Custom properties with the following names are not exported: + "Title", "Author", "Subject", "Keywords", "Creator", "Producer", "CreationDate", "ModDate", "Trapped". + + + + + Enumerates Bit Depth Type for tiff image. + + + + + Default value, not set value. + + + + + 1 bit per pixel + + + + + 84 bits per pixel + + + + + 8 bits per pixel + + + + + 24 bits per pixel + + + + + 32 bits per pixel + + + + + DrawObject will be initialized and returned when rendering. + + + + + Indicates the Cell object when rendering. + All properties of cell can be accessed. + + + + + Indicates the Shape object when rendering. + All properties of shape can be accessed. + + + + + Indicates image bytes of rendered Chart, Shape when rendering. + + + + + Indicates the type of DrawObject. + + + + + Indicates the page index of DrawObject. + Page index is based on zero. + One Sheet contains several pages when rendering. + + + + + Indicates total pages in current rendering. + + + + + Indicates current sheet index of DrawObject. + + + + + Indicate Cell or Image of DrawObject. + + + + + Indicate DrawObject is an Image + + + + + indicate DrawObject is an Cell + + + + + Interface to get DrawObject and Bound when rendering. + + + + + Implements this interface to get DrawObject and Bound when rendering. + + DrawObject will be initialized and returned when rendering + Left of DrawObject + Top of DrawObject + Width of DrawObject + Height of DrawObject + + + + Allows to specify options when rendering worksheet to images, printing worksheet or rendering chart to image. + + + + + [C#] + + //Set Image Or Print Options + ImageOrPrintOptions options = new ImageOrPrintOptions(); + + //set Horizontal resolution + options.HorizontalResolution = 200; + + //set Vertica; Resolution + options.VerticalResolution = 300; + + //Instantiate Workbook + Workbook book = new Workbook(@"c:\test.xls"); + + //Save chart as Image using ImageOrPrint Options + Bitmap chartObject = book.Worksheets[0].Charts[0].ToImage(options); + + [VB.NET] + + 'Set Image Or Print Options + Dim options As New ImageOrPrintOptions() + + 'set Horizontal resolution + options.HorizontalResolution = 200 + + 'set Vertica; Resolution + options.VerticalResolution = 300 + + 'Instantiate Workbook + Dim book As New Workbook("c:\test.xls") + + 'Save chart as Image using ImageOrPrint Options + Dim chartObject As Bitmap = book.Worksheets(0).Charts(0).ToImage(options) + + + + + + Gets or sets the output file format type + Support Tiff/XPS + + + + + Client can special output to printer when print each page using this EventHandler + + + + + Client can control page setting of printer when print each page using this EventHandler + + + + + If PrintWithStatusDialog = true , there will be a dialog that shows current print status. + else no such dialog will show. + + + + + Gets or sets the horizontal resolution for generated images, in dots per inch. + Applies generating image method except Emf format images. + + + The default value is 96. + + + + + Gets or sets the vertical resolution for generated images, in dots per inch. + Applies generating image method except Emf format image. + + + The default value is 96. + + + + + Gets or sets the type of compression to apply only when saving pages to the Tiff format. + + + Has effect only when saving to TIFF. + The default value is Lzw. + + + + + Gets or sets bit depth to apply only when saving pages to the Tiff format. + + + Has effect only when saving to TIFF. + If TiffCompression is set to CCITT3, CCITT4, this will not take effect, the bit depth of the generated tiff image will be always 1. + + + + + Indicates which pages will not be printed. + + + + + Gets or sets a value determining the quality of the generated images + to apply only when saving pages to the Jpeg format. The default value is 100 + + + Has effect only when saving to JPEG. + The value must be between 0 and 100. + The default value is 100. + + + + + Gets or sets the format of the generated images. + Don't apply the method that returns a Bitmap object. + + + The default value is ImageFormat.Bmp. + Don't apply the method that returns a Bitmap object. + + + + + Indicates whether the width and height of the cells is automatically fitted by cell value. + The default value is false. + + + + + When set the value to true, the page only include the cells that have data. + The default value is false. + + + + + If OnePagePerSheet is true , all content of one sheet will output to only one page in result. + The paper size of pagesetup will be invalid, and the other settings of pagesetup + will still take effect. + + + + + If AllColumnsInOnePagePerSheet is true , all column content of one sheet will output to only one page in result. + The width of paper size of pagesetup will be invalid, and the other settings of pagesetup + will still take effect. + + + + + Implements this interface to get DrawObject and Bound when rendering. + + + + + Indicate the chart imagetype when converting. + + + + + Indicate the filename of embedded image in svg. + This should be full path with directory like "c:\\xpsEmbedded" + + + + + if this property is true, the generated svg will fit to view port. + + + + + If this property is true , one Area will be output, and no scale will take effect. + + + + + Specifies the quality of text rendering. + The default value is TextRenderingHint.SystemDefault + + + + + Specifies whether smoothing (antialiasing) is applied to lines and curves and the edges of filled areas. + The default value is SmoothingMode.None + + + + + Indicates if the background of generated image should be transparent. + + + The default value is false. That means the background of the generated images is white. + + + + + Gets or sets the pixel format for the generated images. + + + The default value is PixelFormat.Format32bppArgb. + + + + + Gets or sets warning callback. + + + + + Control/Indicate progress of page saving process. + + + + + Indicates whether only substitute the font of character when the cell font is not compatibility for it. + + + Default is false. We will try default font of Workbook and PdfSaveOption/system for cell font first. + + + + + Gets or sets the 0-based index of the first page to save. + + + Default is 0. + + + + + Gets or sets the number of pages to save. + + + Default is System.Int32.MaxValue which means all pages will be rendered.. + + + + + Sets desired width and height of image. + + desired width in pixels + desired height in pixels + + + + When characters in the Excel are unicode and not be set with correct font in cell style, + They may appear as block in pdf,image. + Set the DefaultFont such as MingLiu or MS Gothic to show these characters. + If this property is not set, Aspose.Cells will use system default font to show these unicode characters. + + + + + When characters in the Excel are unicode and not be set with correct font in cell style, + They may appear as block in pdf,image. + Set this to true to try to use workbook's default font to show these characters first. + + + Default is true. + + + + + Indicates whether to output a blank page when there is nothing to print. + + + Default is false. + + + + + Gets or sets gridline type. + + + Default is Dotted type. + + + + + Gets or sets displaying text type when the text width is larger than cell width. + + + + + Gets or sets an EmfType that specifies the format of the Metafile.. + The default value is EmfPlusDual. + + + + Gets or sets default edit language. + + + It may display/render different layouts for text paragraph when different edit languages is set. + Default is . + + + + + Control/Indicate progress of page saving process. + + + + + Control/Indicate a page starts to be output. + + Info for a page starts saving process. + + + + Control/Indicate a page ends to be output. + + Info for a page ends saving process. + + + + Info for a page ends saving process. + + + + + Gets or sets a value indicating whether having more pages to be output. + The default value is true. + + + + + Info for a page saving process. + + + + + Current page index, zero based. + + + + + Total page count. + + + + + Info for a page starts saving process. + + + + + Gets or sets a value indicating whether the page should be output. + The default value is true. + + + + + Worksheet printing preview. + + + + + The construct of SheetPrintingPreview + + Indicate which spreadsheet to be printed. + ImageOrPrintOptions contains some property of output + + + + Evaluate the total page count of this worksheet + + + + + Represents a worksheet render which can render worksheet to various images such as (BMP, PNG, JPEG, TIFF..) + The constructor of this class , must be used after modification of pagesetup, cell style. + + + + + Indicate the total page count of current worksheet + + + + + Gets calculated page scale of the sheet. + + + + + + + the construct of SheetRender, need worksheet and ImageOrPrintOptions as params + + Indicate which spreadsheet to be rendered. + ImageOrPrintOptions contains some property of output image + + + + Get page size of output image. The size unit is in pixel. + + The page index is based on zero. + + + + + + Render certain page to a file. + + indicate which page is to be converted + filename of the output image + + + + Render certain page to a stream. + + indicate which page is to be converted + the stream of the output image + + + + Render whole worksheet as Tiff Image to stream. + + the stream of the output image + + + + Render whole worksheet as Tiff Image to a file. + + the filename of the output image + + + + Render worksheet to Printer + + the name of the printer , for example: "Microsoft Office Document Image Writer" + + + + Render worksheet to Printer + + the name of the printer , for example: "Microsoft Office Document Image Writer" + the 0-based index of the first page to print, it must be in Range [0, SheetRender.PageCount-1] + the number of pages to print, it must be greater than zero + + + + Render worksheet to Printer + + the name of the printer , for example: "Microsoft Office Document Image Writer" + set the print job name + + + + Render worksheet to Printer + + the settings of printer, e.g. PrinterName, Duplex + + + + Client can control page setting of printer when print each page using this function. + + If true , printer will go to next page after print current page + System.Drawing.Printing.PrintPageEventArgs + Indirect next page index, based on zero + + + + Specifies what type of compression to apply when saving images into TIFF format file. + + + + + Specifies no compression. + + + + + Specifies the RLE compression scheme. + + + + + Specifies the LZW compression scheme. + + + + + Specifies the CCITT3 compression scheme. + + + + + Specifies the CCITT4 compression scheme. + + + + + Workbook printing preview. + + + + + The construct of WorkbookPrintingPreview + + Indicate which workbook to be printed. + ImageOrPrintOptions contains some property of output + + + + Evaluate the total page count of this workbook + + + + + Represents a Workbook render. + The constructor of this class , must be used after modification of pagesetup, cell style. + + + + + + + Indicate the total page count of workbook + + + + + The construct of WorkbookRender + + Indicate which workbook to be rendered. + ImageOrPrintOptions contains some property of output image + + + + Get page size of output image. The size unit is in pixel. + + The page index is based on zero. + + + + + + Render whole workbook as Tiff Image to stream. + + the stream of the output image + + + + Render whole workbook as Tiff Image to a file. + + the filename of the output image + + + + Render certain page to a file. + + indicate which page is to be converted + filename of the output image + + + + Render certain page to a stream. + + indicate which page is to be converted + the stream of the output image + + + + Render workbook to Printer + + the name of the printer , for example: "Microsoft Office Document Image Writer" + + + + Render workbook to Printer + + the name of the printer , for example: "Microsoft Office Document Image Writer" + the 0-based index of the first page to print, it must be in Range [0, WorkbookRender.PageCount-1] + the number of pages to print, it must be greater than zero + + + + Render workbook to Printer + + the name of the printer , for example: "Microsoft Office Document Image Writer" + set the print job name + + + + Render workbook to Printer + + the settings of printer, e.g. PrinterName, Duplex + + + + Client can control page setting of printer when print each page using this function. + + If true , printer will go to next page after print current page + System.Drawing.Printing.PrintPageEventArgs + Indirect next page index, based on zero + + + + Allowing user to set PDF conversion's Compatibility + + + + + Normal pdf format + + + + + Pdf format compatible with PDFA-1b + + + + + Pdf format compatible with PDFA-1a + + + + + Specifies a type of compression applied to all content in the PDF file except images. + + + + + None + + + + + Rle + + + + + Lzw + + + + + Flate + + + + + Represents pdf embedded font encoding. + + + + + Represents use Identity-H encoding for all embedded fonts in pdf. + + + + + Represents prefer to use WinAnsiEncoding for TrueType fonts with characters 32-127, + otherwise, Identity-H encoding will be used for embedded fonts in pdf. + + + + + Specifies a type of optimization. + + + + + High print quality + + + + + File size is more important than print quality + + + Font Arial and Times New Roman with characters 32-127 will not be embedded in pdf. + Border lines are optimized for smaller file size. + + + + + Settings of pdf when converting excel to pdf, PDF/A does not allow security setting. + + + + + The constructor of PdfSecurityOptions + + + + + Gets or sets the user password + + + + + Gets or sets the owner password of the document + + + + + Permission to print pdf document + + + + + Permission to modify pdf document + + + + + Permission to copy or extract content Obsoleted according to PDF reference. + + + + + Permission to comment on the document. + + + + + Permission to fill the form fields. + + + + + Permission to copy or extract content. + + + + + Permission to copy or extract content (in support of accessibility to disabled users or for other purposes). + + + + + Permission to insert, rotate, or delete pages and create bookmarks or thumbnail images even if ModifyDocumentPermission is not set. + + + + + Permission to print in high quality. + + + + + Contains all security options of Rendering pdf. + + + + + Contains all classes of Rendering image and pdf. + + + + + Encapsulates the object that represents an area format. + + + + + [C#] + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Workbook object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + //Setting the foreground color of the plot area + chart.PlotArea.Area.ForegroundColor = Color.Blue; + //Setting the foreground color of the chart area + chart.ChartArea.Area.ForegroundColor = Color.Yellow; + //Setting the foreground color of the 1st NSeries area + chart.NSeries[0].Area.ForegroundColor = Color.Red; + //Setting the foreground color of the area of the 1st NSeries point + chart.NSeries[0].Points[0].Area.ForegroundColor = Color.Cyan; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Workbook object + Dim sheetIndex As Integer = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + 'Setting the foreground color of the plot area + chart.PlotArea.Area.ForegroundColor = Color.Blue + 'Setting the foreground color of the chart area + chart.ChartArea.Area.ForegroundColor = Color.Yellow + 'Setting the foreground color of the 1st NSeries area + chart.NSeries(0).Area.ForegroundColor = Color.Red + 'Setting the foreground color of the area of the 1st NSeries point + chart.NSeries(0).Points(0).Area.ForegroundColor = Color.Cyan + 'Saving the Excel file + workbook.Save("C:\book1.xls") + + + + + + Gets or sets the background of the . + + + + + Gets or sets the foreground . + + + + + Represents the formatting of the area. + + + + + If the property is true and the value of chart point is a negative number, + the foreground color and background color will be exchanged. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Workbook object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(-100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "A3" + chart.NSeries.Add("A1:A3", true); + chart.NSeries[0].Area.InvertIfNegative = true; + //Setting the foreground color of the 1st NSeries area + chart.NSeries[0].Area.ForegroundColor = Color.Red; + //Setting the background color of the 1st NSeries area. + //The displayed area color of second chart point will be the background color. + chart.NSeries[0].Area.BackgroundColor = Color.Yellow; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Workbook object + Dim sheetIndex As Integer = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(-100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "A3" + chart.NSeries.Add("A1:A3", True) + chart.NSeries(0).Area.InvertIfNegative = True + 'Setting the foreground color of the 1st NSeries area + chart.NSeries(0).Area.ForegroundColor = Color.Red + 'Setting the background color of the 1st NSeries area. + 'The displayed area color of second chart point will be the background color. + chart.NSeries(0).Area.BackgroundColor = Color.Yellow + 'Saving the Excel file + workbook.Save("C:\book1.xls") + + + + + + + Represents a object that contains fill formatting properties for the specified chart or shape. + + + + + Returns or sets the degree of transparency of the area as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Specifies the preset shape geometry that is to be used for a chart. + + + + + Represents the rectangle shape. + + + + + Represents the round rectangle shape. + + + + + Represents the ellipse shape. + + + + + Represents the right arrow callout shape. + + + + + Represents the down arrow callout shape. + + + + + Represents the left arrow callout shape. + + + + + Represents the up arrow callout shape. + + + + + Represents the wedge rectangle callout shape. + + + + + Represents the wedge round rectangle callout shape. + + + + + Represents the wedge ellipse callout shape. + + + + + Represents the line callout shape. + + + + + Represents the bent line callout shape. + + + + + Represents the line with accent bar callout shape. + + + + + Represents the bent line with accent bar callout shape. + + + + + Fill format set type. + + + + + No Fill format. + + + + + Gradient fill format. + + + + + Texture fill format. + + + + + Pattern fill format. + + + + + Represents tile picture as texture. + + + + + Gets or sets the X offset for tiling picture. + + + + + Gets or sets the Y offset for tiling picture. + + + + + Gets or sets the X scale for tiling picture. + + + + + Gets or sets the Y scale for tiling picture. + + + + + Gets or sets the mirror type for tiling. + + + + + Gets or sets the alignment for tiling. + + + + + Enumerates the weight types for a picture border or a chart line. + + + + + Represents the weight of hair line. + + + + + Represents the weight of medium line. + + + + + Represents the weight of single line. + + + + + Represents the weight of wide line. + + + + + Represents the ActiveX control. + + + + + Indicates whether the control can receive the focus and respond to user-generated events. + + + + + Indicates whether data in the control is locked for editing. + + + + + Indicates whether the control is transparent. + + + + + Indicates whether the control will automatically resize to display its entire contents. + + + + + Gets and sets the default run-time mode of the Input Method Editor for the control as it receives focus. + + + + + Represents the font of the control. + + + + + Represents how to align the text used by the control. + + + + + Gets and sets the binary data of the control. + + + + + Represents the ActiveX control. + + + + + Gets the object. + + + + + Gets the type of the ActiveX control. + + + + + Gets and sets the width of the control in unit of points. + + + + + Gets and sets the height of the control in unit of points. + + + + + Gets and sets a custom icon to display as the mouse pointer for the control. + + + + + Gets and sets the type of icon displayed as the mouse pointer for the control. + + + + + Gets and sets the ole color of the foreground. + + + Not applies to Image control. + + + + + Gets and sets the ole color of the background. + + + + + Indicates whether this control is visible. + + + + + Indicates whether to show a shadow. + + + + + Gets and sets the linked cell. + + + + + Gets and sets the list fill range. + + + + + Gets and sets the binary data of the control. + + + + + Represents a CheckBox ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and sets the group's name. + + + + + Gets and set the position of the Caption relative to the control. + + + + + Indicates whether the contents of the control automatically wrap at the end of a line. + + + + + Gets and set the descriptive text that appears on a control. + + + + + Gets and set the location of the control's picture relative to its caption. + + + + + Gets and sets the special effect of the control. + + + + + Gets and sets the data of the picture. + + + + + Gets and sets the accelerator key for the control. + + + + + Indicates if the control is checked or not. + + + + + Indicates how the specified control will display Null values. + + + ///
Setting Description 
TrueThe control will cycle through states for Yes, No, and Null values. The control appears dimmed (grayed) when its Value property is set to Null.
False(Default) The control will cycle through states for Yes and No values. Null values display as if they were No values.
+
+ + + Represents a ComboBox ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and sets the maximum number of characters + + + + + Gets and set the width in unit of points. + + + + + Represents how the Value property is determined for a ComboBox or ListBox + when the MultiSelect properties value (fmMultiSelectSingle). + + + + + Represents the column in a ComboBox or ListBox to display to the user. + + + + + Represents the number of columns to display in a ComboBox or ListBox. + + + + + Represents the maximum number of rows to display in the list. + + + + + Indicates how a ListBox or ComboBox searches its list as the user types. + + + + + Specifies the symbol displayed on the drop button + + + + + Specifies the symbol displayed on the drop button + + + + + Gets and sets the visual appearance. + + + + + Gets and set the type of border used by the control. + + + + + Gets and sets the ole color of the background. + + + + + Gets and sets the special effect of the control. + + + + + Indicates whether the user can type into the control. + + + + + Indicates whether column headings are displayed. + + + + + Indicates whether dragging and dropping is enabled for the control. + + + + + Specifies selection behavior when entering the control. + True specifies that the selection remains unchanged from last time the control was active. + False specifies that all the text in the control will be selected when entering the control. + + + + + Specifies the basic unit used to extend a selection. + True specifies that the basic unit is a single character. + false specifies that the basic unit is a whole word. + + + + + Indicates whether the user can select a line of text by clicking in the region to the left of the text. + + + + + Gets and sets the value of the control. + + + + + Indicates whether selected text in the control appears highlighted when the control does not have focus. + + + + + Gets and sets the width of the column. + + + + + Represents a command button. + + + + + Gets the type of the ActiveX control. + + + + + Gets and set the descriptive text that appears on a control. + + + + + Gets and set the location of the control's picture relative to its caption. + + + + + Gets and sets the data of the picture. + + + + + Gets and sets the accelerator key for the control. + + + + + Indicates whether the control takes the focus when clicked. + + + + + Indicates whether the contents of the control automatically wrap at the end of a line. + + + + + Represents the persistence method to persist an ActiveX control. + + + + + The data is stored as xml data. + + + + + The data is stored as a storage binary data. + + + + + The data is stored as a stream binary data. + + + + + The data is stored as a streaminit binary data. + + + + + Represents the border type of the ActiveX control. + + + + + No border. + + + + + The single line. + + + + + Represents the position of the Caption relative to the control. + + + + + The left of the control. + + + + + The right of the control. + + + + + Represents the visual appearance of the list in a ListBox or ComboBox. + + + + + Displays a list in which the background of an item is highlighted when it is selected. + + + + + Displays a list in which an option button or a checkbox next to each entry displays the selection state of that item. + + + + + Represents how a ListBox or ComboBox searches its list as the user types. + + + + + The control searches for the next entry that starts with the character entered. + Repeatedly typing the same letter cycles through all entries beginning with that letter. + + + + + As each character is typed, the control searches for an entry matching all characters entered. + + + + + The list will not be searched when characters are typed. + + + + + Represents the type of icon displayed as the mouse pointer for the control. + + + + + Standard pointer. + + + + + Arrow. + + + + + Cross-hair pointer. + + + + + I-beam. + + + + + Double arrow pointing northeast and southwest. + + + + + Double arrow pointing north and south. + + + + + Double arrow pointing northwest and southeast. + + + + + Double arrow pointing west and east. + + + + + Up arrow. + + + + + Hourglass. + + + + + "Not” symbol (circle with a diagonal line) on top of the object being dragged. + + + + + Arrow with an hourglass. + + + + + Arrow with a question mark. + + + + + "Size-all” cursor (arrows pointing north, south, east, and west). + + + + + Uses the icon specified by the MouseIcon property. + + + + + Represents the alignment of the picture inside the Form or Image. + + + + + The top left corner. + + + + + The top right corner. + + + + + The center. + + + + + The bottom left corner. + + + + + The bottom right corner. + + + + + Represents the location of the control's picture relative to its caption. + + + + + The picture appears to the left of the caption. + The caption is aligned with the top of the picture. + + + + + The picture appears to the left of the caption. + The caption is centered relative to the picture. + + + + + The picture appears to the left of the caption. + The caption is aligned with the bottom of the picture. + + + + + The picture appears to the right of the caption. + The caption is aligned with the top of the picture. + + + + + The picture appears to the right of the caption. + The caption is centered relative to the picture. + + + + + The picture appears to the right of the caption. + The caption is aligned with the bottom of the picture. + + + + + The picture appears above the caption. + The caption is aligned with the left edge of the picture. + + + + + The picture appears above the caption. + The caption is centered below the picture. + + + + + The picture appears above the caption. + The caption is aligned with the right edge of the picture. + + + + + The picture appears below the caption. + The caption is aligned with the left edge of the picture. + + + + + The picture appears below the caption. + The caption is centered above the picture. + + + + + The picture appears below the caption. + The caption is aligned with the right edge of the picture. + + + + + The picture appears in the center of the control. + The caption is centered horizontally and vertically on top of the picture. + + + + + Represents how to display the picture. + + + + + Crops any part of the picture that is larger than the control's boundaries. + + + + + Stretches the picture to fill the control's area. + This setting distorts the picture in either the horizontal or vertical direction. + + + + + Enlarges the picture, but does not distort the picture in either the horizontal or vertical direction. + + + + + Represents the type of scroll bar. + + + + + Displays no scroll bars. + + + + + Displays a horizontal scroll bar. + + + + + Displays a vertical scroll bar. + + + + + Displays both a horizontal and a vertical scroll bar. + + + + + Represents type of scroll orientation + + + + + Control is rendered horizontally when the control's width is greater than its height. + Control is rendered vertically otherwise. + + + + + Control is rendered vertically. + + + + + Control is rendered horizontally. + + + + + Represents the type of special effect. + + + + + Flat + + + + + Raised + + + + + Sunken + + + + + Etched + + + + + Bump + + + + + Represents all type of ActiveX control. + + + + + Button + + + + + ComboBox + + + + + CheckBox + + + + + ListBox + + + + + TextBox + + + + + Spinner + + + + + RadioButton + + + + + Label + + + + + Image + + + + + ToggleButton + + + + + ScrollBar + + + + + Unknown + + + + + Represents the symbol displayed on the drop button. + + + + + Displays a button with no symbol. + + + + + Displays a button with a down arrow. + + + + + Displays a button with an ellipsis (...). + + + + + Displays a button with a horizontal line like an underscore character. + + + + + Represents the default run-time mode of the Input Method Editor. + + + + + Does not control IME. + + + + + IME on. + + + + + IME off. English mode. + + + + + IME off.User can't turn on IME by keyboard. + + + + + IME on with Full-width hiragana mode. + + + + + IME on with Full-width katakana mode. + + + + + IME on with Half-width katakana mode. + + + + + IME on with Full-width Alphanumeric mode. + + + + + IME on with Half-width Alphanumeric mode. + + + + + IME on with Full-width hangul mode. + + + + + IME on with Half-width hangul mode. + + + + + IME on with Full-width hanzi mode. + + + + + IME on with Half-width hanzi mode. + + + + + Specifies when to show the drop button + + + + + Never show the drop button. + + + + + Show the drop button when the control has the focus. + + + + + Always show the drop button. + + + + + Represents the image control. + + + + + Gets the type of the ActiveX control. + + + + + Indicates whether the control will automatically resize to display its entire contents. + + + + + Gets and sets the ole color of the background. + + + + + Gets and set the type of border used by the control. + + + + + Gets and sets how to display the picture. + + + + + Gets and sets the special effect of the control. + + + + + Gets and sets the data of the picture. + + + + + Gets and sets the alignment of the picture inside the Form or Image. + + + + + Indicates whether the picture is tiled across the background. + + + + + Represents the label ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and set the descriptive text that appears on a control. + + + + + Gets and set the location of the control's picture relative to its caption. + + + + + Gets and sets the ole color of the background. + + + + + Gets and set the type of border used by the control. + + + + + Gets and sets the special effect of the control. + + + + + Gets and sets the data of the picture. + + + + + Gets and sets the accelerator key for the control. + + + + + Indicates whether the contents of the control automatically wrap at the end of a line. + + + + + Represents a ListBox ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Indicates specifies whether the control has vertical scroll bars, horizontal scroll bars, both, or neither. + + + + + Gets and set the width in unit of points. + + + + + Represents how the Value property is determined for a ComboBox or ListBox + when the MultiSelect properties value (fmMultiSelectSingle). + + + + + Represents the column in a ComboBox or ListBox to display to the user. + + + + + Represents the number of columns to display in a ComboBox or ListBox. + + + + + Indicates how a ListBox or ComboBox searches its list as the user types. + + + + + Gets and sets the visual appearance. + + + + + Indicates whether the control permits multiple selections. + + + + + Gets and sets the value of the control. + + + Only effects when is SelectionType.Single; + + + + + Gets and set the type of border used by the control. + + + + + Gets and sets the ole color of the background. + + + + + Gets and sets the special effect of the control. + + + + + Indicates whether column headings are displayed. + + + + + Indicates whether the control will only show complete lines of text without showing any partial lines. + + + + + Gets and sets the width of the column. + + + + + Represents a RadioButton ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and sets the group's name. + + + + + Gets and set the position of the Caption relative to the control. + + + + + Indicates whether the contents of the control automatically wrap at the end of a line. + + + + + Represents the ScrollBar control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and sets the amount by which the Position property changes + + + + + Represents the SpinButton control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and sets the minimum acceptable value. + + + + + Gets and sets the maximum acceptable value. + + + + + Gets and sets the value. + + + + + Gets and sets the amount by which the Position property changes + + + + + Gets and sets whether the SpinButton or ScrollBar is oriented vertically or horizontally. + + + + + Represents a text box ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and set the type of border used by the control. + + + + + Gets and sets the ole color of the background. + + + + + Gets and sets the special effect of the control. + + + + + Gets and sets the maximum number of characters + + + + + Indicates specifies whether the control has vertical scroll bars, horizontal scroll bars, both, or neither. + + + + + Gets and sets a character to be displayed in place of the characters entered. + + + + + Indicates whether the user can type into the control. + + + + + Indicates whether the control will only show complete lines of text without showing any partial lines. + + + + + Indicates whether dragging and dropping is enabled for the control. + + + + + Specifies the behavior of the ENTER key. + True specifies that pressing ENTER will create a new line. + False specifies that pressing ENTER will move the focus to the next object in the tab order. + + + + + Specifies selection behavior when entering the control. + True specifies that the selection remains unchanged from last time the control was active. + False specifies that all the text in the control will be selected when entering the control. + + + + + Indicates whether tab characters are allowed in the text of the control. + + + + + Indicates whether selected text in the control appears highlighted when the control does not have focus. + + + + + Indicates whether the focus will automatically move to the next control when the user enters the maximum number of characters. + + + + + Indicates whether the control can display more than one line of text. + + + + + Specifies the basic unit used to extend a selection. + True specifies that the basic unit is a single character. + false specifies that the basic unit is a whole word. + + + + + Indicates whether the contents of the control automatically wrap at the end of a line. + + + + + Gets and set text of the control. + + + + + Specifies the symbol displayed on the drop button + + + + + Specifies the symbol displayed on the drop button + + + + + Represents a ToggleButton ActiveX control. + + + + + Gets the type of the ActiveX control. + + + + + Gets and set the descriptive text that appears on a control. + + + + + Gets and set the location of the control's picture relative to its caption. + + + + + Gets and sets the special effect of the control. + + + + + Gets and sets the data of the picture. + + + + + Gets and sets the accelerator key for the control. + + + + + Indicates if the control is checked or not. + + + + + Indicates how the specified control will display Null values. + + + ///
Setting Description 
TrueThe control will cycle through states for Yes, No, and Null values. The control appears dimmed (grayed) when its Value property is set to Null.
False(Default) The control will cycle through states for Yes and No values. Null values display as if they were No values.
+
+ + + Unknow control. + + + + + Gets the persistence method to persist an ActiveX control. + + + + + Gets the related data. + + The relationship id. + Returns the related data. + + + + Gets and sets the binary data of the control. + + + + + Gets the type of the ActiveX control. + + + + + Contains all classes of ActiveXControl. + + + + + Represents the arc shape. + + + + + [C#] + //Instantiate a new Workbook. + Workbook excelbook = new Workbook(); + + //Add an arc shape. + Aspose.Cells.ArcShape arc1 = excelbook.Worksheets[0].Shapes.AddArc(2, 0, 2, 0, 130, 130); + + //Set the placement of the arc. + arc1.Placement = PlacementType.FreeFloating; + + //Set the fill format. + arc1.FillFormat.ForeColor = Color.Blue; + + //Set the line style. + arc1.LineFormat.Style = MsoLineStyle.Single; + + //Set the line weight. + arc1.LineFormat.Weight = 1; + + //Set the color of the arc line. + arc1.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the arc. + arc1.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Add another arc shape. + Aspose.Cells.ArcShape arc2 = excelbook.Worksheets[0].Shapes.AddArc(9, 0, 2, 0, 130, 130); + + //Set the placement of the arc. + arc2.Placement = PlacementType.FreeFloating; + + //Set the line style. + arc2.LineFormat.Style = MsoLineStyle.Single; + + //Set the line weight. + arc2.LineFormat.Weight = 1; + + //Set the color of the arc line. + arc2.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the arc. + arc2.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Save the excel file. + excelbook.Save("d:\\test\\tstarcs.xls"); + + [VB..NET] + + 'Instantiate a new Workbook. + Dim excelbook As Workbook = New Workbook() + + 'Add an arc shape. + Dim arc1 As Aspose.Cells.ArcShape = excelbook.Worksheets(0).Shapes.AddArc(2, 0, 2, 0, 130, 130) + + 'Set the placement of the arc. + arc1.Placement = PlacementType.FreeFloating + + 'Set the fill format. + arc1.FillFormat.ForeColor = Color.Blue + + 'Set the line style. + arc1.LineFormat.Style = MsoLineStyle.Single + + 'Set the line weight. + arc1.LineFormat.Weight = 1 + + 'Set the color of the arc line. + arc1.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the arc. + arc1.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Add another arc shape. + Dim arc2 As Aspose.Cells.ArcShape = excelbook.Worksheets(0).Shapes.AddArc(9, 0, 2, 0, 130, 130) + + 'Set the placement of the arc. + arc2.Placement = PlacementType.FreeFloating + + 'Set the line style. + arc2.LineFormat.Style = MsoLineStyle.Single + + 'Set the line weight. + arc2.LineFormat.Weight = 1 + + 'Set the color of the arc line. + arc2.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the arc. + arc2.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Save the excel file. + excelbook.Save("d:\test\tstarcs.xls") + + + + + + Gets and sets the begin arrow head style of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.BeginArrowheadStyle property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the begin arrow head width of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.BeginArrowheadWidth property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the begin arrow head length of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.BeginArrowheadLength property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the end arrow head style of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.EndArrowheadStyle property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the end arrow head width of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.EndArrowheadWidth property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the end arrow head length of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.EndArrowheadLength property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents all built-in auto shape type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A value that SHOULD NOT be used. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A plain text shape. + + + + + An octagonal text shape. + + + + + A triangular text shape pointing upwards. + + + + + A triangular text shape pointing downwards. + + + + + A chevron text shape pointing upwards. + + + + + A chevron text shape pointing downwards. + + + + + A circular text shape, as if reading an inscription on the inside of a ring. + + + + + A circular text shape, as if reading an inscription on the outside of a ring. + + + + + An upward arching curved text shape. + + + + + A downward arching curved text shape. + + + + + A circular text shape. + + + + + A text shape that resembles a button. + + + + + An upward arching text shape. + + + + + A downward arching text shape. + + + + + A circular text shape. + + + + + A text shape that resembles a button. + + + + + An upward curving text shape. + + + + + A downward curving text shape. + + + + + A cascading text shape pointed upwards. + + + + + A cascading text shape pointed downwards. + + + + + A wavy text shape. + + + + + A wavy text shape. + + + + + A wavy text shape. + + + NOTE: This enum is now obsolete. Instead, please use AutoShape.TextDoubleWave1. + This property will be removed 12 months later since April 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + A wavy text shape. + + + NOTE: This enum is now obsolete. Instead, please use AutoShape.TextDoubleWave2. + This property will be removed 12 months later since April 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + A wavy text shape. + + + + + A wavy text shape. + + + + + A text shape that expands vertically in the middle. + + + + + A text shape that shrinks vertically in the middle. + + + + + A text shape that expands downward in the middle. + + + + + A text shape that shrinks upwards in the middle. + + + + + A text shape that expands upward in the middle. + + + + + A text shape that shrinks downward in the middle. + + + + + + A text shape where lower lines expand upward. Upper lines shrink to compensate. + + + + + A text shape where lines in the center expand vertically. Upper and lower lines shrink to compensate. + + + + + A text shape that shrinks vertically on the right side. + + + + + A text shape that shrinks vertically on the left side. + + + + + A text shape that shrinks horizontally on top. + + + + + A text shape that shrinks horizontally on bottom. + + + + + An upward slanted text shape. + + + + + A downward slanted text shape. + + + + + A text shape that is curved upwards as if being read on the side of a can. + + + + + A text shape that is curved downwards as if being read on the side of a can. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A shape enclosed in brackets. + + + + + A shape enclosed in braces. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This value SHOULD NOT be used. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + There is no such type in Excel + + + + + There is no such type in Excel + + + + + There is no such type in Excel + + + + + There is no such type in Excel + + + + + There is no such type in Excel + + + + + + + + + Represents the auto shape and drawing object. + + + + + Represents the shape of the chart. + Properties and methods for the ChartObject object control the appearance and size of the embedded chart on the worksheet. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.PieExploded, 5, 0, 25, 10); + + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + + //Show Data Labels + chart.NSeries[0].DataLabels.IsValueShown = true; + + //Getting Chart Shape + ChartShape chartShape = chart.ChartObject; + + //Set Lower Right Column + chartShape.LowerRightColumn = 10; + + //Set LowerDeltaX + chartShape.LowerDeltaX = 1024; + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.PieExploded, 5, 0, 25, 10) + + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + + 'Show Data Labels + chart.NSeries(0).DataLabels.IsValueShown = True + + 'Getting Chart Shape + Dim chartShape As ChartShape = chart.ChartObject + + 'Set Lower Right Column + chartShape.LowerRightColumn = 10 + + 'Set LowerDeltaX + chartShape.LowerDeltaX = 1024 + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + Returns a Chart object that represents the chart contained in the object. + + + + + Provides helper functions about color. + + + + + Convert OLE_COLOR. + + The value of OLE_COLOR. + The object. + + + + Convert color to OLE_COLOR + + The object. + + + The value of OLE_COLOR + + + + Represents the shape of the comment. + + + + + Gets the comment object. + + + + + Represents Custom xml shape ,such as Ink. + + + + + This class specifies a glow effect, in which a color blurred outline + is added outside the edges of the object. + + + + + Gets the color of the glow effect. + + + + + Gets and sets the radius of the glow, in unit of points. + + NOTE: This member is now obsolete. Instead, + please use GlowEffect.Size property. + This property will be removed 6 months later since September 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the radius of the glow, in unit of points. + + + + + Gets and sets the degree of transparency of the glow effect. Range from 0.0 (opaque) to 1.0 (clear). + + + + + Represents how to position two rectangles relative to each other. + + + + + Bottom + + + + + BottomLeft + + + + + BottomRight + + + + + Center + + + + + Left + + + + + Right + + + + + Top + + + + + TopLeft + + + + + TopRight + + + + + This class specifies a reflection effect. + + + + + Gets and sets the preset reflection effect. + + + + + Gets and sets the degree of the starting reflection transparency as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Gets and sets the end position (along the alpha gradient ramp) of the end alpha value,in unit of percentage + + + + + Gets and sets the blur radius,in unit of points. + + + + + Gets and sets the direction of the alpha gradient ramp relative to the shape itself. + + + + + Gets and sets how far to distance the shadow,in unit of points. + + + + + Gets and sets the direction to offset the reflection. + + + + + Gets and sets if the reflection should rotate with the shape. + + + + + + + + + No reflection effect. + + + + + Custom reflection effect. + + + + + Tight reflection, touching. + + + + + Half reflection, touching. + + + + + Full reflection, touching. + + + + + Tight reflection, 4 pt offset. + + + + + Half reflection, 4 pt offset. + + + + + Full reflection, 4 pt offset. + + + + + Tight reflection, 8 pt offset. + + + + + Half reflection, 8 pt offset. + + + + + Full reflection, 8 pt offset. + + + + + Represents preset shadow type. + + + + + No shadow. + + + + + Custom shadow. + + + + + Outer shadow offset diagonal bottom right. + + + + + Outer shadow offset bottom. + + + + + Outer shadow offset diagonal bottom left. + + + + + Outer shadow offset right. + + + + + Outer shadow offset center. + + + + + Outer shadow offset left. + + + + + Outer shadow offset diagonal top right. + + + + + Outer shadow offset top. + + + + + Outer shadow offset diagonal top left. + + + + + Inner shadow inside diagonal top Left. + + + + + Inner shadow inside top. + + + + + Inner shadow inside diagonal top right. + + + + + Inner shadow inside left. + + + + + Inner shadow inside center. + + + + + Inner shadow inside right. + + + + + Inner shadow inside diagonal bottom left. + + + + + Inner shadow inside bottom. + + + + + Inner shadow inside diagonal bottom right. + + + + + Outer shadow perspective diagonal upper left. + + + + + Outer shadow perspective diagonal upper right. + + + + + Outer shadow below. + + + + + Outer shadow perspective diagonal lower left. + + + + + Outer shadow perspective diagonal lower right. + + + + + This class specifies the shadow effect of the chart element or shape. + + + + + Gets and sets the preset shadow type of the shadow. + + + + + Gets and sets the color of the shadow. + + + + + Gets and sets the degree of transparency of the shadow. Range from 0.0 (opaque) to 1.0 (clear). + + + + + Gets and sets the size of the shadow. Range from 0 to 2.0. + Meaningless in inner shadow. + + + + + Gets and sets the blur of the shadow. Range from 0 to 100 points. + + + + + Gets and sets the lighting angle. Range from 0 to 359.9 degrees. + + + + + Gets and sets the distance of the shadow. Range from 0 to 200 points. + + + + + Represents a bevel of a shape + + + + + Gets and sets the width of the bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Gets and sets the height of the bevel, or how far above the shape it is applied. + In unit of Points. + + + + + Gets and sets the preset bevel type. + + + + + Represents a preset for a type of bevel which can be applied to a shape in 3D. + + + + + No bevel + + + + + Angle + + + + + Art deco + + + + + Circle + + + + + Convex + + + + + Cool slant + + + + + Cross + + + + + Divot + + + + + Hard edge + + + + + Relaxed inset + + + + + Riblet + + + + + Slope + + + + + Soft round + + + + + Represents a preset for a type of bevel which can be applied to a shape in 3D. + + + + + No bevel + + + + + Angle + + + + + Art deco + + + + + Circle + + + + + Convex + + + + + Cool slant + + + + + Cross + + + + + Divot + + + + + Hard edge + + + + + Relaxed inset + + + + + Riblet + + + + + Slope + + + + + Soft round + + + + + This class specifies the 3D shape properties for a chart element or shape. + + + + + Gets the object that holds the properties associated with defining a bevel on the top or front face of a shape. + + + + + Indicates if the shape has top bevel data. + + + + + + + Gets and sets the material type which is combined with the lighting properties to give the final look and feel of a shape. + Default value is PresetMaterialType.WarmMatte. + + + + + Gets and sets the lighting type which is to be applied to the scene of the shape. + Default value is LightRigType.ThreePoint. + + + + + Gets and sets the lighting angle. Range from 0 to 359.9 degrees. + + + + + Represents the light rig direction type. + + + + + Bottom + + + + + Bottom left. + + + + + Bottom Right. + + + + + Left. + + + + + Right. + + + + + Top. + + + + + Top left. + + + + + Top Right. + + + + + Represents a preset light right that can be applied to a shape + + + + + Balanced + + + + + Bright room + + + + + Chilly + + + + + Contrasting + + + + + Flat + + + + + Flood + + + + + Freezing + + + + + Glow + + + + + Harsh + + + + + LegacyFlat1 + + + + + LegacyFlat2 + + + + + LegacyFlat3 + + + + + LegacyFlat4 + + + + + LegacyHarsh1 + + + + + LegacyHarsh2 + + + + + LegacyHarsh3 + + + + + LegacyHarsh4 + + + + + LegacyNormal1 + + + + + LegacyNormal2 + + + + + LegacyNormal3 + + + + + LegacyNormal4 + + + + + Morning + + + + + Soft + + + + + Sunrise + + + + + Sunset + + + + + Three point + + + + + Two point + + + + + No light rig. + + + + + Represent different algorithmic methods for setting all camera properties, including position. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes surface appearance of a shape. + + + + + Clear + + + + + Dark edge + + + + + Flat + + + + + Legacy matte + + + + + Legacy metal + + + + + Legacy plastic + + + + + Legacy wireframe + + + + + Matte + + + + + Metal + + + + + Plastic + + + + + Powder + + + + + Soft edge + + + + + Soft metal + + + + + Translucent powder + + + + + Warm matte + + + + + Represents a shape's three-dimensional formatting. + + + + + Gets and sets the width of the bottom bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Gets and sets the height of the bottom bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Gets and sets the type of the bottom bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Gets and sets the width of the top bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Gets and sets the height of the top bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Gets and sets the type of the top bevel, or how far into the shape it is applied. + In unit of Points. + + + + + Represents the preset material which is combined with the lighting properties to give the + final look and feel of a shape. + + + + + Gets and sets the contour color on a shape. + + + + + Gets and sets the contour width on the shape, in unit of points. + + + + + Gets the extrusion color on a shape. + + + + + Gets and sets the extrusion height of the applied to the shape, in unit of points. + + + + + Defines the distance from ground for the 3D shape. + + + + + Gets and sets the angle of the extrusion lights. + + + + + Gets and sets type of light rig. + + + + + Gets and sets the direction from which the light rig is oriented in relation to the scene. + + + + + Gets and sets the angle at which a ThreeDFormat object can be viewed. + + + + + Gets and sets the rotation of the extruded shape around the x-axis in degrees. + + + + + Gets and sets the rotation of the extruded shape around the y-axis in degrees. + + + + + Gets and sets the rotation of the extruded shape around the z-axis in degrees. + + + + + Gets and sets the extrusion preset camera type. + + + + + Gets hashcode. + + + + + + + + + + + + + + + represents automatic fill. + + + + + Represents the fill format of the shape. + + + + + Encapsulates the object that represents fill formatting for a shape. + + + + + [C#] + + //Filling the area of the 2nd NSeries with a gradient + chart.NSeries[1].Area.FillFormat.SetOneColorGradient(Color.Lime, 1, GradientStyleType.Horizontal, 1); + + [Visual Basic] + + 'Filling the area of the 2nd NSeries with a gradient + chart.NSeries(1).Area.FillFormat.SetOneColorGradient(Color.Lime, 1, GradientStyleType.Horizontal, 1) + + + + + + Gets and sets the fill type. + + + NOTE: This member is now obsolete. Instead, + please use FillFormat.FillType property instead. + This property will be removed 12 months later since July 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets fill type + + + + + Returns or sets the degree of transparency of the area as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Gets the fill format set type. + + + NOTE: This member is now obsolete. Instead, + please use FillFormat.FillType property instead. + This property will be removed 12 months later since July 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets object. + + + + + Gets object. + + + + + Gets object. + + + + + Gets object. + + + + + Returns the gradient color type for the specified fill. + + + + + Returns the gradient style for the specified fill. + + + + + Returns the gradient color 1 for the specified fill. + + + + + Returns the gradient color 2 for the specified fill. + + Only when the gradient color type is GradientColorType.TwoColors, this property is meaningful. + + + + Returns the gradient degree for the specified fill. + Only applies for Excel 2007. + + Can only be a value from 0.0 (dark) through 1.0 (light). + + + + Returns the gradient variant for the specified fill. + Only applies for Excel 2007. + + Can only be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Returns the gradient preset color for the specified fill. + + + + + Sets the specified fill to a one-color gradient. + Only applies for Excel 2007. + + One gradient color. + The gradient degree. Can be a value from 0.0 (dark) through 1.0 (light). + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Sets the specified fill to a two-color gradient. + Only applies for Excel 2007. + + One gradient color. + Two gradient color. + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Sets the specified fill to a two-color gradient. + Only applies for Excel 2007. + + One gradient color. + The degree of transparency of the color1 as a value from 0.0 (opaque) through 1.0 (clear). + Two gradient color. + The degree of transparency of the color2 as a value from 0.0 (opaque) through 1.0 (clear). + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Sets the specified fill to a preset-color gradient. + Only applies for Excel 2007. + + Preset color type + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Represents the texture type for the specified fill. + + + + + Represents an area's display pattern. + + + + + Gets and sets the picture format type. + + + + + Gets and sets the picture format scale. + + + + + Gets and sets the picture image data. + + If the fill format is not custom texture format, returns null. + + + + Enumerates shape fill pattern types. + + + + + Represents no background. + + + + + Represents solid pattern. + + + + + Represents 5% gray pattern. + + + + + Represents 10% gray pattern. + + + + + Represents 20% gray pattern. + + + + + Represents 30% gray pattern. + + + + + Represents 40% gray pattern. + + + + + Represents 50% gray pattern. + + + + + Represents 60% gray pattern. + + + + + Represents 70% gray pattern. + + + + + Represents 75% gray pattern. + + + + + Represents 80% gray pattern. + + + + + Represents 90% gray pattern. + + + + + Represents 25% gray pattern. + + + + + Represents light downward diagonal pattern. + + + + + Represents light upward diagonal pattern. + + + + + Represents dark downward diagonal pattern. + + + + + Represents dark upward diagonal pattern. + + + + + Represents wide downward diagonal pattern. + + + + + Represents wide upward diagonal pattern. + + + + + Represents light vertical pattern. + + + + + Represents light horizontal pattern. + + + + + Represents narrow vertical pattern. + + + + + Represents narrow horizontal pattern. + + + + + Represents dark vertical pattern. + + + + + Represents dark horizontal pattern. + + + + + Represents dashed downward diagonal pattern. + + + + + Represents dashed upward diagonal pattern. + + + + + Represents dashed vertical pattern. + + + + + Represents dashed horizontal pattern. + + + + + Represents small confetti pattern. + + + + + Represents large confetti pattern. + + + + + Represents zig zag pattern. + + + + + Represents wave pattern. + + + + + Represents diagonal brick pattern. + + + + + Represents horizontal brick pattern. + + + + + Represents weave pattern. + + + + + Represents plaid pattern. + + + + + Represents divot pattern. + + + + + Represents dotted grid pattern. + + + + + Represents dotted diamond pattern. + + + + + Represents shingle pattern. + + + + + Represents trellis pattern. + + + + + Represents sphere pattern. + + + + + Represents small grid pattern. + + + + + Represents large grid pattern. + + + + + Represents small checker board pattern. + + + + + Represents large checker board pattern. + + + + + Represents outlined diamond pattern. + + + + + Represents solid diamond pattern. + + + + + Represents unknown pattern. + + + + + Represents the picture fill type. + + + + + Stretch + + + + + Stack + + + + + StackAndScale + + + + + Fill format type. + + + + + Represents automatic formatting type. + + + + + Represents none formatting type. + + + + + Solid fill format. + + + + + Gradient fill format. + + + + + Texture fill format(includes picture fill). + + + + + Pattern fill format. + + + + + Inherit the fill properties of the group. + + + + + Represents the gradient color type for the specified fill. + + + + + No gradient color + + + + + One gradient color + + + + + Preset gradient colors + + + + + Two gradient colors + + + + + Represents all direction type of gradient. + + + + + FromUpperLeftCorner + + + + + FromUpperRightCorner + + + + + FromLowerLeftCorner + + + + + FromLowerRightCorner + + + + + FromCenter + + + + + Unknown + + + + + Represents the gradient fill. + + + + + Represents the gradient stop collection. + + + + + Set the gradient fill type and direction. + + Gradient fill type. + The angle. Only applies for GradientFillType.Linear. + The direction type. Only applies for GradientFillType.Radial and GradientFillType.Rectangle. + + + + Gets the gradient fill type. + + + + + Gets the gradient direction type. + + + + + The angle of linear fill. + + + + + Sets the specified fill to a one-color gradient. + Only applies for Excel 2007. + + One gradient color. + The gradient degree. Can be a value from 0.0 (dark) through 1.0 (light). + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Sets the specified fill to a two-color gradient. + Only applies for Excel 2007. + + One gradient color. + Two gradient color. + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Sets the specified fill to a two-color gradient. + Only applies for Excel 2007. + + One gradient color. + The degree of transparency of the color1 as a value from 0.0 (opaque) through 1.0 (clear). + Two gradient color. + The degree of transparency of the color2 as a value from 0.0 (opaque) through 1.0 (clear). + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Represents all Gradient fill type. + + + + + Linear + + + + + Radial + + + + + Rectangle + + + + + Path + + + + + Represents gradient preset color type. + + + + + Brass preset color + + + + + Calm Water preset color + + + + + Chrome preset color + + + + + Chrome II preset color + + + + + Daybreak preset color + + + + + Desert preset color + + + + + Early Sunset preset color + + + + + Fire preset color + + + + + Fog preset color + + + + + Gold preset color + + + + + Gold II preset color + + + + + Horizon preset color + + + + + Late Sunset preset color + + + + + Mahogany preset color + + + + + Moss preset color + + + + + Nightfall preset color + + + + + Ocean preset color + + + + + Parchment preset color + + + + + Peacock preset color + + + + + Rainbow preset color + + + + + Rainbow II preset color + + + + + Sapphire preset color + + + + + Silver preset color + + + + + Wheat preset color + + + + + Unknown preset color. + Only for the preset color (which is not same as any known preset color) in the template workbook. + + + + + Represents the gradient stop. + + + + + The position of the stop. + + + + + Gets the color of this gradient stop. + + + + + Returns or sets the degree of transparency of the area as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Represents the gradient stop collection. + + + + + Add a gradient stop. + + The position of the stop,in unit of percentage. + The color of the stop. + The alpha of the color. + + + + Add a gradient stop. + + The position of the stop,in unit of percentage. + The color of the stop. + The alpha of the color. + + + + Gets the gradient stop by the index. + + The index. + The gradient stop. + + + + Represents gradient shading style. + + + + + Diagonal down shading style + + + + + Diagonal up shading style + + + + + From center shading style + + + + + From corner shading style + + + + + Horizontal shading style + + + + + Vertical shading style + + + + + Unknown shading style.Only for the shading style(which is not for any member of the GradientStyleType) in the template file. + + + + + Represents this fill format should inherit the fill properties of the group. + + + + + Represents mirror type of texture fill + + + + + None + + + + + Horizonal + + + + + Vertical + + + + + Both + + + + + Represents no fill. + + + + + Encapsulates the object that represents pattern fill format + + + + + Gets or sets the fill pattern type + + + + + Gets or sets the background of the . + + + + + Gets and sets the foreground object. + + + + + Gets or sets the foreground . + + + + + Gets and sets the foreground object. + + + + + Gets or sets the transparency of foreground color. + + + + + Gets or sets the transparency of background color. + + + + + Represents picture format option + + + + + Gets or sets the picture fill type. + + + + + Gets or sets how many the picture stack and scale with. + + + + + Gets or sets the left offset for stretching picture. + + + + + Gets or sets the top offset for stretching picture. + + + + + Gets or sets the bottom offset for stretching picture. + + + + + Gets or sets the right offset for stretching picture. + + + + + Represents the format of the shape or text. + + NOTE: This member is now obsolete. Instead, + please use Shape.Fill and Shape.Line properties. + This property will be removed 6 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets fill format + + + NOTE: This member is now obsolete. Instead, + please use ShapeFormat.Fill property. + This property will be removed 6 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets fill format + + + + + Gets line style + + NOTE: This member is now obsolete. Instead, + please use ShapeFormat.Line property. + This property will be removed 6 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets line style + + + + + Represents a object that specifies shadow effect for the chart element or shape. + + + + + Represents a object that specifies glow effect for the chart element or shape. + + + + + Clears the glow effect of the shape. + + + + + Indicates if the shape has glow effect data. + + + + + + + Indicates if the shape has 3d format data. + + + + + + + Clears the 3D shape properties of the shape. + + + + + Gets and sets the radius of blur to apply to the edges, in unit of points. + + + + + Clears the shadow effect of the chart element or shape. + + + + + Indicates if the shape has shadow effect data. + + + + + + + Encapsulates the object that represents solid fill format + + + + + Gets or sets the . + + + + + Gets and sets the object. + + + + + Returns or sets the degree of transparency of the area as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Encapsulates the object that represents texture fill format + + + + + Gets and sets the texture type + + + + + Gets and sets the image data of the fill. + + + + + Indicates whether tile picture as texture. + + + + + Gets or sets picture format option. + + + + + Gets or sets tile picture option. + + + + + Gets and sets the picture format type. + + + + + Gets and sets the picture format scale. + + + + + Returns or sets the degree of transparency of the area as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Represents the preset texture type. + + + + + Represents Blue Tissue Paper texture type. + + + + + Represents Bouquet texture type. + + + + + Represents Brown Marble texture type. + + + + + Represents Canvas texture type. + + + + + Represents Cork texture type. + + + + + Represents Denim texture type. + + + + + Represents Fish Fossil texture type. + + + + + Represents Granite texture type. + + + + + Represents Green Marble texture type. + + + + + Represents Medium Wood texture type. + + + + + Represents Newsprint texture type. + + + + + Represents Oak texture type. + + + + + Represents Paper Bag texture type. + + + + + Represents Papyrus texture type. + + + + + Represents Parchment texture type. + + + + + Represents Pink Tissue Paper texture type. + + + + + Represents Purple Mesh texture type. + + + + + Represents Recycled Paper texture type. + + + + + Represents Sand texture type. + + + + + Represents Stationery texture type. + + + + + Represents Walnut Droplets texture type. + + + + + Represents Water Droplets texture type. + + + + + Represents White Marble texture type. + + + + + Represents Woven Mat texture type. + + + + + Represents Unknown texture type. + + + + + Represents the Forms control: Button + + + + [C#] + + //Create a new Workbook. + Workbook workbook = new Workbook(); + + //Get the first worksheet in the workbook. + Worksheet sheet = workbook.Worksheets[0]; + + //Add a new button to the worksheet. + Aspose.Cells.Button button = sheet.Shapes.AddButton(2, 0, 2, 0, 28, 80); + + //Set the caption of the button. + button.Text = "Aspose"; + + //Set the Placement Type, the way the + //button is attached to the cells. + button.Placement = PlacementType.FreeFloating; + + //Set the font name. + button.Font.Name = "Tahoma"; + + //Set the caption string bold. + button.Font.IsBold = true; + + //Set the color to blue. + button.Font.Color = Color.Blue; + + //Set the hyperlink for the button. + button.AddHyperlink("http://www.aspose.com/"); + + //Saves the file. + workbook.Save(@"d:\test\tstbutton.xls"); + + [VB.NET] + + 'Create a new Workbook. + Dim workbook As Workbook = New Workbook() + + 'Get the first worksheet in the workbook. + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Add a new button to the worksheet. + Dim button As Aspose.Cells.Button = sheet.Shapes.AddButton(2, 0, 2, 0, 28, 80) + + 'Set the caption of the button. + button.Text = "Aspose" + + 'Set the Placement Type, the way the + 'button is attached to the cells. + button.Placement = PlacementType.FreeFloating + + 'Set the font name. + button.Font.Name = "Tahoma" + + 'Set the caption string bold. + button.Font.IsBold = True + + 'Set the color to blue. + button.Font.Color = Color.Blue + + 'Set the hyperlink for the button. + button.AddHyperlink("http://www.aspose.com/") + + 'Saves the file. + workbook.Save("d:\test\tstbutton.xls") + + + + + + Represents a check box object in a worksheet. + + + + [C#] + + int index = excel.Worksheets[0].CheckBoxes.Add(15, 15, 20, 100); + CheckBox checkBox = excel.Worksheets[0].CheckBoxes[index]; + checkBox.Text = "Check Box 1"; + + + [Visual Basic] + + Dim index as integer = excel.Worksheets(0).CheckBoxes.Add(15, 15, 20, 100) + Dim checkBox as CheckBox = excel.Worksheets(0).CheckBoxes[index]; + checkBox.Text = "Check Box 1" + + + + + + Indicates if the checkbox is checked or not. + + + + + Gets or set checkbox' value. + + NOTE: This member is now obsolete. Instead, + please use CheckBox.CheckValueType property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or set checkbox' value. + + + + + Indicates whether the combobox has 3-D shading. + + + + + Represents a collection of objects in a worksheet. + + + + [C#] + + int index = excel.Worksheets[0].CheckBoxes.Add(15, 15, 20, 100); + CheckBox checkBox = excel.Worksheets[0].CheckBoxes[index]; + checkBox.Text = "Check Box 1"; + + + [Visual Basic] + + Dim index as integer = excel.Worksheets(0).CheckBoxes.Add(15, 15, 20, 100) + Dim checkBox as CheckBox = excel.Worksheets(0).CheckBoxes[index]; + checkBox.Text = "Check Box 1" + + + + + + Adds a checkBox to the collection. + + Upper left row index. + Upper left column index. + Height of checkBox, in unit of pixel. + Width of checkBox, in unit of pixel. + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Represents the check value type of the check box. + + + + + UnChecked + + + + + Checked + + + + + Mixed + + + + + Represents the control form ComboBox. + + + + + [C#] + + //Create a new Workbook. + Workbook workbook = new Workbook(); + + //Get the first worksheet. + Worksheet sheet = workbook.Worksheets[0]; + + //Get the worksheet cells collection. + Cells cells = sheet.Cells; + + //Input a value. + cells["B3"].PutValue("Employee:"); + + //Set it bold. + cells["B3"].Style.Font.IsBold = true; + + //Input some values that denote the input range + //for the combo box. + cells["A2"].PutValue("Emp001"); + cells["A3"].PutValue("Emp002"); + cells["A4"].PutValue("Emp003"); + cells["A5"].PutValue("Emp004"); + cells["A6"].PutValue("Emp005"); + cells["A7"].PutValue("Emp006"); + + //Add a new combo box. + Aspose.Cells.ComboBox comboBox = sheet.Shapes.AddComboBox(2, 0, 2, 0, 22, 100); + + //Set the linked cell; + comboBox.LinkedCell = "A1"; + + //Set the input range. + comboBox.InputRange = "A2:A7"; + + //Set no. of list lines displayed in the combo + //box's list portion. + comboBox.DropDownLines = 5; + + //Set the combo box with 3-D shading. + comboBox.Shadow = true; + + //AutoFit Columns + sheet.AutoFitColumns(); + + //Saves the file. + workbook.Save(@"d:\test\tstcombobox.xls"); + + [VB.NET] + + 'Create a new Workbook. + Dim workbook As Workbook = New Workbook() + + 'Get the first worksheet. + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Get the worksheet cells collection. + Dim cells As Cells = sheet.Cells + + 'Input a value. + cells("B3").PutValue("Employee:") + + 'Set it bold. + cells("B3").Style.Font.IsBold = True + + 'Input some values that denote the input range + 'for the combo box. + cells("A2").PutValue("Emp001") + cells("A3").PutValue("Emp002") + cells("A4").PutValue("Emp003") + cells("A5").PutValue("Emp004") + cells("A6").PutValue("Emp005") + cells("A7").PutValue("Emp006") + + 'Add a new combo box. + Dim comboBox As Aspose.Cells.ComboBox = sheet.Shapes.AddComboBox(2, 0, 2, 0, 22, 100) + + 'Set the linked cell; + comboBox.LinkedCell = "A1" + + 'Set the input range. + comboBox.InputRange = "A2:A7" + + 'Set no. of list lines displayed in the combo + 'box's list portion. + comboBox.DropDownLines = 5 + + 'Set the combo box with 3-D shading. + comboBox.Shadow = True + + 'AutoFit Columns + sheet.AutoFitColumns() + + 'Saves the file. + workbook.Save("d:\test\tstcombobox.xls") + + + + + + + Gets or sets the index number of the currently selected item in a list box or combo box. + Zero-based. + + -1 presents no item is selected. + + + + Gets the selected value of the combox box. + + + + + Gets the selected cell in the input range of the combo box. + + + + + Indicates whether the combobox has 3-D shading. + + + + + Gets or sets the number of list lines displayed in the drop-down portion of a combo box. + + + + + Represents the dialog box. + + + + + Encapsulates the object that represents a groupbox in a spreadsheet. + + + + + [C#] + + //Instantiate a new Workbook. + Workbook excelbook = new Workbook(); + + //Add a group box to the first worksheet. + Aspose.Cells.GroupBox box = excelbook.Worksheets[0].Shapes.AddGroupBox(1, 0, 1, 0, 300, 250); + + //Set the caption of the group box. + box.Text = "Age Groups"; + box.Placement = PlacementType.FreeFloating; + + //Make it 2-D box. + box.Shadow = false; + + //Add a radio button. + Aspose.Cells.RadioButton radio1 = excelbook.Worksheets[0].Shapes.AddRadioButton(3, 0, 2, 0, 30, 110); + + //Set its text string. + radio1.Text = "20-29"; + + //Set A1 cell as a linked cell for the radio button. + radio1.LinkedCell = "A1"; + + //Make the radio button 3-D. + radio1.Shadow = true; + + //Set the foreground color of the radio button. + radio1.FillFormat.ForeColor = Color.LightGreen; + + //Set the line style of the radio button. + radio1.LineFormat.Style = MsoLineStyle.ThickThin; + + //Set the weight of the radio button. + radio1.LineFormat.Weight = 4; + + //Set the line color of the radio button. + radio1.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the radio button. + radio1.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Make the line format visible. + radio1.LineFormat.IsVisible = true; + + //Make the fill format visible. + radio1.FillFormat.IsVisible = true; + + //Add another radio button. + Aspose.Cells.RadioButton radio2 = excelbook.Worksheets[0].Shapes.AddRadioButton(6, 0, 2, 0, 30, 110); + + //Set its text string. + radio2.Text = "30-39"; + + //Set A1 cell as a linked cell for the radio button. + radio2.LinkedCell = "A1"; + + //Make the radio button 3-D. + radio2.Shadow = true; + + //Set the foreground color of the radio button. + radio2.FillFormat.ForeColor = Color.LightGreen; + + //Set the line style of the radio button. + radio2.LineFormat.Style = MsoLineStyle.ThickThin; + + //Set the weight of the radio button. + radio2.LineFormat.Weight = 4; + + //Set the line color of the radio button. + radio2.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the radio button. + radio2.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Make the line format visible. + radio2.LineFormat.IsVisible = true; + + //Make the fill format visible. + radio2.FillFormat.IsVisible = true; + + //Add another radio button. + Aspose.Cells.RadioButton radio3 = excelbook.Worksheets[0].Shapes.AddRadioButton(9, 0, 2, 0, 30, 110); + + //Set its text string. + radio3.Text = "40-49"; + + //Set A1 cell as a linked cell for the radio button. + radio3.LinkedCell = "A1"; + + //Make the radio button 3-D. + radio3.Shadow = true; + + //Set the foreground color of the radio button. + radio3.FillFormat.ForeColor = Color.LightGreen; + + //Set the line style of the radio button. + radio3.LineFormat.Style = MsoLineStyle.ThickThin; + + //Set the weight of the radio button. + radio3.LineFormat.Weight = 4; + + //Set the line color of the radio button. + radio3.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the radio button. + radio3.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Make the line format visible. + radio3.LineFormat.IsVisible = true; + + //Make the fill format visible. + radio3.FillFormat.IsVisible = true; + + //Get the shapes. + Aspose.Cells.Shape[] shapeobjects = new Aspose.Cells.Shape[] { box, radio1, radio2, radio3 }; + + //Group the shapes. + Aspose.Cells.GroupShape group = excelbook.Worksheets[0].Shapes.Group(shapeobjects); + + //Save the excel file. + excelbook.Save("d:\\test\\groupshapes.xls"); + + [VB.NET] + + 'Instantiate a new Workbook. + Dim excelbook As Workbook = New Workbook() + + 'Add a group box to the first worksheet. + Dim box As Aspose.Cells.GroupBox = excelbook.Worksheets(0).Shapes.AddGroupBox(1, 0, 1, 0, 300, 250) + + 'Set the caption of the group box. + box.Text = "Age Groups" + box.Placement = PlacementType.FreeFloating + + 'Make it 2-D box. + box.Shadow = False + + 'Add a radio button. + Dim radio1 As Aspose.Cells.RadioButton = excelbook.Worksheets(0).Shapes.AddRadioButton(3, 0, 2, 0, 30, 110) + + 'Set its text string. + radio1.Text = "20-29" + + 'Set A1 cell as a linked cell for the radio button. + radio1.LinkedCell = "A1" + + 'Make the radio button 3-D. + radio1.Shadow = True + + 'Set the foreground color of the radio button. + radio1.FillFormat.ForeColor = Color.LightGreen + + 'Set the line style of the radio button. + radio1.LineFormat.Style = MsoLineStyle.ThickThin + + 'Set the weight of the radio button. + radio1.LineFormat.Weight = 4 + + 'Set the line color of the radio button. + radio1.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the radio button. + radio1.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Make the line format visible. + radio1.LineFormat.IsVisible = True + + 'Make the fill format visible. + radio1.FillFormat.IsVisible = True + + 'Add another radio button. + Dim radio2 As Aspose.Cells.RadioButton = excelbook.Worksheets(0).Shapes.AddRadioButton(6, 0, 2, 0, 30, 110) + + 'Set its text string. + radio2.Text = "30-39" + + 'Set A1 cell as a linked cell for the radio button. + radio2.LinkedCell = "A1" + + 'Make the radio button 3-D. + radio2.Shadow = True + + 'Set the foreground color of the radio button. + radio2.FillFormat.ForeColor = Color.LightGreen + + 'Set the line style of the radio button. + radio2.LineFormat.Style = MsoLineStyle.ThickThin + + 'Set the weight of the radio button. + radio2.LineFormat.Weight = 4 + + 'Set the line color of the radio button. + radio2.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the radio button. + radio2.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Make the line format visible. + radio2.LineFormat.IsVisible = True + + 'Make the fill format visible. + radio2.FillFormat.IsVisible = True + + 'Add another radio button. + Dim radio3 As Aspose.Cells.RadioButton = excelbook.Worksheets(0).Shapes.AddRadioButton(9, 0, 2, 0, 30, 110) + + 'Set its text string. + radio3.Text = "40-49" + + 'Set A1 cell as a linked cell for the radio button. + radio3.LinkedCell = "A1" + + 'Make the radio button 3-D. + radio3.Shadow = True + + 'Set the foreground color of the radio button. + radio3.FillFormat.ForeColor = Color.LightGreen + + 'Set the line style of the radio button. + radio3.LineFormat.Style = MsoLineStyle.ThickThin + + 'Set the weight of the radio button. + radio3.LineFormat.Weight = 4 + + 'Set the line color of the radio button. + radio3.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the radio button. + radio3.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Make the line format visible. + radio3.LineFormat.IsVisible = True + + 'Make the fill format visible. + radio3.FillFormat.IsVisible = True + + 'Get the shapes. + Dim shapeobjects() As Aspose.Cells.Shape = New Aspose.Cells.Shape() {box, radio1, radio2, radio3} + + 'Group the shapes. + Dim group As Aspose.Cells.GroupShape = excelbook.Worksheets(0).Shapes.Group(shapeobjects) + + 'Save the excel file. + excelbook.Save("d:\test\groupshapes.xls") + + + + + + Indicates whether the groupbox has shadow. + + + + + Encapsulates the object that represents a label in a spreadsheet. + + + + //Create a new Workbook. + Workbook workbook = new Workbook(); + + //Get the first worksheet in the workbook. + Worksheet sheet = workbook.Worksheets[0]; + + //Add a new label to the worksheet. + Aspose.Cells.Label label = sheet.Shapes.AddLabel(2, 0, 2, 0, 60, 120); + + //Set the caption of the label. + label.Text = "This is a Label"; + + //Set the Placement Type, the way the + //label is attached to the cells. + label.Placement = PlacementType.FreeFloating; + + //Set the fill color of the label. + label.FillFormat.ForeColor = Color.Yellow; + + //Saves the file. + workbook.Save(@"d:\test\tstlabel.xls"); + + [VB.NET] + + 'Create a new Workbook. + Dim workbook As Workbook = New Workbook() + + 'Get the first worksheet in the workbook. + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Add a new label to the worksheet. + Dim label As Aspose.Cells.Label = sheet.Shapes.AddLabel(2, 0, 2, 0, 60, 120) + + 'Set the caption of the label. + label.Text = "This is a Label" + + 'Set the Placement Type, the way the + 'label is attached to the cells. + label.Placement = PlacementType.FreeFloating + + 'Set the fill color of the label. + label.FillFormat.ForeColor = Color.Yellow + + 'Saves the file. + workbook.Save("d:\test\tstlabel.xls") + + + + + + Represents a list box object. + + + + + [C#] + + //Create a new Workbook. + Workbook workbook = new Workbook(); + + //Get the first worksheet. + Worksheet sheet = workbook.Worksheets[0]; + + //Get the worksheet cells collection. + Cells cells = sheet.Cells; + + //Input a value. + cells["B3"].PutValue("Choose Dept:"); + + //Set it bold. + cells["B3"].Style.Font.IsBold = true; + + //Input some values that denote the input range + //for the list box. + cells["A2"].PutValue("Sales"); + cells["A3"].PutValue("Finance"); + cells["A4"].PutValue("MIS"); + cells["A5"].PutValue("R&D"); + cells["A6"].PutValue("Marketing"); + cells["A7"].PutValue("HRA"); + + //Add a new list box. + ListBox listBox = sheet.Shapes.AddListBox(2, 0, 3, 0, 122, 100); + + //Set the placement type. + listBox.Placement = PlacementType.FreeFloating; + + //Set the linked cell. + listBox.LinkedCell = "A1"; + + //Set the input range. + listBox.InputRange = "A2:A7"; + + //Set the selection tyle. + listBox.SelectionType = SelectionType.Single; + + //Set the list box with 3-D shading. + listBox.Shadow = true; + + //Saves the file. + workbook.Save(@"d:\test\tstlistbox.xls"); + + [VB.NET] + + 'Create a new Workbook. + Dim workbook As Aspose.Cells.Workbook = New Aspose.Cells.Workbook() + + 'Get the first worksheet. + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Get the worksheet cells collection. + Dim cells As Cells = sheet.Cells + + 'Input a value. + cells("B3").PutValue("Choose Dept:") + + 'Set it bold. + cells("B3").Style.Font.IsBold = True + + 'Input some values that denote the input range + 'for the list box. + cells("A2").PutValue("Sales") + cells("A3").PutValue("Finance") + cells("A4").PutValue("MIS") + cells("A5").PutValue("R&D") + cells("A6").PutValue("Marketing") + cells("A7").PutValue("HRA") + + 'Add a new list box. + Dim listBox As Aspose.Cells.ListBox = sheet.Shapes.AddListBox(2, 0, 3, 0, 122, 100) + + 'Set the placement type. + listBox.Placement = PlacementType.FreeFloating + + 'Set the linked cell. + listBox.LinkedCell = "A1" + + 'Set the input range. + listBox.InputRange = "A2:A7" + + 'Set the selection tyle. + listBox.SelectionType = SelectionType.Single + + 'Set the list box with 3-D shading. + listBox.Shadow = True + + 'Saves the file. + workbook.Save("d:\test\tstlistbox.xls") + + + + + + Gets the number of items in the list box. + + + + + Gets or sets the index number of the currently selected item in a list box or combo box. + Zero-based. + + -1 presents no item is selected. + + + + Sets whether the item is selected + + The item index + Whether the item is selected. + True means that this item should be selected. + False means that this item should be unselected. + + + + + Indicates whether the item is selected. + + The item index. + whether the item is selected. + + + + Gets the selected cells. + Returns null if the input range is not set or no item is selected + + + + + Indicates whether the combobox has 3-D shading. + + + + + Gets or sets the selection mode of the specified list box. + + + + + Specifies the amount by which the control's value is changed + when the user clicks on the scrollbar's page up or page down region. + + + + + Represents a radio button. + + + + + Indicates if the radiobutton is checked or not. + + + + + Indicates whether the combobox has 3-D shading. + + + + + Gets the GroupBox that contains this RadioButton. + + + + + Represents a scroll bar object. + + Scroll value must be between 0 and 30000. + + + + Gets or sets the current value. + + + + + Gets or sets the minimum value of a scroll bar or spinner range. + + + + + Gets or sets the maximum value of a scroll bar or spinner range. + + + + + Gets or sets the amount that the scroll bar or spinner is incremented a line scroll. + + + + + Gets or sets page change + + + + + Indicates whether the shape has 3-D shading. + + + + + Indicates whether this is a horizontal scroll bar. + + + + + The selection type of list box. + + + + + Sigle selection type. + + + + + Multiple selection type. + + + + + Extend selection type. + + + + + Represents the Forms control: Spinner. + + Scroll value must be between 0 and 30000. + + + + Gets or sets the current value. + + + + + Gets or sets the minimum value of a scroll bar or spinner range. + + + + + Gets or sets the maximum value of a scroll bar or spinner range. + + + + + Gets or sets the amount that the scroll bar or spinner is incremented a line scroll. + + + + + Indicates whether the shape has 3-D shading. + + + + + Indicates whether this is a horizontal scroll bar. + + + + + Represents a custom geometric shape. + + + + + Gets path collection information when shape is a NotPrimitive autoshape + + + + + Represents a geometric shape. + + + + + Gets a collection of shape adjust value + + + + + Encapsulates a shape guide specifies the presence of a shape guide that will be used to + govern the geometry of the specified shape + + + + + Gets or sets value of this guide + + + + + Encapsulates a collection of shape guide + + + + + Gets a shape guide by index + + + + + + + + + Represents a creation path consisting of a series of moves, lines and curves that when combined will form a geometric shape. + + + + + Gets list + + + + + Initializes a new instance of the class. + + + + + Represents path collection information in NotPrimitive autoshape + + + + + Gets the count of paths + + + + + Gets a creation path. + + The index. + Returns object. + + + + Add a creation path. + + Returns object. + + + + Represents an x-y coordinate within the path coordinate space. + + + + + Gets and sets x coordinate for this position coordinate. + + + + + Gets y coordinate for this position coordinate. + + + + + Represents all shape path points. + + + + + Gets shape path point by index. + + The index + Returns object + + + + Adds a path point. + + The x coordinate. + The y coordinate. + + + + Represents path segment type. + + + + + Straight line segment + + + + + Cubic Bezier curve + + + + + Start a new path + + + + + If the starting POINT and the end POINT are not the same, a single + straight line is drawn to connect the starting POINT and ending POINT of the path. + + + + + The end of the current path + + + + + Escape + + + + + An arc + + + + + Unknown + + + + + This class specifies the visual shape properties for a chart element or shape. + + + + + Represents a object that specifies glow effect for the chart element or shape. + + + + + Clears the glow effect of the shape. + + + + + Indicates if the shape has glow effect data. + + + + + + + Represents a object that specifies 3D shape properties for the chart element or shape. + + + + + Indicates if the shape has 3d format data. + + + + + + + Clears the 3D shape properties of the shape. + + + + + Gets and sets the radius of blur to apply to the edges, in unit of points. + + + + + Represents a object that specifies shadow effect for the chart element or shape. + + + + + Clears the shadow effect of the chart element or shape. + + + + + Indicates if the shape has shadow effect data. + + + + + + + Represents a segment path in a path of the freeform. + + + + + Gets the path segment type + + + + + Gets the points in path segment + + + + + Represents a creation path consisting of a series of moves, lines and curves that when combined will form a geometric shape. + + + + + Add a segment path in creation path. + + The path type. + Returns the position of object in the list. + + + + Gets object. + + The index. + Returns a object. + + + + Represents the group shape which contains the individual shapes. + + + + + [C#] + + //Instantiate a new Workbook. + Workbook excelbook = new Workbook(); + + //Add a group box to the first worksheet. + Aspose.Cells.GroupBox box = excelbook.Worksheets[0].Shapes.AddGroupBox(1, 0, 1, 0, 300, 250); + + //Set the caption of the group box. + box.Text = "Age Groups"; + box.Placement = PlacementType.FreeFloating; + + //Make it 2-D box. + box.Shadow = false; + + //Add a radio button. + Aspose.Cells.RadioButton radio1 = excelbook.Worksheets[0].Shapes.AddRadioButton(3, 0, 2, 0, 30, 110); + + //Set its text string. + radio1.Text = "20-29"; + + //Set A1 cell as a linked cell for the radio button. + radio1.LinkedCell = "A1"; + + //Make the radio button 3-D. + radio1.Shadow = true; + + //Set the foreground color of the radio button. + radio1.FillFormat.ForeColor = Color.LightGreen; + + //Set the line style of the radio button. + radio1.LineFormat.Style = MsoLineStyle.ThickThin; + + //Set the weight of the radio button. + radio1.LineFormat.Weight = 4; + + //Set the line color of the radio button. + radio1.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the radio button. + radio1.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Make the line format visible. + radio1.LineFormat.IsVisible = true; + + //Make the fill format visible. + radio1.FillFormat.IsVisible = true; + + //Add another radio button. + Aspose.Cells.RadioButton radio2 = excelbook.Worksheets[0].Shapes.AddRadioButton(6, 0, 2, 0, 30, 110); + + //Set its text string. + radio2.Text = "30-39"; + + //Set A1 cell as a linked cell for the radio button. + radio2.LinkedCell = "A1"; + + //Make the radio button 3-D. + radio2.Shadow = true; + + //Set the foreground color of the radio button. + radio2.FillFormat.ForeColor = Color.LightGreen; + + //Set the line style of the radio button. + radio2.LineFormat.Style = MsoLineStyle.ThickThin; + + //Set the weight of the radio button. + radio2.LineFormat.Weight = 4; + + //Set the line color of the radio button. + radio2.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the radio button. + radio2.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Make the line format visible. + radio2.LineFormat.IsVisible = true; + + //Make the fill format visible. + radio2.FillFormat.IsVisible = true; + + //Add another radio button. + Aspose.Cells.RadioButton radio3 = excelbook.Worksheets[0].Shapes.AddRadioButton(9, 0, 2, 0, 30, 110); + + //Set its text string. + radio3.Text = "40-49"; + + //Set A1 cell as a linked cell for the radio button. + radio3.LinkedCell = "A1"; + + //Make the radio button 3-D. + radio3.Shadow = true; + + //Set the foreground color of the radio button. + radio3.FillFormat.ForeColor = Color.LightGreen; + + //Set the line style of the radio button. + radio3.LineFormat.Style = MsoLineStyle.ThickThin; + + //Set the weight of the radio button. + radio3.LineFormat.Weight = 4; + + //Set the line color of the radio button. + radio3.LineFormat.ForeColor = Color.Blue; + + //Set the dash style of the radio button. + radio3.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Make the line format visible. + radio3.LineFormat.IsVisible = true; + + //Make the fill format visible. + radio3.FillFormat.IsVisible = true; + + //Get the shapes. + Aspose.Cells.Shape[] shapeobjects = new Aspose.Cells.Shape[] { box, radio1, radio2, radio3 }; + + //Group the shapes. + Aspose.Cells.GroupShape group = excelbook.Worksheets[0].Shapes.Group(shapeobjects); + + //Save the excel file. + excelbook.Save("d:\\test\\groupshapes.xls"); + + [VB.NET] + + 'Instantiate a new Workbook. + Dim excelbook As Workbook = New Workbook() + + 'Add a group box to the first worksheet. + Dim box As Aspose.Cells.GroupBox = excelbook.Worksheets(0).Shapes.AddGroupBox(1, 0, 1, 0, 300, 250) + + 'Set the caption of the group box. + box.Text = "Age Groups" + box.Placement = PlacementType.FreeFloating + + 'Make it 2-D box. + box.Shadow = False + + 'Add a radio button. + Dim radio1 As Aspose.Cells.RadioButton = excelbook.Worksheets(0).Shapes.AddRadioButton(3, 0, 2, 0, 30, 110) + + 'Set its text string. + radio1.Text = "20-29" + + 'Set A1 cell as a linked cell for the radio button. + radio1.LinkedCell = "A1" + + 'Make the radio button 3-D. + radio1.Shadow = True + + 'Set the foreground color of the radio button. + radio1.FillFormat.ForeColor = Color.LightGreen + + 'Set the line style of the radio button. + radio1.LineFormat.Style = MsoLineStyle.ThickThin + + 'Set the weight of the radio button. + radio1.LineFormat.Weight = 4 + + 'Set the line color of the radio button. + radio1.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the radio button. + radio1.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Make the line format visible. + radio1.LineFormat.IsVisible = True + + 'Make the fill format visible. + radio1.FillFormat.IsVisible = True + + 'Add another radio button. + Dim radio2 As Aspose.Cells.RadioButton = excelbook.Worksheets(0).Shapes.AddRadioButton(6, 0, 2, 0, 30, 110) + + 'Set its text string. + radio2.Text = "30-39" + + 'Set A1 cell as a linked cell for the radio button. + radio2.LinkedCell = "A1" + + 'Make the radio button 3-D. + radio2.Shadow = True + + 'Set the foreground color of the radio button. + radio2.FillFormat.ForeColor = Color.LightGreen + + 'Set the line style of the radio button. + radio2.LineFormat.Style = MsoLineStyle.ThickThin + + 'Set the weight of the radio button. + radio2.LineFormat.Weight = 4 + + 'Set the line color of the radio button. + radio2.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the radio button. + radio2.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Make the line format visible. + radio2.LineFormat.IsVisible = True + + 'Make the fill format visible. + radio2.FillFormat.IsVisible = True + + 'Add another radio button. + Dim radio3 As Aspose.Cells.RadioButton = excelbook.Worksheets(0).Shapes.AddRadioButton(9, 0, 2, 0, 30, 110) + + 'Set its text string. + radio3.Text = "40-49" + + 'Set A1 cell as a linked cell for the radio button. + radio3.LinkedCell = "A1" + + 'Make the radio button 3-D. + radio3.Shadow = True + + 'Set the foreground color of the radio button. + radio3.FillFormat.ForeColor = Color.LightGreen + + 'Set the line style of the radio button. + radio3.LineFormat.Style = MsoLineStyle.ThickThin + + 'Set the weight of the radio button. + radio3.LineFormat.Weight = 4 + + 'Set the line color of the radio button. + radio3.LineFormat.ForeColor = Color.Blue + + 'Set the dash style of the radio button. + radio3.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Make the line format visible. + radio3.LineFormat.IsVisible = True + + 'Make the fill format visible. + radio3.FillFormat.IsVisible = True + + 'Get the shapes. + Dim shapeobjects() As Aspose.Cells.Shape = New Aspose.Cells.Shape() {box, radio1, radio2, radio3} + + 'Group the shapes. + Dim group As Aspose.Cells.GroupShape = excelbook.Worksheets(0).Shapes.Group(shapeobjects) + + 'Save the excel file. + excelbook.Save("d:\test\groupshapes.xls") + + + + + + Gets the child shape by index. + + the child shape index. + return the child shape. + + + + Ungroups the shape items. + + If the group shape is grouped by another group shape,nothing will be done. + + + + Gets the shapes grouped by this shape. + + + + + Specifies the type (format) of an image. + + + + + An unknown image type. + + + + + Windows Enhanced Metafile. + + + + + Windows Metafile. + + + + + Macintosh PICT. + + + + + JPEG JFIF. + + + + + Portable Network Graphics. + + + + + Windows Bitmap + + + + + Gif + + + + + Tiff + + + + + Svg + + + + + Svm + + + + + glTF + + + + + Windows Enhanced Metafile which is more compatible with Office. + + + + + Weppy image format + + + + + Represents the line shape. + + + + + [C#] + + //Instantiate a new Workbook. + Workbook workbook = new Workbook(); + + //Get the first worksheet in the book. + Worksheet worksheet = workbook.Worksheets[0]; + + //Add a new line to the worksheet. + Aspose.Cells.LineShape line1 = worksheet.Shapes.AddLine(5, 0, 1, 0, 0, 250); + + //Set the line dash style + line1.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Set the placement. + line1.Placement = PlacementType.FreeFloating; + + //Add another line to the worksheet. + Aspose.Cells.LineShape line2 = worksheet.Shapes.AddLine(7, 0, 1, 0, 85, 250); + + //Set the line dash style. + line2.LineFormat.DashStyle = MsoLineDashStyle.DashLongDash; + + //Set the weight of the line. + line2.LineFormat.Weight = 4; + + //Set the placement. + line2.Placement = PlacementType.FreeFloating; + + //Add the third line to the worksheet. + Aspose.Cells.LineShape line3 = worksheet.Shapes.AddLine(13, 0, 1, 0, 0, 250); + + //Set the line dash style + line3.LineFormat.DashStyle = MsoLineDashStyle.Solid; + + //Set the placement. + line3.Placement = PlacementType.FreeFloating; + + //Make the gridlines invisible in the first worksheet. + workbook.Worksheets[0].IsGridlinesVisible = false; + + //Save the excel file. + workbook.Save("d:\\test\\tstlines.xls"); + + [VB.NET] + + 'Instantiate a new Workbook. + Dim workbook As Workbook = New Workbook() + + 'Get the first worksheet in the book. + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Add a new line to the worksheet. + Dim line1 As Aspose.Cells.LineShape = worksheet.Shapes.AddLine(5, 0, 1, 0, 0, 250) + + 'Set the line dash style + line1.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Set the placement. + line1.Placement = PlacementType.FreeFloating + + 'Add another line to the worksheet. + Dim line2 As Aspose.Cells.LineShape = worksheet.Shapes.AddLine(7, 0, 1, 0, 85, 250) + + 'Set the line dash style. + line2.LineFormat.DashStyle = MsoLineDashStyle.DashLongDash + + 'Set the weight of the line. + line2.LineFormat.Weight = 4 + + 'Set the placement. + line2.Placement = PlacementType.FreeFloating + + 'Add the third line to the worksheet. + Dim line3 As Aspose.Cells.LineShape = worksheet.Shapes.AddLine(13, 0, 1, 0, 0, 250) + + 'Set the line dash style + line3.LineFormat.DashStyle = MsoLineDashStyle.Solid + + 'Set the placement. + line3.Placement = PlacementType.FreeFloating + + 'Make the gridlines invisible in the first worksheet. + workbook.Worksheets(0).IsGridlinesVisible = False + + 'Save the excel file. + workbook.Save("d:\test\tstlines.xls") + + + + + + Gets and sets the begin arrow head style of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.BeginArrowheadStyle property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the begin arrow head width of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.BeginArrowheadWidth property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the begin arrow head length of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.BeginArrowheadLength property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the end arrow head style of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.EndArrowheadStyle property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the end arrow head width of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.EndArrowheadWidth property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the end arrow head length of the line. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line.EndArrowheadLength property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Encapsulates the object that represents the line format. + + + + + [C#] + //Applying a dotted line style on the lines of an NSeries + chart.NSeries[0].Border.Style = LineType.Dot; + chart.NSeries[0].Border.Color = Color.Red; + //Applying a triangular marker style on the data markers of an NSeries + chart.NSeries[0].MarkerStyle = ChartMarkerType.Triangle; + //Setting the weight of all lines in an NSeries to medium + chart.NSeries[1].Border.Weight = WeightType.MediumLine; + chart.NSeries[1].Border.Color = Color.Green; + + [Visual Basic] + + 'Applying a dotted line style on the lines of an NSeries + chart.NSeries(0).Border.Style = LineType.Dot + chart.NSeries(0).Border.Color = Color.Red + 'Applying a triangular marker style on the data markers of an NSeries + chart.NSeries(0).MarkerStyle = ChartMarkerType.Triangle + 'Setting the weight of all lines in an NSeries to medium + chart.NSeries(1).Border.Weight = WeightType.MediumLine + + + + + + Specifies the compound line type + + + + + Specifies the dash line type + + + + + Specifies the ending caps. + + + + + Specifies the joining caps. + + + + + Specifies an arrowhead for the begin of a line. + + + + + Specifies an arrowhead for the end of a line. + + + + + Specifies the length of the arrowhead for the begin of a line. + + + + + Specifies the length of the arrowhead for the end of a line. + + + + + Specifies the width of the arrowhead for the begin of a line. + + + + + Specifies the width of the arrowhead for the end of a line. + + + + + Gets and sets the theme color. + + + If the foreground color is not a theme color, NULL will be returned. + + + + + Represents the of the line. + + + + + Returns or sets the degree of transparency of the line as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Represents the style of the line. + + + + + Gets or sets the of the line. + + + + + Gets or sets the weight of the line in unit of points. + + + + + Gets or sets the weight of the line in unit of pixels. + + + + + Gets or sets format type. + + + + + Indicates whether the color of line is auotmatic assigned. + + + + + Represents whether the line is visible. + + + + + Indicates whether this line style is auto assigned. + + + + + Represents gradient fill. + + + + + Represents the caps of a line + + + + + Square protrudes by half line width. + + + + + Rounded ends. + + + + + Line ends at end point. + + + + + None cap + + + + + Represents all setting of the line. + + + + + Specifies the line compound type. + + + + + Specifies the line dash type. + + + + + Specifies the ending caps. + + + + + Specifies the line join type. + + + + + Gets and sets the begin arrow type of the line. + + + + + Gets and sets the begin arrow width type of the line. + + + + + Gets and sets the begin arrow length type of the line. + + + + + Gets and sets the end arrow type of the line. + + + + + Gets and sets the end arrow width type of the line. + + + + + Gets and sets the end arrow length type of the line. + + + + + Gets or sets the weight of the line in unit of points. + + + + + Represents the join styles of a line. + + + + + Round joint + + + + + Bevel joint + + + + + Miter joint + + + + + None joint + + + + + Enumerates the type of border or line. + + + + + Represents a dark gray line. + + + + + Represent a dash line. + + + + + Represents a dash-dot line + + + + + Represents a dash-dot-dot line. + + + + + Represents a dotted line. + + + + + Represents a light gray line. + + + + + Represents a medium gray line. + + + + + Represent a solid line. + + + + + Represents line and arrowhead formatting. + + + + + Indicates whether the object is visible. + + + + + Returns a Style object that represents the style of the specified range. + + + + + Gets and sets the border line fore color. + + + + + Gets and sets the border line back color. + + + + + Gets or sets the dash style for the specified line. + + + + + Returns or sets the degree of transparency of the specified fill as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Returns or sets the weight of the line ,in units of pt. + + + + + Enumerates the line end width of the shape border line. + + + + + Short line end length + + + + + Medium line end length + + + + + Long line end length + + + + + Enumerates the line end type of the shape border line. + + + + + No line end type. + + + + + Arrow line end type. + + + + + Arrow Stealth line end type. + + + + + Arrow Diamond Line end type. + + + + + Arrow Oval line end type. + + + + + Arrow Open line end type. + + + + + Enumerates the line end width of the shape border line. + + + + + Short line end width. + + + + + Medium line end width. + + + + + Wide line end width. + + + + + Represents office drawing objects type. + + + + + Group + + + + + Line + + + + + Rectangle + + + + + Oval + + + + + Arc + + + + + Chart + + + + + TextBox + + + + + Button + + + + + Picture + + + + + Polygon + + + + + CheckBox + + + + + RadioButton + + + + + Label + + + + + DialogBox + + + + + Spinner + + + + + ScrollBar + + + + + ListBox + + + + + GroupBox + + + + + ComboBox + + + + + Comment + + + + + OleObject + + + + + Only for preserving the drawing object in the template file. + + + + + Only for preserving the drawing object in the xlsx file. + + + + + Slicer + + + + + Web extension + + + + + Smart Art + + + + + Custom xml shape ,such as Ink. + + + + + 3D Model + + + + + Represents fill formatting for a shape. + + + + + Gets and sets the fill fore color. + + + + + Returns or sets the degree of transparency of the specified fill as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Gets and sets the file back color. + + + + + Gets and sets the Texture and Picture fill data. + + + + + Sets the specified fill to a one-color gradient. + + One gradient color. + The gradient degree. Can be a value from 0.0 (dark) through 1.0 (light). + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Gets the texture fill type. + + + + + Indicates whether there is fill. + + + + + Represents fill formatting for a shape. + + + + + Gets and sets the fill fore color. + + + + + Returns or sets the degree of fore color of the specified fill as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Gets and sets the file back color. + + + + + Gets and sets the Texture and Picture fill data. + + + + + Sets the specified fill to a one-color gradient. + + One gradient color. + The gradient degree. Can be a value from 0.0 (dark) through 1.0 (light). + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Gets the texture fill type. + + + + + Indicates whether there is fill. + + + + + Represents the picture format. + + + + + Represents the location of the top of the crop rectangle expressed, expressed as a ratio of the image's height. + + + + + Represents the location of the bottom of the crop rectangle expressed, expressed as a ratio of the image's height. + + + + + Represents the location of the left of the crop rectangle expressed, expressed as a ratio of the image's width. + + + + + Represents the location of the right of the crop rectangle expressed, expressed as a ratio of the image's width. + + + + + Gets and sets the transparent color of the picture. + + + + + Represents the contrast modification for the picture.in unit of percentage. + + + It is between -100% and 100%. It works same as Excel 2007 or above version. + + + + + Represents the brightness modification for the picture in unit of percentage. + + + It is between -100% and 100%. It works same as Excel 2007 or above version. + + + + + Represents gamma of the picture. + + + + + Indicates whether this picture should be displayed in two-color black and white. + + + + + Indicates whether this picture SHOULD be displayed in grayscale. + + + + + Represents style of dash drawing lines. + + + + + Represent a dash line. + + + + + Represents a dash-dot line. + + + + + Represents a dash-dot-dot line. + + + + + Represents a long dash-short dash line. + + + + + Represents a long dash-short dash-dot line. + + + + + Represents a round-dot line. + + + + + Represent a solid line. + + + + + Represents a square-dot line. + + + + + Custom dash style. + + + + + Represents line and arrowhead formatting. + + + + + Indicates whether the object is visible. + + + + + Returns a Style object that represents the style of the specified range. + + + + + Gets and sets the border line fore color. + + + + + Gets and sets the border line back color. + + + + + Gets or sets the dash style for the specified line. + + + + + Returns or sets the degree of transparency of the specified fill as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Returns or sets the weight of the line ,in units of pt. + + + + + Represents style of drawing lines. + + + + + Single line (of width lineWidth) + + + + + Three lines, thin, thick, thin + + + + + Double lines, one thin, one thick + + + + + Double lines, one thick, one thin + + + + + Double lines of equal width + + + + + Represents preset text effect type of WordArt. + + + + + TextEffect1 + + + + + TextEffect2 + + + + + TextEffect3 + + + + + TextEffect4 + + + + + TextEffect5 + + + + + TextEffect6 + + + + + TextEffect7 + + + + + TextEffect8 + + + + + TextEffect9 + + + + + TextEffect10 + + + + + TextEffect11 + + + + + TextEffect12 + + + + + TextEffect13 + + + + + TextEffect14 + + + + + TextEffect15 + + + + + TextEffect16 + + + + + TextEffect17 + + + + + TextEffect18 + + + + + TextEffect19 + + + + + TextEffect20 + + + + + TextEffect21 + + + + + TextEffect22 + + + + + TextEffect23 + + + + + TextEffect24 + + + + + TextEffect25 + + + + + TextEffect26 + + + + + TextEffect27 + + + + + TextEffect28 + + + + + TextEffect29 + + + + + TextEffect30 + + + + + Represents preset text effect shape type of WordArt. + + + + + PlainText + + + + + Stop + + + + + TriangleUp + + + + + TriangleDown + + + + + ChevronUp + + + + + ChevronDown + + + + + RingInside + + + + + RingOutside + + + + + ArchUpCurve + + + + + ArchDownCurve + + + + + CircleCurve + + + + + ButtonCurve + + + + + ArchUpPour + + + + + ArchDownPour + + + + + CirclePour + + + + + ButtonPour + + + + + CurveUp + + + + + CurveDown + + + + + CanUp + + + + + CanDown + + + + + Wave1 + + + + + Wave2 + + + + + DoubleWave1 + + + + + DoubleWave2 + + + + + Inflate + + + + + Deflate + + + + + InflateBottom + + + + + DeflateBottom + + + + + InflateTop + + + + + DeflateTop + + + + + DeflateInflate + + + + + DeflateInflateDeflate + + + + + FadeRight + + + + + FadeLeft + + + + + FadeUp + + + + + FadeDown + + + + + SlantUp + + + + + SlantDown + + + + + CascadeUp + + + + + CascadeDown + + + + + Mixed + + + + + Represents the text frame in a Shape object. + + + + + Indicates if size of shape is adjusted automatically according to its content. + + + + + Indicates whether the margin is auto calculated. + + + + + Indicates whether rotating text with shape. + + + + + Returns the left margin in unit of Points + + + + + Returns the right margin in unit of Points + + + + + Returns the top margin in unit of Points + + + + + Returns the bottom margin in unit of Points + + + + + Represents an OleObject in a worksheet. + + + + + [C#] + //Instantiate a new Workbook. + Workbook workbook = new Workbook(); + //Get the first worksheet. + Worksheet sheet = workbook.Worksheets[0]; + //Define a string variable to store the image path. + string ImageUrl = @"C:\school.jpg"; + //Get the picture into the streams. + FileStream fs = File.OpenRead(ImageUrl); + //Define a byte array. + byte[] imageData = new Byte[fs.Length]; + //Obtain the picture into the array of bytes from streams. + fs.Read(imageData, 0, imageData.Length); + //Close the stream. + fs.Close(); + //Get an excel file path in a variable. + string path = @"C:\Book1.xls"; + //Get the file into the streams. + fs = File.OpenRead(path); + //Define an array of bytes. + byte[] objectData = new Byte[fs.Length]; + //Store the file from streams. + fs.Read(objectData, 0, objectData.Length); + //Close the stream. + fs.Close(); + //Add an Ole object into the worksheet with the image + //shown in MS Excel. + sheet.OleObjects.Add(14, 3, 200, 220, imageData); + //Set embedded ole object data. + sheet.OleObjects[0].ObjectData = objectData; + //Save the excel file + workbook.Save(@"C:\oleobjects.xls"); + + + [Visual Basic] + + 'Instantiate a new Workbook. + Dim workbook As Workbook = New Workbook() + 'Get the first worksheet. + Dim sheet As Worksheet = workbook.Worksheets(0) + 'Define a string variable to store the image path. + Dim ImageUrl As String = @"C:\school.jpg" + 'Get the picture into the streams. + Dim fs As FileStream = File.OpenRead(ImageUrl) + 'Define a byte array. + Dim imageData(fs.Length) As Byte + 'Obtain the picture into the array of bytes from streams. + fs.Read(imageData, 0, imageData.Length) + 'Close the stream. + fs.Close() + 'Get an excel file path in a variable. + Dim path As String = @"C:\Book1.xls" + 'Get the file into the streams. + fs = File.OpenRead(path) + 'Define an array of bytes. + Dim objectData(fs.Length) As Byte + 'Store the file from streams. + fs.Read(objectData, 0, objectData.Length) + 'Close the stream. + fs.Close() + 'Add an Ole object into the worksheet with the image + 'shown in MS Excel. + sheet.OleObjects.Add(14, 3, 200, 220, imageData) + 'Set embedded ole object data. + sheet.OleObjects(0).ObjectData = objectData + 'Save the excel file + workbook.Save("C:\oleobjects.xls") + + + + + + Sets embedded object data. + + Indicates whether the object links to the file. If true, the parameter objectData is ignored. + The embedded object data. + The file name. + Indicates whether diplaying object as an icon. + If true, the orginal image data will be covered by icon. + + The icon label. Only works when displayAsIcon as true. + + + + Sets embedded object data. + + Indicates whether the object links to the file. If true, the parameter objectData is ignored. + The embedded object data. + The file name. + Indicates whether diplaying object as an icon. + If true, the orginal image data will be covered by icon. + + The icon label. Only works when displayAsIcon as true. + Indicates whether automatically updating icon. + + As Aspose can update embedd all file icons, so it's better that you can add correct icon with as false. + + + + + + True indicates that the size of the ole object will be auto changed as the size of snapshop of the embedded content + when the ole object is activated. + + + + + Returns true if the OleObject links to the file. + + + + + True if the specified object is displayed as an icon + and the image will not be auto changed. + + + + + Represents image of ole object as byte array. + + + + + Represents embedded ole object data as byte array. + + + + + Gets the full embedded ole object binary data in the template file. + + + + + Gets or sets the path and name of the source file for the linked image. + + + The default value is an empty string. + If SourceFullName is not an empty string, the image is linked. + If SourceFullName is not an empty string, but Data is null, then the image is linked and not stored in the file. + + + + + Sets the ole native source full file name with path. + + the ole native source full file name + + + + Gets or sets the ProgID of the OLE object. + + + + + Gets and sets the file type of the embedded ole object data + + + + + Returns the source full name of the source file for the linked OLE object. + + Only supports setting the source full name when the file type is OleFileType.Unknown. + Such as wav file ,avi file..etc.. + + + + + Gets and sets the display label of the linked ole object. + + + + + Returns the source full name of the source file for the linked OLE object. + + + NOTE: This member is now obsolete. Instead, + please use OleObject.ObjectSourceFullName property. + This property will be removed 12 months later since November 2013. + Aspose apologizes for any inconvenience you may have experienced. + + + + Specifies whether the link to the OleObject is automatically updated or not. + + + + + Specifies whether the host application for the embedded object shall be called to load + the object data automatically when the parent workbook is opened. + + + + + Gets and sets the class identifier of the embedded object. + It means which application opens the embedded file. + + + + + Gets the image format of the ole object. + + + + + Represents embedded OLE objects. + + + + + Adds an OleObject to the collection. + + Upper left row index. + Upper left column index. + Height of oleObject, in unit of pixel. + Width of oleObject, in unit of pixel. + Image of ole object as byte array. + + object index. + + + + Adds an linked OleObject to the collection. + + Upper left row index. + Upper left column index. + Height of oleObject, in unit of pixel. + Width of oleObject, in unit of pixel. + Image of ole object as byte array. + + + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Remove all embedded OLE objects. + + + + + Removes the element at the specified index. + + The specified index. + + + + Represents the oval shape. + + + + + Encapsulates the object that represents a single picture in a spreadsheet. + + + + + [C#] + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Workbook object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a picture at the location of a cell whose row and column indices + //are 5 in the worksheet. It is "F6" cell + worksheet.Pictures.Add(5, 5, "C:\\image.gif"); + //Saving the Excel file + workbook.Save(saveFileDialog1.FileName, SaveFormat.Excel97To2003); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Workbook object + Dim sheetIndex As Integer = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a picture at the location of a cell whose row and column indices + 'are 5 in the worksheet. It is "F6" cell + worksheet.Pictures.Add(5, 5, "C:\image.gif") + 'Saving the Excel file + workbook.Save("C:\book1.xls", SaveFormat.Excel97To2003) + + + + + + Copy the picture. + + The source picture. + The copy options. + + + + Moves the picture to a specified location. + + Upper left row index. + Upper left column index. + + + + Gets the original height of the picture. + + + + + Gets the original width of the picture. + + + + + Represents the of the border line of a picture. + + + + + Gets or sets the weight of the border line of a picture in units of pt. + + + + + Gets the data of the picture. + + + + + Gets or sets the path and name of the source file for the linked image. + + + The default value is an empty string. + If SourceFullName is not an empty string, the image is linked. + If SourceFullName is not an empty string, but Data is null, then the image is linked and not stored in the file. + + + + + Gets and sets the data of the formula. + + + + + True indicates that the size of the ole object will be auto changed as the size of snapshop of the embedded content + when the ole object is activated. + + + + + Returns true if the picture is linked to a file. + + + + + Gets or sets whether dynamic data exchange + + + + + True if the specified object is displayed as an icon + and the image will not be auto changed. + + + + + Gets the image format of the picture. + + + + + Gets the original height of picture, in unit of centimeters. + + + + + Gets the original width of picture, in unit of centimeters. + + + + + Gets the original height of picture, in unit of inches. + + + + + Gets the original width of picture, in unit of inches. + + + + + Gets and sets the signature line + + + + + Encapsulates a collection of objects. + + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Lower right row index + Lower right column index + Stream object which contains the image data. + + object index. + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Lower right row index + Lower right column index + Image filename. + + object index. + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Stream object which contains the image data. + + object index. + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Image filename. + + object index. + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Stream object which contains the image data. + Scale of image width, a percentage. + Scale of image height, a percentage. + + object index. + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Image filename. + Scale of image width, a percentage. + Scale of image height, a percentage. + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Clear all pictures. + + + + + Remove shapes at the specific index + + + + + Represents the way the drawing object is attached to the cells below it. + + + + + Don't move or size with cells. + + + + + Move but don't size with cells. + + + + + Move and size with cells. + + + + + Represents the rectangle shape. + + + + + Represents the msodrawing object. + + + + + Gets and sets the name of macro. + + + + + Indicates whether the shape only contains an equation. + + + + + Indicates whether the shape is smart art. + + + Only for ooxml file. + + + + + Converting smart art to grouped shapes. + + + + + Brings the shape to the front or sends the shape to back. + + + If it's less than zero, sets the shape to back. + If it's greater than zero, brings the shape to front. + + + + + Returns the position of a shape in the z-order. + + + + + Gets and sets the name of the shape. + + + + + Returns or sets the descriptive (alternative) text string of the object. + + + + + Specifies the title (caption) of the current shape object. + + + + + Returns a MsoLineFormat object that contains line formatting properties for the specified shape. + + NOTE: This member is now obsolete. Instead, + please use Shape.Line property. + This property will be removed 12 months later since July 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Returns a MsoFillFormat object that contains fill formatting properties for the specified shape. + + NOTE: This member is now obsolete. Instead, + please use Shape.Fill property. + This property will be removed 12 months later since July 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents the setting of the shape's formatting. + + NOTE: This member is now obsolete. Instead, + please use Shape.Fill and Shape.Line properties. + This property will be removed 6 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets line style + + + + + Returns a object that contains fill formatting properties for the specified shape. + + + + + Represents a object that specifies shadow effect for the chart element or shape. + + + + + Represents a object that specifies reflection effect for the chart element or shape. + + + + + Represents a object that specifies glow effect for the chart element or shape. + + + + + Gets and sets the radius of blur to apply to the edges, in unit of points. + + + + + Gets and sets 3d format of the shape. + + + + + Returns a TextFrame object that contains the alignment and anchoring properties for the specified shape. + + NOTE: This member is now obsolete. Instead, + please use Shape.TextBody.TextAlignment property. + This property will be removed 12 months later since May 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the options of the picture format. + + + + + Indicates whether the object is visible. + + + + + True means that don't allow changes in aspect ratio. + + + + + Gets the value of locked property. + + The type of the shape locked property. + Returns the value of locked property. + + + + Set the locked property. + + The locked type. + The value of the property. + + + + Gets and sets the rotation of the shape. + + + + + Adds a hyperlink to the shape. + + Address of the hyperlink. + Return the new hyperlink object. + + + + Remove the hyperlink of the shape. + + + + + Gets the hyperlink of the shape. + + + + + Moves the shape to a specified range. + + Upper left row index. + Upper left column index. + Lower right row index + Lower right column index + + + + Moves the picture to the top-right corner. + + the row index. + the column index. + + + + Gets the identifier of this shape. + + + + + Specifies an optional string that an application can use to Identify the particular shape. + + + + + Specifies an optional number that an application can use to associate the particular shape with a defined shape type. + + + + + Gets the object which contains this shape. + + + + + Indicates whether the shape is a group. + + + + + Indicates whether this shape is a word art. + + + Only for the Legacy Shape of xls file. + + + + + Returns a TextEffectFormat object that contains text-effect formatting properties for the specified shape. + Applies to Shape objects that represent WordArt. + + + + + True if the object is locked, False if the object can be modified when the sheet is protected. + + + + + True if the object is printable + + + + + Gets and sets mso drawing type. + + + + + Gets the auto shape type. + + + + + Gets and set the shape anchor placeholder. + + + + + Represents the way the drawing object is attached to the cells below it. + The property controls the placement of an object on a worksheet. + + + + + Represents upper left corner row index. + + If the shape is in the shape or in the group , UpperLeftRow will be ignored. + + + + Gets or sets the shape's vertical offset from its upper left corner row. + The range of value is 0 to 256. + + + + Represents upper left corner column index. + + + + + Gets or sets the shape's horizontal offset from its upper left corner column. + The range of value is 0 to 1024. + + + + Represents lower right corner row index. + + + + + Gets or sets the shape's vertical offset from its lower right corner row. + The range of value is 0 to 256. + + + + Represents lower right corner column index. + + + + + Gets or sets the shape's horizontal offset from its lower right corner column. + The range of value is 0 to 1024. + + + + Represents the width of the shape's horizontal offset from its lower right corner column, in unit of pixels. + + + + + Represents the width of the shape's vertical offset from its lower bottom corner row, in unit of pixels. + + + + + Represents the width of shape, in unit of pixels. + + + + + Represents the width of the shape, in unit of inch. + + + + + Represents the width of the shape, in unit of point. + + + + + Represents the width of the shape, in unit of centimeters. + + + + + Represents the height of shape, in unit of pixel. + + + + + Represents the height of the shape, in unit of inches. + + + + + Represents the height of the shape, in unit of points. + + + + + Represents the height of the shape, in unit of inches. + + + + + Represents the horizontal offset of shape from its left column, in unit of pixels. + + + + + Represents the horizontal offset of shape from its left column, in unit of inches. + + + + + Represents the horizontal offset of shape from its left column, in unit of centimeters. + + + + + Represents the vertical offset of shape from its top row, in unit of pixels. + + If the shape is in the chart, represents the vertical offset of shape from its top border. + + + + Represents the vertical offset of shape from its top row, in unit of inches. + + + + + Represents the vertical offset of shape from its top row, in unit of centimeters. + + + + + Gets and sets the vertical offset of shape from worksheet top border, in unit of pixels. + + + + + Gets and sets the horizonal offset of shape from worksheet left border. + + + + + Gets and sets the horizontal offset of shape from worksheet left border,in unit of pixels. + + + + + Gets and sets the vertical offset of shape from worksheet top border,in unit of pixels. + + + + + Gets and sets the width scale, in unit of percent of the original picture width. + If the shape is not picture ,the WidthScale property only returns 100; + + + + + Gets and sets the height scale,in unit of percent of the original picture height. + If the shape is not picture ,the HeightScale property only returns 100; + + + + + Represents the vertical offset of shape from the top border of the parent shape, + in unit of 1/4000 of height of the parent shape. + + Only Applies when this shape in the group or chart. + + + + Represents the horizontal offset of shape from the left border of the parent shape, + in unit of 1/4000 of width of the parent shape. + + Only Applies when this shape in the group or chart. + + + + Represents the width of the shape, in unit of 1/4000 of the parent shape. + + Only Applies when this shape in the group or chart. + + + + Represents the vertical offset of shape from the top border of the parent shape, in unit of 1/4000 of height of the parent shape.. + + Only Applies when this shape in the group or chart. + + + + Gets the group shape which contains this shape. + + + + + Gets the auto shape type. + + + + + Gets and sets the line border of the shape is visible. + + + + + Indicates whether the fill format is visible. + + + + + Gets and sets whether shape is horizontally flipped . + + + + + Gets and sets whether shape is vertically flipped . + + + + + Get the actual bottom row. + + + + + Get the connection points + + + + + + + Saves the shape to a file. + + + + + Saves the shape to a stream. + + + + + Indicates whether shape is relative to original picture size. + + + + + Gets or sets the worksheet range linked to the control's value. + + + + + Gets or sets the worksheet range used to fill the specified combo box. + + + + + Gets the range linked to the control's value. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The range linked to the control's value. + + + + Sets the range linked to the control's value. + + The range linked to the control's value. + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + + + + Gets the range used to fill the control. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The range used to fill the control. + + + + Sets the range used to fill the control. + + The range used to fill the control. + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + + + + Update the selected value by the value of the linked cell. + + + + + Gets and sets the preset text shape type. + + + + + Gets and sets the setting of the shape's text. + + + + + Represents the font of shape. + + + + + Represents the text options of the shape. + + + + + Recalculate the text area + + Text's Size in an array(width and height). + + + + Represents the string in this TextBox object. + + + + + Whether or not the text is rich text. + + + + + Gets and sets the html string which contains data and some formats in this textbox. + + + + + Formats some characters with the font setting. + + The start index. + The length. + The font setting. + The flag of the font setting. + + + + Formats some characters with the font setting. + + The start index. + The length. + The font setting. + + NOTE: This member is now obsolete. Instead, + please use Shape.FormatCharacters(int startIndex, int length, Font font, StyleFlag flag) method. + This property will be removed 12 months later since March 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Returns a Characters object that represents a range of characters within the text. + + The index of the start of the character. + The number of characters. + Characters object. + This method only works on shape with title. + + + + Returns all Characters objects + that represents a range of characters within the text . + + All Characters objects + + + + Gets and sets the text vertical overflow type of the shape which contains text. + + + + + Gets and sets the text horizontal overflow type of the shape which contains text. + + + + + Gets and sets the text wrapped type of the shape which contains text. + + + + + Gets and sets the text orientation type of the shape. + + + + + Gets and sets the text horizontal alignment type of the shape. + + + + + Gets and sets the text vertical alignment type of the shape. + + + + + Gets/Sets the direction of the text flow for this object. + + + + + Gets the data of control. + + + + + Gets the ActiveX control. + + + + + Remove activeX control. + + + + + Gets the paths of a custom geometric shape. + + + + + Gets the geometry + + + + + Represents the anchor type. + + + + + Represents a two cell anchor placeholder + + + + + Represents a one cell anchor placeholder + + + + + Represents all the shape in a worksheet/chart. + + + + + Gets the shape object at the specific index. + + + + + + + + + Gets the shape object by the shape image + + + + + + + + + Adds and copy a shape to the worksheet.. + + Source shape. + Upper left row index. + Represents the vertical offset of checkbox from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of textbox from its left column, in unit of pixel. + The new shape object index. + + + + Adds a checkbox to the worksheet. + + Upper left row index. + Represents the vertical offset of checkbox from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of textbox from its left column, in unit of pixel. + Height of textbox, in unit of pixel. + Width of textbox, in unit of pixel. + The new CheckBox object index. + + + + Adds a text box to the worksheet. + + Upper left row index. + Represents the vertical offset of textbox from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of textbox from its left column, in unit of pixel. + Represents the height of textbox, in unit of pixel. + Represents the width of textbox, in unit of pixel. + A object. + + + + Adds a Spinner to the worksheet. + + Upper left row index. + Represents the vertical offset of Spinner from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Spinner from its left column, in unit of pixel. + Represents the height of Spinner, in unit of pixel. + Represents the width of Spinner, in unit of pixel. + A Spinner object. + + + + Adds a ScrollBar to the worksheet. + + Upper left row index. + Represents the vertical offset of ScrollBar from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of ScrollBar from its left column, in unit of pixel. + Represents the height of ScrollBar, in unit of pixel. + Represents the width of ScrollBar, in unit of pixel. + A ScrollBar object. + + + + Adds a RadioButton to the worksheet. + + Upper left row index. + Represents the vertical offset of RadioButton from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of RadioButton from its left column, in unit of pixel. + Represents the height of RadioButton, in unit of pixel. + Represents the width of RadioButton, in unit of pixel. + A RadioButton object. + + + + Adds a ListBox to the worksheet. + + Upper left row index. + Represents the vertical offset of ListBox from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of ListBox from its left column, in unit of pixel. + Represents the height of ListBox, in unit of pixel. + Represents the width of ListBox, in unit of pixel. + A ListBox object. + + + + Adds a ComboBox to the worksheet. + + Upper left row index. + Represents the vertical offset of ComboBox from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of ComboBox from its left column, in unit of pixel. + Represents the height of ComboBox, in unit of pixel. + Represents the width of ComboBox, in unit of pixel. + A ComboBox object. + + + + Adds a GroupBox to the worksheet. + + Upper left row index. + Represents the vertical offset of GroupBox from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of GroupBox from its left column, in unit of pixel. + Represents the height of GroupBox, in unit of pixel. + Represents the width of GroupBox, in unit of pixel. + A GroupBox object. + + + + Adds a Button to the worksheet. + + Upper left row index. + Represents the vertical offset of Button from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Button from its left column, in unit of pixel. + Represents the height of Button, in unit of pixel. + Represents the width of Button, in unit of pixel. + A Button object. + + + + Adds a Label to the worksheet. + + Upper left row index. + Represents the vertical offset of Label from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Label from its left column, in unit of pixel. + Represents the height of Label, in unit of pixel. + Represents the width of Label, in unit of pixel. + A Label object. + + + + Adds a label to the chart. + + Represents the vertical offset of label from the upper left corner in units of 1/4000 of the chart area. + Represents the vertical offset of label from the upper left corner in units of 1/4000 of the chart area. + Represents the height of label, in units of 1/4000 of the chart area. + Represents the width of label, in units of 1/4000 of the chart area. + A new Label object. + + + + Adds a textbox to the chart. + + Represents the vertical offset of textbox from the upper left corner in units of 1/4000 of the chart area. + Represents the vertical offset of textbox from the upper left corner in units of 1/4000 of the chart area. + Represents the height of textbox, in units of 1/4000 of the chart area. + Represents the width of textbox, in units of 1/4000 of the chart area. + A TextBox object. + + + + Inserts a WordArt object to the chart + + The mso preset text effect type. + The WordArt text. + The font name. + The font size + Indicates whether font is bold. + Indicates whether font is italic. + Represents the vertical offset of shape from the upper left corner in units of 1/4000 of the chart area. + Represents the vertical offset of shape from the upper left corner in units of 1/4000 of the chart area. + Represents the height of shape, in units of 1/4000 of the chart area. + Represents the width of shape, in units of 1/4000 of the chart area. + Returns a Shape object that represents the new WordArt object. + + + + Inserts a WordArt object. + + The mso preset text effect type. + The WordArt text. + The font name. + The font size + Indicates whether font is bold. + Indicates whether font is italic. + Upper left row index. + Represents the vertical offset of shape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of shape from its left column, in unit of pixel. + Represents the height of shape, in unit of pixel. + Represents the width of shape, in unit of pixel. + Returns a Shape object that represents the new WordArt object. + + + + Adds preset WordArt since Excel 2007.s + + The preset WordArt Style. + The text. + Upper left row index. + Represents the vertical offset of shape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of shape from its left column, in unit of pixel. + Represents the height of shape, in unit of pixel. + Represents the width of shape, in unit of pixel. + + + + + + Adds a RectangleShape to the worksheet. + + Upper left row index. + Represents the vertical offset of RectangleShape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of RectangleShape from its left column, in unit of pixel. + Represents the height of RectangleShape, in unit of pixel. + Represents the width of RectangleShape, in unit of pixel. + A RectangleShape object. + + + + Adds a Oval to the worksheet. + + Upper left row index. + Represents the vertical offset of Oval from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Oval from its left column, in unit of pixel. + Represents the height of Oval, in unit of pixel. + Represents the width of Oval, in unit of pixel. + A Oval object. + + + + Adds a LineShape to the worksheet. + + Upper left row index. + Represents the vertical offset of LineShape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of LineShape from its left column, in unit of pixel. + Represents the height of LineShape, in unit of pixel. + Represents the width of LineShape, in unit of pixel. + A LineShape object. + + + + Adds a free floating shape to the worksheet.Only applies for line/image shape. + + The shape type. + Represents the vertical offset of shape from the worksheet's top row, in unit of pixel. + Represents the horizontal offset of shape from the worksheet's left column, in unit of pixel. + Represents the height of LineShape, in unit of pixel. + Represents the width of LineShape, in unit of pixel. + The image data,only applies for the picture. + Whether the shape use original size if the shape is image. + + + + + + Add a shape to chart .All unit is 1/4000 of chart area. + + The drawing type. + the placement type. + In unit of 1/4000 chart area width. + In unit of 1/4000 chart area height. + In unit of 1/4000 chart area width. + In unit of 1/4000 chart area height. + If the shape is not a picture or ole object,imageData should be null. + + + + Add a shape to chart .All unit is 1/4000 of chart area. + + The drawing type. + the placement type. + In unit of 1/4000 chart area width. + In unit of 1/4000 chart area height. + In unit of 1/4000 chart area width. + In unit of 1/4000 chart area height. + + + + Adds a ArcShape to the worksheet. + + Upper left row index. + Represents the vertical offset of ArcShape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of ArcShape from its left column, in unit of pixel. + Represents the height of ArcShape, in unit of pixel. + Represents the width of ArcShape, in unit of pixel. + A ArcShape object. + + + + Adds a Shape to the worksheet. + + Mso drawing type. + Upper left row index. + Represents the vertical offset of Shape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Shape from its left column, in unit of pixel. + Represents the height of Shape, in unit of pixel. + Represents the width of Shape, in unit of pixel. + A Shape object. + The type could not be Chart/Comment/Picture/OleObject/Polygon/DialogBox + + + + Adds a AutoShape to the worksheet. + + Auto shape type. + Upper left row index. + Represents the vertical offset of Shape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Shape from its left column, in unit of pixel. + Represents the height of Shape, in unit of pixel. + Represents the width of Shape, in unit of pixel. + A Shape object. + The type could not be Chart/Comment/Picture/OleObject/Polygon/DialogBox + + + + Adds a AutoShape to the chart. + + Auto shape type. + Represents the vertical offset of textbox from the upper left corner in units of 1/4000 of the chart area. + Represents the vertical offset of textbox from the upper left corner in units of 1/4000 of the chart area. + Represents the height of textbox, in units of 1/4000 of the chart area. + Represents the width of textbox, in units of 1/4000 of the chart area. + Returns a shape object. + The type could not be Chart/Comment/Picture/OleObject/Polygon/DialogBox + + + + Creates an Activex Control. + + The type of the control. + Upper left row index. + Represents the vertical offset of Shape from its left row, in unit of pixel. + Upper left column index. + Represents the horizontal offset of Shape from its left column, in unit of pixel. + Represents the height of Shape, in unit of pixel. + Represents the width of Shape, in unit of pixel. + + + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Lower right row index + Lower right column index + Stream object which contains the image data. + + Picture object. + + + + Adds a picture to the collection. + + Upper left row index. + Upper left column index. + Stream object which contains the image data. + Scale of image width, a percentage. + Scale of image height, a percentage. + + Picture object. + + + + Adds svg image. + + Upper left row index. + Represents the vertical offset of shape from its left row, in unit of pixel. + Upper left column index. + The horizontal offset of shape from its left column, in unit of pixel. + The height of shape, in unit of pixel. + The width of shape, in unit of pixel. + The svg image data. + Converted image data from svg in order to be compatible with Excel 2016 or lower versions. + + + + + + Add a linked picture. + + Upper left row index. + Upper left column index. + The height of the shape. In unit of pixels + The width of the shape. In unit of pixels + + The path and name of the source file for the linked image + + Picture object. + + + + Add a linked picture. + + Upper left row index. + Upper left column index. + The height of the shape. In unit of pixels + The width of the shape. In unit of pixels + + The path and name of the source file for the linked image + + Picture object. + + + + Adds a picture to the chart. + + Represents the vertical offset of shape from the upper left corner in units of 1/4000 of the chart area. + Represents the horizontal offset of shape from the upper left corner in units of 1/4000 of the chart area. + Stream object which contains the image data. + Scale of image width, a percentage. + Scale of image height, a percentage. + Returns a Picture object. + + + + + + + + + + + + + + + + + + + + + + + + Copy all comments in the range. + + The source shapes. + The source range. + The dest range start row. + The dest range start column. + + + + Copy shapes in the range to destination range. + + Source shapes. + The source range. + The dest row index of the dest range. + The dest column of the dest range. + Whether only copy the shapes which are contained in the range. + If true,only copies the shapes in the range. + Otherwise,it works as MS Office. + + + + Delete shapes in the range.Comment shapes will not be deleted. + + The range.If the shapes are contained in the range, they will be removed. + + + + Delete a shape. If the shape is in the group or is a comment shape, it will not be deleted. + + + + + + + Group the shapes. + + the group items. + Return the group shape. + + + The shape in the groupItems should not be grouped. + The shape must be in this Shapes collection. + + + + Ungroups the shape items. + + The group shape. + If the group shape is grouped by another group shape,nothing will be done. + + + + Remove the shape. + + The index of the shape. + + + + Remove the shape. + + + + + + + Clear all shapes. + + + + + Update the selected value by the value of the linked cell of the shapes. + + + + + Represents type of the property to be locked. + + + + + Group + + + + + AdjustHandles + + + + + Text + + + + + Points + + + + + Crop + + + + + Selection + + + + + Move + + + + + AspectRatio + + + + + Rotation + + + + + Ungroup + + + + + Resize + + + + + ShapeType + + + + + Arrowhead + + + + + Represent the signature line. + + + + + Gets or sets identifier for this signature line. + + + + + Gets and sets the id of signature provider. + + + It's typically the CLSID of the provider com add-in. + + + + + Gets and sets the signer. + + + + + Gets and sets the title of singer. + + + + + Gets and sets the email of singer. + + + + + Indicates whether it is a signature line. + + + + + Indicates whether comments could be attached. + + + + + Indicates whether show signed date. + + + + + Gets and sets the text shown to user at signing time. + + + + + Represents the smart art. + + + + + Converting smart art to grouped shapes. + + + + + Encapsulates the object that represents a textbox in a spreadsheet. + + + + + [C#] + + //Instantiate a new Workbook. + Workbook workbook = new Workbook(); + //Get the first worksheet in the book. + Worksheet worksheet = workbook.Worksheets[0]; + //Add a new textbox to the collection. + int textboxIndex = worksheet.TextBoxes.Add(2, 1, 160, 200); + //Get the textbox object. + Aspose.Cells.TextBox textbox0 = worksheet.TextBoxes[textboxIndex]; + //Fill the text. + textbox0.Text = "ASPOSE______The .NET and JAVA Component Publisher!"; + //Get the textbox text frame. + MsoTextFrame textframe0 = textbox0.TextFrame; + //Set the textbox to adjust it according to its contents. + textframe0.AutoSize = true; + //Set the placement. + textbox0.Placement = PlacementType.FreeFloating; + //Set the font color. + textbox0.Font.Color = Color.Blue; + //Set the font to bold. + textbox0.Font.IsBold = true; + //Set the font size. + textbox0.Font.Size = 14; + //Set font attribute to italic. + textbox0.Font.IsItalic = true; + //Add a hyperlink to the textbox. + textbox0.AddHyperlink("http://www.aspose.com/"); + //Get the filformat of the textbox. + MsoFillFormat fillformat = textbox0.FillFormat; + //Set the fillcolor. + fillformat.ForeColor = Color.Silver; + //Get the lineformat type of the textbox. + MsoLineFormat lineformat = textbox0.LineFormat; + //Set the line style. + lineformat.Style = MsoLineStyle.ThinThick; + //Set the line weight. + lineformat.Weight = 6; + //Set the dash style to squaredot. + lineformat.DashStyle = MsoLineDashStyle.SquareDot; + //Add another textbox. + textboxIndex = worksheet.TextBoxes.Add(15, 4, 85, 120); + //Get the second textbox. + Aspose.Cells.TextBox textbox1 = worksheet.TextBoxes[textboxIndex]; + //Input some text to it. + textbox1.Text = "This is another simple text box"; + //Set the placement type as the textbox will move and + //resize with cells. + textbox1.Placement = PlacementType.MoveAndSize; + //Save the excel file. + workbook.Save("C:\\tsttextboxes.xls"); + + [Visual Basic] + + 'Instantiate a new Workbook. + Dim workbook As Workbook = New Workbook() + 'Get the first worksheet in the book. + Dim worksheet As Worksheet = workbook.Worksheets(0) + 'Add a new textbox to the collection. + Dim textboxIndex As Integer = worksheet.TextBoxes.Add(2, 1, 160, 200) + 'Get the textbox object. + Dim textbox0 As Aspose.Cells.TextBox = worksheet.TextBoxes(textboxIndex) + 'Fill the text. + textbox0.Text = "ASPOSE______The .NET and JAVA Component Publisher!" + 'Get the textbox text frame. + Dim textframe0 As MsoTextFrame = textbox0.TextFrame + 'Set the textbox to adjust it according to its contents. + textframe0.AutoSize = True + 'Set the placement. + textbox0.Placement = PlacementType.FreeFloating + 'Set the font color. + textbox0.Font.Color = Color.Blue + 'Set the font to bold. + textbox0.Font.IsBold = True + 'Set the font size. + textbox0.Font.Size = 14 + 'Set font attribute to italic. + textbox0.Font.IsItalic = True + 'Add a hyperlink to the textbox. + textbox0.AddHyperlink("http://www.aspose.com/") + 'Get the filformat of the textbox. + Dim fillformat As MsoFillFormat = textbox0.FillFormat + 'Set the fillcolor. + fillformat.ForeColor = Color.Silver + 'Get the lineformat type of the textbox. + Dim lineformat As MsoLineFormat = textbox0.LineFormat + 'Set the line style. + lineformat.Style = MsoLineStyle.ThinThick + 'Set the line weight. + lineformat.Weight = 6 + 'Set the dash style to squaredot. + lineformat.DashStyle = MsoLineDashStyle.SquareDot + 'Add another textbox. + textboxIndex = worksheet.TextBoxes.Add(15, 4, 85, 120) + 'Get the second textbox. + Dim textbox1 As Aspose.Cells.TextBox = worksheet.TextBoxes(textboxIndex) + 'Input some text to it. + textbox1.Text = "This is another simple text box" + 'Set the placement type as the textbox will move and + 'resize with cells. + textbox1.Placement = PlacementType.MoveAndSize + 'Save the excel file. + workbook.Save("C:\tsttextboxes.xls") + + + + + + Encapsulates a collection of objects. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element by the name. + + The name of the text box. + + + + + + Adds a textbox to the collection. + + Upper left row index. + Upper left column index. + Height of textbox, in unit of pixel. + Width of textbox, in unit of pixel. + + object index. + + + + Remove a text box from the file. + + The text box index. + + + + Clear all text boxes. + + + + + Represents automatic numbered bullet. + + + + + Gets the type of the bullet. + + + + + Gets and sets the starting number of the bullet. + + + + + Represents the scheme of automatic number. + + + + + Represents the bullet. + + + + + Gets bullet value + + + + + Gets and sets the bullet type. + + + + + Get and sets the name of the font. + + + + + Represents the type of the bullet. + + + + + No bullet. + + + + + Character bullet. + + + + + Image bullet. + + + + + Automatic numbered bullet. + + + + + Represents the value of the bullet. + + + + + Gets the type of the bullet's value. + + + + + Represents the character bullet. + + + + + Gets the type of the bullet. + + + + + Gets and sets character of the bullet. + + + + + Represents no bullet. + + + + + Gets the type of the bullet's value. + + + + + Represents the value of the image bullet. + + + + + Gets the type of the bullet's value. + + + + + Gets and sets image data of the bullet. + + + + + Represents all automatic number scheme. + + + + + + + + + (a), (b), (c), … + + + + + a), b), c), … + + + + + a., b., c., … + + + + + + (A), (B), (C), … + + + + + A), B), C), … + + + + + A., B., C., … + + + + + Bidi Arabic 1 (AraAlpha) with ANSI minus symbol + + + + + Bidi Arabic 2 (AraAbjad) with ANSI minus symbol + + + + + Dbl-byte Arabic numbers w/ double-byte period + + + + + Dbl-byte Arabic numbers + + + + + (1), (2), (3), … + + + + + 1), 2), 3), … + + + + + 1., 2., 3., … + + + + + 1, 2, 3, … + + + + + Dbl-byte circle numbers (1-10 circle[0x2460-], 11-arabic numbers) + + + + + Wingdings black circle numbers + + + + + Wingdings white circle numbers (0-10 circle[0x0080-],11- arabic numbers) + + + + + EA: Simplified Chinese w/ single-byte period + + + + + EA: Simplified Chinese (TypeA 1-99, TypeC 100-) + + + + + EA: Traditional Chinese w/ single-byte period + + + + + EA: Traditional Chinese (TypeA 1-19, TypeC 20-) + + + + + EA: Japanese w/ double-byte period + + + + + EA: Japanese/Korean w/ single-byte period + + + + + EA: Japanese/Korean (TypeC 1-) + + + + + Bidi Hebrew 2 with ANSI minus symbol + + + + + Hindi alphabet period - consonants + + + + + Hindi alphabet period - vowels + + + + /// + Hindi numerical parentheses - right + + + + Hindi numerical period + + + + + (i), (ii), (iii), … + + + + + i), ii), iii), … + + + + + i., ii., iii., … + + + + + (I), (II), (III), … + + + + + I), II), III), … + + + + + I., II., III., … + + + + + Thai alphabet parentheses - both + + + + + Thai alphabet parentheses - right + + + + + Thai alphabet period + + + + + Thai numerical parentheses - both + + + + + Thai numerical parentheses - right + + + + + Thai numerical period + + + + + Represents the list of . + + + + + Sets the preset WordArt style. + + The preset WordArt style. + + + + Represents the alignment setting of the text body. + + + + + Gets all paragraphs. + + + + + Gets the enumerator of the paragraphs. + + + + + + + Gets and sets the text of the shape. + + + + + Appends the text. + + The text. + + + + Insert index at the position. + + The start index. + The text. + + + + Replace the text. + + The start index. + The count of characters. + The text. + + + + Delete some characters. + + The start index. + The count of characters. + + + + Gets and sets the html string which contains data and some formats in this shape. + + + + + Format the text with font setting. + + The start index. + The length. + The font. + The flags of the font. + + + + Gets the by the index. + + The index. + + + + + + Clear all setting. + + + + + Represents the unit type of line space size. + + + + + Represents in unit of a percentage of the text size. + + + + + Represents in unit of points. + + + + + Represents the setting of shape's text alignment; + + + + + Gets and sets the text wrapped type of the shape which contains text. + + + + + Indicates whether rotating text with shape. + + + + + Gets and sets the text vertical overflow type of the text box. + + + + + Gets and sets the text horizontal overflow type of the text box. + + + + + Gets and sets the rotation of the shape. + + + + + Gets and sets the text direction. + + + + + Indicates if size of shape is adjusted automatically according to its content. + + + + + Gets and set the transform type of text. + + + + + Returns the top margin in unit of Points + + + + + Returns the bottom margin in unit of Points + + + + + Returns the left margin in unit of Points + + + + + Returns the right margin in unit of Points + + + + + Indicates whether the margin of the text frame is automatic. + + + + + Represents the different types of font alignment. + + + + + When the text flow is horizontal or simple vertical same as fontBaseline + but for other vertical modes same as fontCenter. + + + + + The letters are anchored to the very bottom of a single line. + + + + + The letters are anchored to the bottom baseline of a single line. + + + + + The letters are anchored between the two baselines of a single line. + + + + + The letters are anchored to the top baseline of a single dline. + + + + + Represents the node type. + + + + + Represents the text node. + + + + + Represents the text paragraph. + + + + + Represents the equation text. + + + + + Represents the text options. + + + + + Gets and sets the name of the shape. + + + + + Gets and sets the latin name. + + + + + Gets and sets the FarEast name. + + + + + Represents the fill format of the text. + + + + + Represents the outline format of the text. + + + + + Represents a object that specifies shadow effect for the chart element or shape. + + + + + Gets or sets the color of underline. + + + + + Specifies the minimum font size at which character kerning will occur for this text run. + + + + + Specifies the spacing between characters within a text run. + + + + + Represents the text paragraph setting. + + + + + Gets the bullet. + + + + + Gets the type of text node. + + + + + Gets and sets the amount of vertical white space that will be used within a paragraph. + + + + + Gets and sets the amount of vertical white space that will be used within a paragraph. + + + + + Gets and sets the amount of vertical white space that will be present after a paragraph. + + + + + Gets and sets the amount of vertical white space that will be present after a paragraph. + + + + + Gets and sets the amount of vertical white space that will be present before a paragraph. + + + + + Gets and sets the amount of vertical white space that will be present before a paragraph. + + + + + Gets tab stop list. + + + + + Specifies whether a Latin word can be broken in half and wrapped onto the next line without a hyphen being added. + + + + + Specifies whether an East Asian word can be broken in half and wrapped onto the next line without a hyphen being added. + + + + + Specifies whether punctuation is to be forcefully laid out on a line of text or put on a different line of text. + + + + + Specifies the right margin of the paragraph. + + + + + Specifies the left margin of the paragraph. + + + + + Specifies the indent size that will be applied to the first line of text in the paragraph. + + + + + Determines where vertically on a line of text the actual words are positioned. This deals + with vertical placement of the characters with respect to the baselines. + + + + + Gets and sets the text horizontal alignment type of the paragraph. + + + + + Gets and sets the default size for a tab character within this paragraph. + + + + + Gets all text runs in this paragraph. + If this paragraph is empty, return paragraph itself. + + + + + Represents all text paragraph. + + + + + Gets the count of text paragraphs. + + + + + Gets the object at specific index. + + The index. + + + + + + Gets the enumerator of the paragraphs. + + + + + + + Represents the text tab alignment types. + + + + + The text at this tab stop is center aligned. + + + + + At this tab stop, the decimals are lined up. + + + + + The text at this tab stop is left aligned. + + + + + The text at this tab stop is right aligned. + + + + + Represents tab stop. + + + + + Specifies the alignment that is to be applied to text using this tab stop. + + + + + Specifies the position of the tab stop relative to the left margin. + + + + + Represents the list of all tab stops. + + + + + Adds a tab stop. + + + + + + + + + + + Gets by the index. + + The index. + + + + + + Represents the text direct type. + + + + + East Asian Vertical display. + + + + + Horizontal text. + + + + + Displayed vertical and the text flows top down then LEFT to RIGHT + + + + + Each line is 90 degrees rotated clockwise + + + + + Each line is 270 degrees rotated clockwise + + + + + Determines if all of the text is vertical + + + + + Specifies that vertical WordArt should be shown from right to left rather than left to right. + + + + + Contains all classes of Texts. + + + + + Contains properties and methods that apply to WordArt objects. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + Shapes shapes = workbook.Worksheets[0].Shapes; + shapes.AddTextEffect(MsoPresetTextEffect.TextEffect1, "Aspose", "Arial", 30, false, false, 0, 0, 0, 0, 100, 200); + TextEffectFormat textEffectFormat = shapes[0].TextEffect; + textEffectFormat.SetTextEffect(MsoPresetTextEffect.TextEffect10); + workbook.Save("C:\\Book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + Dim shapes As Shapes = workbook.Worksheets(0).Shapes + shapes.AddTextEffect(MsoPresetTextEffect.TextEffect1, "Aspose", "Arial", 30, false, false, 0, 0, 0, 0, 100, 200) + Dim textEffectFormat As TextEffectFormat = shapes(0).TextEffect + TextEffectFormat.SetTextEffect(MsoPresetTextEffect.TextEffect10) + workbook.Save("C:\\Book1.xls") + + + + + + + Sets the preset text effect. + + The preset text effect. + + + + The text in the WordArt. + + + + + The name of the font used in the WordArt. + + + + + Indicates whether font is bold. + + + + + Indicates whether font is italic. + + + + + If true,characters in the specified WordArt are rotated 90 degrees relative to the WordArt's bounding shape. + + + + + The size (in points) of the font used in the WordArt. + + + + + Gets and sets the preset shape type. + + + + + Represents the way the text vertical or horizontal overflow. + + + + + Pay attention to top and bottom barriers. + Provide no indication that there is text which is not visible. + + + + + Pay attention to top and bottom barriers. + Use an ellipsis to denote that there is text which is not visible. + Only for vertical overflow. + + + + + Overflow the text and pay no attention to top and bottom barriers. + + + + + Represents the shape of web extension. + + + + + Gets and set the web extension. + + + + + Represents the preset WordArt styles. + + + + + Fill - Black, Text 1, Shadow + + + + + Fill - Blue, Accent 1, Shadow + + + + + Fill - Orange, Accent 2, Outline - Accent 2 + + + + + Fill - White, Outline - Accent 1, Shadow + + + + + Fill - Gold, Accent 4, Soft Bevel + + + + + Gradient Fill - Gray + + + + + Gradient Fill - Blue, Accent 1, Reflection + + + + + Gradient Fill - Gold, Accent 4, Outline - Accent 4 + + + + + Fill - White, Outline - Accent 1, Glow - Accent 1 + + + + + Fill - Gray-50%, Accent 3, Sharp Bevel + + + + + Fill - Black, Text 1, Outline - Background 1, Hard Shadow - Background 1 + + + + + Fill - Black, Text 1, Outline - Background 1, Hard Shadow - Accent 1 + + + + + Fill - Blue, Accent 1, Outline - Background 1, Hard Shadow - Accent 1 + + + + + Fill - White, Outline - Accent 2, Hard Shadow - Accent 2 + + + + + Fill - Gray-25%, Background 2, Inner Shadow + + + + + Pattern Fill - White, Text 2, Dark Upward Diagonal, Shadow + + + + + Pattern Fill - Gray-50%, Accent 3, Narrow Horizontal, Inner Shadow + + + + + Fill - Blue, Accent 1, 50%, Hard Shadow - Accent 1 + + + + + Pattern Fill - Blue, Accent 1, Light Downward Diagonal, Outline - Accent 1 + + + + + Pattern Fill - Blue-Gray, Text 2, Dark Upward Diagonal, Hard Shadow - Text 2 + + + + + Contains all classes of shapes and fill format. + + + + + Encapsulates the object that represents a chart's axis. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Excel object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(4); + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(20); + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 25, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + //Set the max value of value axis + chart.ValueAxis.MaxValue = 200; + //Set the min value of value axis + chart.ValueAxis.MinValue = 0; + //Set the major unit + chart.ValueAxis.MajorUnit = 25; + //Category(X) axis crosses at the maxinum value. + chart.ValueAxis.Crosses = CrossType.Maximum; + //Set he number of categories or series between tick-mark labels. + chart.CategoryAxis.TickLabelSpacing = 2; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Excel object + Dim sheetIndex As Int32 = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(4) + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(20) + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + 'Adding a chart to the worksheet + Dim chartIndex As Int32 = worksheet.Charts.Add(ChartType.Column, 5, 0, 25, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + 'Set the max value of value axis + chart.ValueAxis.MaxValue = 200 + 'Set the min value of value axis + chart.ValueAxis.MinValue = 0 + 'Set the major unit + chart.ValueAxis.MajorUnit = 25 + 'Category(X) axis crosses at the maxinum value. + chart.ValueAxis.Crosses = CrossType.Maximum + 'Set he number of categories or series between tick-mark labels. + chart.CategoryAxis.TickLabelSpacing = 2 + 'Saving the Excel file + workbook.Save("C:\book1.xls") + + + + + + Gets the . + + + + + Indicates whether the min value is automatically assigned. + + + + + Represents the minimum value on the value axis. + + + The minValue type only can be double or DateTime + + + + + Indicates whether the max value is automatically assigned. + + + + + Represents the maximum value on the value axis. + + + The maxValue type only can be double or DateTime + + + + + Indicates whether the major unit of the axis is automatically assigned. + + + + + Represents the major units for the axis. + + The major units must be greater than zero. + + + + Indicates whether the minor unit of the axis is automatically assigned. + + + + + Represents the minor units for the axis. + + The minor units must be greater than zero. + + + + Gets the appearance of an Axis. + + + + + Represents the type of major tick mark for the specified axis. + + + + + Represents the type of minor tick mark for the specified axis. + + + + + Represents the position of tick-mark labels on the specified axis. + + + + + Represents the point on the value axis where the category axis crosses it. + + The number should be a integer when it applies to category axis. + And the value must be between 1 and 31999. + + + + Represents the on the specified axis where the other axis crosses. + + + + + Represents the logarithmic base. Default value is 10.Only applies for Excel2007. + + + + + Represents if the value axis scale type is logarithmic or not. + + + + + Represents if Microsoft Excel plots data points from last to first. + + + + + Represents if the value axis crosses the category axis between categories. + + This property applies only to category axes, and it doesn't apply to 3-D charts. + + + + + Returns a object that represents the tick-mark labels for the specified axis. + + + + + Represents the number of categories or series between tick-mark labels. Applies only to category and series axes. + + The number must be between 1 and 31999. + + + + Indicates whether ticklabel spacing is automatic + + + + + Returns or sets the number of categories or series between tick marks. Applies only to category and series axes. + + The number must be between 1 and 31999. + + + + Represents the unit label for the specified axis. + + + + + Specifies a custom value for the display unit. + + + + + Represents a unit label on an axis in the specified chart. + Unit labels are useful for charting large values¡ª for example, in the millions or billions. + + + + + Represents if the display unit label is shown on the specified axis. + + The default value is True. + + + + Gets the axis' title. + + + + + Represents the category axis type. + + + + + Represents the base unit scale for the category axis. + + Setting this property only takes effect when the CategoryType property is set to TimeScale. + + + + Represents the major unit scale for the category axis. + + + + [C#] + + chart.CategoryAxis.CategoryType = CategoryType.TimeScale; + chart.CategoryAxis.MajorUnitScale = TimeUnit.Months; + chart.CategoryAxis.MajorUnit = 2; + + [Visual Basic] + chart.CategoryAxis.CategoryType = CategoryType.TimeScale + chart.CategoryAxis.MajorUnitScale = TimeUnit.Months + chart.CategoryAxis.MajorUnit = 2 + + + + + + Represents the major unit scale for the category axis. + + + + [C#] + + chart.CategoryAxis.CategoryType = CategoryType.TimeScale; + chart.CategoryAxis.MinorUnitScale = TimeUnit.Months; + chart.CategoryAxis.MinorUnit = 2; + + [Visual Basic] + chart.CategoryAxis.CategoryType = CategoryType.TimeScale + chart.CategoryAxis.MinorUnitScale = TimeUnit.Months + chart.CategoryAxis.MinorUnit = 2 + + + + + + Represents if the axis is visible. + + + + + Represents major gridlines on a chart axis. + + + + [C#] + + chart.ValueAxis.MajorGridLines.IsVisible = false; + chart.CategoryAxis.MajorGridLines.IsVisible = true; + + [Visual Basic] + chart.ValueAxis.MajorGridLines.IsVisible = false + chart.CategoryAxis.MajorGridLines.IsVisible = true + + + + + + Represents minor gridlines on a chart axis. + + + + + Indicates whether the labels shall be shown as multi level. + + + Only valid for category axis. + + + + + Gets the labels of the axis after call Chart.Calculate() method. + + + + + Represents the axis type. + + + + + Category axis + + + + + Value axis + + + + + Series axis + + + + + Represents the display mode of the background. + + + + + Automatic + + + + + Opaque + + + + + Transparent + + + + + Represents the shape used with the 3-D bar or column chart. + + + + + Box + + + + + PyramidToPoint + + + + + PyramidToMax + + + + + Cylinder + + + + + ConeToPoint + + + + + ConeToMax + + + + + Represents what the bubble size represents on a bubble chart. + + + + + Represents the value of is area of the bubble. + + + + + Represents the value of is width of the bubble. + + + + + Represents the category axis type. + + + + + AutomaticScale + + + + + CategoryScale + + + + + TimeScale + + + + + Encapsulates the object that represents a single Excel chart. + + + + [C#] + + Workbook workbook = new Workbook(); + Worksheet sheet = workbook.Worksheets[0]; + + Cells cells = sheet.Cells; + cells[0,1].PutValue("Income"); + cells[1,0].PutValue("Company A"); + cells[2,0].PutValue("Company B"); + cells[3,0].PutValue("Company C"); + cells[1,1].PutValue(10000); + cells[2,1].PutValue(20000); + cells[3,1].PutValue(30000); + + int chartIndex = sheet.Charts.Add(ChartType.Column, 9, 9, 21, 15); + + Chart chart = sheet.Charts[chartIndex]; + chart.NSeries.Add("B2:B4", true); + chart.NSeries.CategoryData = "A2:A4"; + + ASeries aSeries = chart.NSeries[0]; + aSeries.Name = "=B1"; + chart.IsLegendShown = true; + chart.Title.Text = "Income Analysis"; + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + Dim sheet as Worksheet = workbook.Worksheets(0) + + Dim cells as Cells = sheet.Cells + cells(0,1).PutValue("Income") + cells(1,0).PutValue("Company A") + cells(2,0).PutValue("Company B") + cells(3,0).PutValue("Company C") + cells(1,1).PutValue(10000) + cells(2,1).PutValue(20000) + cells(3,1).PutValue(30000) + + Dim chartIndex as Integer = sheet.Charts.Add(ChartType.Column, 9, 9, 21, 15) + + Dim chart as Chart = sheet.Charts(chartIndex) + chart.NSeries.Add("B2:B4", true) + chart.NSeries.CategoryData = "A2:A4" + + Dim aSeries as ASeries = chart.NSeries(0) + aSeries.Name = "=B1" + chart.IsLegendShown = true + chart.Title.Text = "Income Analysis" + + + + + + Gets and sets the builtin style. + + + It should be between 1 and 48. + Return -1 if it's not be set. + + + + + Represents the chartShape; + + + + + Indicates whether hide the pivot chart field buttons only when the chart is PivotChart + + + + + Specifies the pivot controls that appear on the chart + + + + + The source is the data of the pivotTable. + If PivotSource is not empty ,the chart is PivotChart. + + If the pivot table "PivotTable1" in the Worksheet "Sheet1" in the file "Book1.xls". + The pivotSource could be "[Book1.xls]Sheet1!PivotTable1" if the chart and the PivotTable is not in the same workbook. + If you set this property ,the previous data source setting will be lost. + + + + + Detects if a chart's data source has changed. + + + The method detects the changes in the chart's data source before rendering the chart to image format. + At first Chart.toImage call, the chart source data (e.g. XValuesParseData, ValuesParseData) will be recorded. + Before calling the Chart.toImage method again, call IsChartDataChanged method to check if Chart needs re-rendering. + + Returns true if the chart has changed otherwise returns false + + + + Gets and sets whether plot by row or column. + + + + + Refreshes pivot chart's data from it's pivot data source. + + + We will gather data from pivot data source to the pivot chart cache. + This method is only used to gather all data to a pivot chart. + + + + + Gets and sets how to plot the empty cells. + + + + + Indicates whether only plot visible cells. + + + + + Indicates whether displaying #N/A as blank value. + + + + + Gets and sets the name of the chart. + + + + + True if Microsoft Excel resizes the chart to match the size of the chart sheet window. + + + + + Gets the worksheet which contains this chart. + + + + + Returns all drawing shapes in this chart. + + + + + Gets and sets the printed chart size. + + + + + Gets or sets a chart's type. + + + + + Moves the chart to a specified location. + + Upper left column index. + Upper left row index. + Lower right column index + Lower right row index + + + + Gets a collection representing the data series in the chart. + + + + + Gets the chart's title. + + + + + Gets the chart's sub-title. + Only for ODS format file. + + + + + Gets the chart's plot area which includes axis tick labels. + + + + + + + Gets the chart area in the worksheet + + + + + Gets the chart's X axis. + + + + + Gets the chart's Y axis. + + + + + Gets the chart's second Y axis. + + + + + Gets the chart's second X axis. + + + + + Gets the chart's series axis. + + + + + Gets the chart legend. + + + + + Represents the chart data table. + + + + + Gets or sets a value indicating whether the chart legend will be displayed. Default is true. + + + + + Gets or sets a value indicating whether the chart area is rectangular cornered. + Default is true. + + + + + Gets or sets a value indicating whether the chart displays a data table. + + + + + Gets or sets the angle of the first pie-chart or doughnut-chart slice, in degrees (clockwise from vertical). Applies only to pie, 3-D pie, and doughnut charts, 0 to 360. + + + + + Returns or sets the space between bar or column clusters, as a percentage of the bar or column width. + The value of this property must be between 0 and 500. + + + + + Gets or sets the distance between the data series in a 3-D chart, as a percentage of the marker width. + The value of this property must be between 0 and 500. + + + + + Calculates the custom position of plot area, axes if the position of them are auto assigned. + + + + + Returns a object that represents the walls of a 3-D chart. + + This property doesn't apply to 3-D pie charts. + + + + Returns a object that represents the walls of a 3-D chart. + + This property doesn't apply to 3-D pie charts. + + + + Returns a object that represents the back wall of a 3-D chart. + + + + + Returns a object that represents the side wall of a 3-D chart. + + + + + True if gridlines are drawn two-dimensionally on a 3-D chart. + + + + + Represents the rotation of the 3-D chart view (the rotation of the plot area around the z-axis, in degrees). + + + The value of this property must be from 0 to 360, except for 3-D bar charts, where the value must be from 0 to 44. + The default value is 20. Applies only to 3-D charts. + + + + + Represents the elevation of the 3-D chart view, in degrees. + + + The chart elevation is the height at which you view the chart, in degrees. + The default is 15 for most chart types. + The value of this property must be between -90 and 90, except for 3-D bar charts, where it must be between 0 and 44. + + + + + True if the chart axes are at right angles.Applies only for 3-D charts(except Column3D and 3-D Pie Charts). + + + If this property is True, the Perspective property is ignored. + + + + + True if Microsoft Excel scales a 3-D chart so that it's closer in size to the equivalent 2-D chart. + The RightAngleAxes property must be True. + + + + + Returns or sets the height of a 3-D chart as a percentage of the chart width (between 5 and 500 percent). + + + + + Returns or sets the perspective for the 3-D chart view. Must be between 0 and 100. + This property is ignored if the RightAngleAxes property is True. + + + + + Indicates whether the chart is a 3d chart. + + + + + Represents the depth of a 3-D chart as a percentage of the chart width (between 20 and 2000 percent). + + + + + Creates the chart image and saves it to a file. + The extension of the file name determines the format of the image. + + The image file name with full path. + +

The format of the image is specified by using the extension of the file name. + For example, if you specify "myfile.png", then the image will be saved + in the PNG format. The following file extensions are recognized: + .bmp, .gif, .png, .jpg, .jpeg, .tiff, .tif, .emf.

+ If the width or height is zero or the chart is not supported according to Supported Charts List, this method will do nothing. + Please refer to Supported Charts List for more details. +
+
+ + + Creates the chart image and saves it to a file in the Jpeg format. + + The image file name with full path. + Jpeg quality. + + If the width or height is zero or the chart is not supported according to Supported Charts List, this method will do nothing. + Please refer to Supported Charts List for more details. + + + + + Creates the chart image and saves it to a stream in the Jpeg format. + + The output stream. + Jpeg quality. + + If the width or height is zero or the chart is not supported according to Supported Charts List, this method will do nothing. + Please refer to Supported Charts List for more details. + + + + + Saves the chart to a pdf file. + + the pdf file name with full path + + + + Saves the chart to a pdf file. + + the pdf file name with full path + The desired page width in inches. + The desired page height in inches. + The chart horizontal alignment type in the output page. + The chart vertical alignment type in the output page. + + + + Creates the chart pdf and saves it to a stream. + + The output stream. + + + + Creates the chart pdf and saves it to a stream. + + The output stream. + The desired page width in inches. + The desired page height in inches. + The chart horizontal alignment type in the output page. + The chart vertical alignment type in the output page. + + + + Creates the chart image and saves it to a file. + The extension of the file name determines the format of the image. + + The image file name with full path. + Additional image creation options + +

The format of the image is specified by using the extension of the file name. + For example, if you specify "myfile.png", then the image will be saved + in the PNG format. The following file extensions are recognized: + .bmp, .gif, .png, .jpg, .jpeg, .tiff, .tif, .emf.

+ If the width or height is zero or the chart is not supported according to Supported Charts List, this method will do nothing. + Please refer to Supported Charts List for more details. +
+ + Saves to Tiff with 300 dpi and CCITT4 compression. + + + [C#] + ImageOrPrintOptions options = new ImageOrPrintOptions(); + options.HorizontalResolution = 300; + options.VerticalResolution = 300; + options.TiffCompression = TiffCompression.CompressionCCITT4; + + Workbook book = new Workbook(@"c:\test.xls"); + book.Worksheets[0].Charts[0].ToImage(@"c:\chart.Tiff", options); + + [VB] + Dim options As ImageOrPrintOptions = New ImageOrPrintOptions() + options.HorizontalResolution = 300 + options.VerticalResolution = 300 + options.TiffCompression = TiffCompression.CompressionCCITT4 + + Dim book As Workbook = New Workbook("c:\test.xls") + book.Worksheets(0).Charts(0).ToImage("c:\chart.Tiff", options) + + + + Saves to Jpeg with 300 dpi and 80 image quality. + + + [C#] + ImageOrPrintOptions options = new ImageOrPrintOptions(); + options.HorizontalResolution = 300; + options.VerticalResolution = 300; + options.Quality = 80; + + Workbook book = new Workbook(@"c:\test.xls"); + book.Worksheets[0].Charts[0].ToImage(@"c:\chart.Jpeg", options); + + [VB] + Dim options As ImageOrPrintOptions = New ImageOrPrintOptions() + options.HorizontalResolution = 300 + options.VerticalResolution = 300 + options.Quality = 80 + + Dim book As Workbook = New Workbook("c:\test.xls") + book.Worksheets(0).Charts(0).ToImage("c:\chart.Jpeg", options) + + +
+ + + Creates the chart image and saves it to a stream in the specified format. + + The output stream. + Additional image creation options + +

The format of the image is specified by using options.ImageFormat. + The following formats are supported: + ImageFormat.Bmp, ImageFormat.Gif, ImageFormat.Png, ImageFormat.Jpeg, ImageFormat.Tiff, ImageFormat.Emf.

+ If the width or height is zero or the chart is not supported according to Supported Charts List, this method will do nothing. + Please refer to Supported Charts List for more details. +
+
+ + + Gets actual size of chart + + + + + Represents the way the chart is attached to the cells below it. + + + + + Represents the page setup description in this chart. + + + + + Returns which axes exist on the chart. + + + Normally, Pie, PieExploded, PiePie,PieBar, Pie3D, Pie3DExploded,Doughnut, DoughnutExploded is no axis. + + + + + Switches row/column. + + + False means switching row/column fails. + + + + + Gets the data source range of the chart . + + The data source. + + Only supports range. + + + + + Specifies data range for a chart. + + Specifies values from which to plot the data series + Specifies whether to plot the series from a range of cell values by row or by column. + + + + Gets the line. + + + + + Encapsulates the object that represents the chart area in the worksheet. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + + //Getting Chart Area + ChartArea chartArea = chart.ChartArea; + + //Setting the foreground color of the chart area + chartArea.Area.ForegroundColor = Color.Yellow; + + //Setting Chart Area Shadow + chartArea.Shadow = true; + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + + 'Getting Chart Area + Dim chartArea As ChartArea = chart.ChartArea + + 'Setting the foreground color of the chart area + chartArea.Area.ForegroundColor = Color.Yellow + + 'Setting Chart Area Shadow + chartArea.Shadow = True + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + Gets or gets the horizontal offset from its upper left corner column. + + + + + Gets or gets the vertical offset from its upper left corner row. + + + + + Gets or sets the vertical offset from its lower right corner row. + + + + + Gets or sets the horizontal offset from its lower right corner column. + + + + + Gets a object of the specified chartarea object. + + + + + Encapsulates a collection of objects. + + + + [C#] + + Workbook workbook = new Workbook(); + + ChartCollection charts = workbook.Worksheets[0].Charts; + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + + Dim ChartCollection as Charts = workbook.Worksheets(0).Charts + + + + + + + Adds a chart to the collection. + + Chart type + The x offset to corner + The y offset to corner + The chart width + The chart height + + object index. + + + + Adds a chart to the collection. + + Chart type + Upper left row index. + Upper left column index. + Lower right row index + Lower right column index + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the chart by the name. + + The chart name. + The chart. + + The default chart name is null. So you have to explicitly set the name of the chart. + + + + + Remove a chart at the specific index. + + The chart index. + + + + Clear all charts. + + + + + Represents a chart data table. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 25, 10); + + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + + chart.IsDataTableShown = true; + + //Getting Chart Table + ChartDataTable chartTable = chart.ChartDataTable; + + //Setting Chart Table Font Color + chartTable.Font.Color = System.Drawing.Color.Red; + + //Setting Legend Key VisibilityOptions + chartTable.ShowLegendKey = false; + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.Column, 5, 0, 25, 10) + + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + + chart.IsDataTableShown = True + + 'Getting Chart Table + Dim chartTable As ChartDataTable = chart.ChartDataTable + + 'Setting Chart Table Font Color + chartTable.Font.Color = System.Drawing.Color.Red + + 'Setting Legend Key VisibilityOptions + chartTable.ShowLegendKey = False + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + + Gets a object which represents the font setting of the specified chart data table. + + + + + True if the text in the object changes font size when the object size changes. + The default value is True. + + + + + Gets and sets the display mode of the background + + + + + Gets and sets the display mode of the background + + NOTE: This member is now obsolete. Instead, + please use ChartDataTable.BackgroundMode property. + This property will be removed 12 months later since JANUARY 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + True if the chart data table has horizontal cell borders + + + + + True if the chart data table has vertical cell borders + + + + + True if the chart data table has outline borders + + + + + True if the data label legend key is visible. + + + + + Returns a Border object that represents the border of the object + + + + + Encapsulates the object that represents the frame object in a chart. + + + + + Indicates whether the size of the plot area size includes the tick marks, and the axis labels. + False specifies that the size shall determine the size of the plot area, the tick marks, and the axis labels. + + + Only for Xlsx file. + + + + + Gets the border. + + + + + Gets the area. + + + + + Gets a object of the specified ChartFrame object. + + NOTE: This member is now obsolete. Instead, + please use ChartFrame.Font property. + This property will be removed 12 months later since JANUARY 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets a object of the specified ChartFrame object. + + + + + True if the text in the object changes font size when the object size changes. The default value is True. + + + + + Gets and sets the display mode of the background + + + + + Gets and sets the display mode of the background + + NOTE: This member is now obsolete. Instead, + please use ChartFrame.BackgroundMode property. + This property will be removed 12 months later since JANUARY 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates whether the chart frame is automatic sized. + + + + + Gets or sets the x coordinate of the upper left corner in units of 1/4000 of the chart area. + + + How to convert units of 1/4000 to pixels? + X In Pixels = X * Chart.ChartObject.Width / 4000; + + + + + Gets or sets the y coordinate of the upper left corner in units of 1/4000 of the chart area. + + + How to convert units of 1/4000 to pixels? + Y In Pixels = Y * Chart.ChartObject.Height / 4000; + + + + + Gets or sets the height of frame in units of 1/4000 of the chart area. + + + How to convert units of 1/4000 to pixels? + Height In Pixels = Y * Chart.ChartObject.Height / 4000; + + + + + Gets or sets the width of frame in units of 1/4000 of the chart area. + + + How to convert units of 1/4000 to pixels? + Width In Pixels = Width * Chart.ChartObject.Height / 4000; + + + + + True if the frame has a shadow. + + + + + Gets the object. + + + + + Indicates whether default position(DefaultX, DefaultY, DefaultWidth and DefaultHeight) are set. + + + + + Represents x of default position + + + + + Represents y of default position + + + + + Represents width of default position + + + + + Represents height of default position + + + + + Set position of the frame to automatic + + + + + Represents line format type of chart line. + + + + + Represents automatic formatting type. + + + + + Represents solid formatting type. + + + + + Represents none formatting type. + + + + + Gradient + + + + + Represents the marker style in a line chart, scatter chart, or radar chart. + + + + + Automatic markers. + + + + + Circular markers. + + + + + Long bar markers + + + + + Diamond-shaped markers. + + + + + Short bar markers. + + + + + No markers. + + + + + Square markers with a plus sign. + + + + + Square markers. + + + + + Square markers with an asterisk. + + + + + Triangular markers. + + + + + Square markers with an X. + + + + + Picture + + + + + Represents a single point in a series in a chart. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.PieExploded, 5, 0, 25, 10); + + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + + //Show Data Labels + chart.NSeries[0].DataLabels.IsValueShown = true; + + for (int i = 0; i < chart.NSeries[0].Points.Count; i++) + { + //Get Data Point + ChartPoint point = chart.NSeries[0].Points[i]; + //Set Pir Explosion + point.Explosion = 15; + //Set Border Color + point.Border.Color = System.Drawing.Color.Red; + } + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.PieExploded, 5, 0, 25, 10) + + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + + 'Show Data Labels + chart.NSeries(0).DataLabels.IsValueShown = True + + For i As Integer = 0 To chart.NSeries(0).Points.Count - 1 + 'Get Data Point + Dim point As ChartPoint = chart.NSeries(0).Points(i) + 'Set Pir Explosion + point.Explosion = 15 + 'Set Border Color + point.Border.Color = System.Drawing.Color.Red + Next i + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + + The distance of an open pie slice from the center of the pie chart is expressed as a percentage of the pie diameter. + + + + + True if the chartpoint has a shadow. + + + + + Gets the border. + + + + + Gets the area. + + + + + Gets the marker. + + + + + Returns a DataLabels object that represents the data label associated with the point. + + + + + Gets or sets the Y value of the chart point. + + + + + Gets Y value type of the chart point. + + + + + Gets or sets the X value of the chart point. + + + + + Gets X value type of the chart point. + + + + + Gets the object that holds the visual shape properties of the ChartPoint. + + + + + Gets or sets a value indicates whether this data points is in the second pie or bar + on a pie of pie or bar of pie chart + + + + + Gets the x coordinate of the upper left corner in units of 1/4000 of chart's width after calls Chart.Calculate() method. + + + + + Gets the y coordinate of the upper left corner in units of 1/4000 of chart's height after calls Chart.Calculate() method. + + + + + Gets the width in units of 1/4000 of chart's width after calls Chart.Calculate() method. + + + + + Gets the height in units of 1/4000 of chart's height after calls Chart.Calculate() method. + + + + + Gets the x coordinate of the upper left corner in units of pixels after calls Chart.Calculate() method. + + + + + Gets the y coordinate of the upper left corner in units of pixels after calls Chart.Calculate() method. + + + + + Gets the width in units of pixels after calls Chart.Calculate() method. + + + + + Gets the height in units of pixels after calls Chart.Calculate() method. + + + + + Gets the width of border in units of pixels after calls Chart.Calculate() method. + + + + + Gets the radius of bubble, pie or doughnut in units of pixels after calls Chart.Calculate() method. + + + + + Gets the inner radius of doughnut slice in units of pixels after calls Chart.Calculate() method. + Applies to Doughnut chart. + + + + + Gets the starting angle for the pie section, measured in degrees clockwise from the x-axis after calls Chart.Calculate() method. + Applies to Pie chart. + + + + + Gets the ending angle for the pie section, measured in degrees clockwise from the x-axis after calls Chart.Calculate() method. + Applies to Pie chart. + + + + + Gets the x coordinate of starting point for the pie section after calls Chart.Calculate() method. + Applies to Pie and Doughnut chart. + + + + + Gets the y coordinate of starting point for the pie section after calls Chart.Calculate() method. + Applies to Pie and Doughnut chart. + + + + + Gets the x coordinate of ending point for the pie section after calls Chart.Calculate() method. + Applies to Pie and Doughnut chart. + + + + + Gets the y coordinate of ending point for the pie section after calls Chart.Calculate() method. + Applies to Pie and Doughnut chart. + + + + + Gets the x coordinate of starting point for the pie section after calls Chart.Calculate() method. + Applies to Doughnut chart. + + + + + Gets the y coordinate of starting point for the pie section after calls Chart.Calculate() method. + Applies to Doughnut chart. + + + + + Gets the x coordinate of ending point for the pie section after calls Chart.Calculate() method. + Applies to Doughnut chart. + + + + + Gets the y coordinate of ending point for the pie section after calls Chart.Calculate() method. + Applies to Doughnut chart. + + + + + Gets the number of top points after calls Chart.Calculate() method. + + + + + Gets x-coordinate of the top point of shape after calls Chart.Calculate() method. + Applies 3D charts: Column3D, Bar3D, Cone, Cylinder, Pyramid and Area3D + + + + + Gets y-coordinate of the top point of shape after calls Chart.Calculate() method. + Applies 3D charts: Column3D, Bar3D, Cone, Cylinder, Pyramid and Area3D + + + + + Gets the number of bottom points after calls Chart.Calculate() method. + + + + + Gets x-coordinate of the bottom point of shape after calls Chart.Calculate() method. + Applies 3D charts: Column3D, Bar3D, Cone, Cylinder, Pyramid + + + + + Gets y-coordinate of the bottom point of shape after calls Chart.Calculate() method. + Applies 3D charts: Column3D, Bar3D, Cone, Cylinder, Pyramid + + + + + Gets the number of the points on category axis after calls Chart.Calculate() method. Only applies to area chart. + + + Area 2D chart return 1 + Area 3D chart return 2. + + + + + Gets x-coordinate of the point on category axis after calls Chart.Calculate() method. Only applies to Area chart. + + + Area 2D chart: index is 0. + Area 3D chart: index is 0 or 1. + + + + + Gets y-coordinate of the point on category axis after calls Chart.Calculate() method. Only applies to Area chart. + + + Area 2D chart: index is 0. + Area 3D chart: index is 0 or 1. + + + + + Represents a collection that contains all the points in one series. + + + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.PieExploded, 5, 0, 25, 10); + + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", true); + + //Show Data Labels + chart.NSeries[0].DataLabels.IsValueShown = true; + + ChartPointCollection points = chart.NSeries[0].Points; + + for (int i = 0; i < points.Count; i++) + { + //Get Data Point + ChartPoint point = points[i]; + //Set Pir Explosion + point.Explosion = 15; + //Set Border Color + point.Border.Color = System.Drawing.Color.Red; + } + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.PieExploded, 5, 0, 25, 10) + + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B3" + chart.NSeries.Add("A1:B3", True) + + 'Show Data Labels + chart.NSeries(0).DataLabels.IsValueShown = True + + Dim points As ChartPointCollection = chart.NSeries(0).Points + + For i As Integer = 0 To points.Count - 1 + 'Get Data Point + Dim point As ChartPoint = points(i) + 'Set Pir Explosion + point.Explosion = 15 + 'Set Border Color + point.Border.Color = System.Drawing.Color.Red + Next i + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + + Returns an enumerator for the entire . + + + + + + + Remove all setting of the chart points. + + + + + Removes point at the index of the series.. + + The index of the point. + + + + Gets the count of the chart point. + + + + + Gets the element at the specified index in the series. + + The index of chart point in the series. + The ChartPoint object. + + + + Represents the way the two sections of either a pie of pie chart or a bar of pie chart are split. + + + + + Represents the data points shall be split between the pie + and the second chart by putting the last Split Position + of the data points in the second chart + + + + + Represents the data points shall be split between the pie + and the second chart by putting the data points with + value less than Split Position in the second chart. + + + + + Represents the data points shall be split between the pie + and the second chart by putting the points with + percentage less than Split Position percent in the + second chart. + + + + + Represents the data points shall be split between the pie + and the second chart according to the Custom Split + values. + + + + + Represents the data points shall be split using the default + mechanism for this chart type. + + + + + Represents the text direction type of the chart. + + + + + Horizontal direction type. + + + + + Vertical direction type. + + + + + Rotate 90 angle. + + + + + Rotate 270 angle. + + + + + Stacked text. + + + + + Encapsulates the object that represents the frame object which contains text. + + + + + Indicates the text is auto generated. + + + + + Indicates whether this data labels is deleted. + + + + + Gets and sets the text horizontal alignment. + + + + + Gets or sets the text vertical alignment of text. + + + + + Represents text rotation angle. + + +
0: Not rotated.
+
255: Top to Bottom.
+
-90: Downward.
+
90: Upward.
+
+
+ + + Returns a Characters object that represents a range of characters within the text. + + The index of the start of the character. + The number of characters. + Characters object. + + + + Gets or sets the text of a frame's title. + + + + + Gets and sets a reference to the worksheet. + + + + + Represents text reading order. + + NOTE: This member is now obsolete. Instead, + please use ChartTextFrame.ReadingOrder property. + This property will be removed 12 months later since March 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents text reading order. + + + + + Gets and sets the direction of text. + + + + + Gets or sets a value indicating whether the text is wrapped. + + + + + Gets or sets whether a shape should be auto-fit to fully contain the text described within it. Auto-fitting is + when text within a shape is scaled in order to contain all the text inside. + + + + + Enumerates all chart types used in Excel. + + + + + Represents Area Chart. + + + + + Represents Stacked Area Chart. + + + + + Represents 100% Stacked Area Chart. + + + + + Represents 3D Area Chart. + + + + + Represents 3D Stacked Area Chart. + + + + + Represents 3D 100% Stacked Area Chart. + + + + + Represents Bar Chart: Clustered Bar Chart. + + + + + Represents Stacked Bar Chart. + + + + + Represents 100% Stacked Bar Chart. + + + + + Represents 3D Colustered Bar Chart. + + + + + Represents 3D Stacked Bar Chart. + + + + + Represents 3D 100% Stacked Bar Chart. + + + + + Represents Bubble Chart. + + + + + Represents 3D Bubble Chart. + + + + + Represents Column Chart: Clustered Column Chart. + + + + + Represents Stacked Column Chart. + + + + + Represents 100% Stacked Column Chart. + + + + + Represents 3D Column Chart. + + + + + Represents 3D Clustered Column Chart. + + + + + Represents 3D Stacked Column Chart. + + + + + Represents 3D 100% Stacked Column Chart. + + + + + Represents Cone Chart. + + + + + Represents Stacked Cone Chart. + + + + + Represents 100% Stacked Cone Chart. + + + + + Represents Conical Bar Chart. + + + + + Represents Stacked Conical Bar Chart. + + + + + Represents 100% Stacked Conical Bar Chart. + + + + + Represents 3D Conical Column Chart. + + + + + Represents Cylinder Chart. + + + + + Represents Stacked Cylinder Chart. + + + + + Represents 100% Stacked Cylinder Chart. + + + + + Represents Cylindrical Bar Chart. + + + + + Represents Stacked Cylindrical Bar Chart. + + + + + Represents 100% Stacked Cylindrical Bar Chart. + + + + + Represents 3D Cylindrical Column Chart. + + + + + Represents Doughnut Chart. + + + + + Represents Exploded Doughnut Chart. + + + + + Represents Line Chart. + + + + + Represents Stacked Line Chart. + + + + + Represents 100% Stacked Line Chart. + + + + + Represents Line Chart with data markers. + + + + + Represents Stacked Line Chart with data markers. + + + + + Represents 100% Stacked Line Chart with data markers. + + + + + Represents 3D Line Chart. + + + + + Represents Pie Chart. + + + + + Represents 3D Pie Chart. + + + + + Represents Pie of Pie Chart. + + + + + Represents Exploded Pie Chart. + + + + + Represents 3D Exploded Pie Chart. + + + + + Represents Bar of Pie Chart. + + + + + Represents Pyramid Chart. + + + + + Represents Stacked Pyramid Chart. + + + + + Represents 100% Stacked Pyramid Chart. + + + + + Represents Pyramid Bar Chart. + + + + + Represents Stacked Pyramid Bar Chart. + + + + + Represents 100% Stacked Pyramid Bar Chart. + + + + + Represents 3D Pyramid Column Chart. + + + + + Represents Radar Chart. + + + + + Represents Radar Chart with data markers. + + + + + Represents Filled Radar Chart. + + + + + Represents Scatter Chart. + + + + + Represents Scatter Chart connected by curves, with data markers. + + + + + Represents Scatter Chart connected by curves, without data markers. + + + + + Represents Scatter Chart connected by lines, with data markers. + + + + + Represents Scatter Chart connected by lines, without data markers. + + + + + Represents High-Low-Close Stock Chart. + + + + + Represents Open-High-Low-Close Stock Chart. + + + + + Represents Volume-High-Low-Close Stock Chart. + + + + + Represents Volume-Open-High-Low-Close Stock Chart. + + + + + Represents Surface Chart: 3D Surface Chart. + + + + + Represents Wireframe 3D Surface Chart. + + + + + Represents Contour Chart. + + + + + Represents Wireframe Contour Chart. + + + + + The series is laid out as box and whisker. + + + + + The series is laid out as a funnel. + + + + + The series is laid out as pareto lines. + + + + + The series is laid out as a sunburst. + + + + + The series is laid out as a treemap. + + + + + The series is laid out as a waterfall. + + + + + The series is laid out as a histogram. + + + + + The series is laid out as a region map. + + + + + Represents the axis cross type. + + + + + Microsoft Excel sets the axis crossing point. + + + + + The axis crosses at the maximum value. + + + + + The axis crosses at the minimum value. + + + + + The axis crosses at the custom value. + + + + + Encapsulates a collection of all the DataLabel objects for the specified Series. + + + + + [C#] + + //Set the DataLabels in the chart + DataLabels datalabels; + for (int i = 0; i <chart.NSeries.Count; i++) + { + datalabels = chart.NSeries[i].DataLabels; + //Set the position of DataLabels + datalabels.Position = LabelPositionType.InsideBase; + //Show the category name in the DataLabels + datalabels.ShowCategoryName = true; + //Show the value in the DataLabels + datalabels.ShowValue = true; + //Not show the percentage in the DataLabels + datalabels.ShowPercentage = false; + //Not show the legend key. + datalabels.ShowLegendKey = false; + } + + [Visual Basic] + + 'Set the DataLabels in the chart + Dim datalabels As DataLabels + Dim i As Integer + For i = 0 To chart.NSeries.Count - 1 Step 1 + datalabels = chart.NSeries(i).DataLabels + 'Set the position of DataLabels + datalabels.Position = LabelPositionType.InsideBase + 'Show the category name in the DataLabels + datalabels.ShowCategoryName= True + 'Show the value in the DataLabels + datalabels.ShowValue = True + 'Not show the percentage in the DataLabels + datalabels.ShowPercentage = False + 'Not show the legend key. + datalabels.ShowLegendKey = False + Next + + + + + + Gets the border. + + + + + Gets the area. + + + + + Indicates the text is auto generated. + + + + + Gets and sets the direction of text. + + + + + Gets or sets the text of data label. + + + + + Gets or sets a value indicating whether the text is wrapped. + + + + + Gets and sets the linked source. + + + + + Gets and sets the display mode of the background + + + + + Represents a specified chart's data label values display behavior. True displays the values. False to hide. + + + + + Indicates whether showing cell range as the data labels. + + + + + Represents a specified chart's data label percentage value display behavior. True displays the percentage value. False to hide. + + + + + Represents a specified chart's data label percentage value display behavior. True displays the percentage value. False to hide. + + + + + Represents a specified chart's data label category name display behavior.True to display the category name for the data labels on a chart. False to hide. + + + + + Returns or sets a Boolean to indicate the series name display behavior for the data labels on a chart. + True to show the series name. False to hide. + + + + + Represents a specified chart's data label legend key display behavior. + True if the data label legend key is visible. + + + + + Represents the format string for the DataLabels object. + + + + + Gets and sets the built-in number format. + + + + + True if the number format is linked to the cells + (so that the number format changes in the labels when it changes in the cells). + + + + + Gets the font of the DataLabels; + + + + + Gets or sets the separator type used for the data labels on a chart. + + + NOTE: This member is now obsolete. Instead, + please use DataLabels.SeparatorType property. + This property will be removed 12 months later since September 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or sets the separator type used for the data labels on a chart. + + + To set custom separator, please set the property as and then specify the expected value for . + + + + + Gets or sets the separator value used for the data labels on a chart. + + + + + Represents the position of the data label. + + + + + Gets or sets shape type of data label. + + + + + Represents the separator type of DataLabels. + + + + + Represents automatic separator + + + + + Represents space(" ") + + + + + Represents comma(",") + + + + + Represents semicolon(";") + + + + + Represents period(".") + + + + + Represents newline("\n") + + + + + Represents custom separator + + + + + Represents the separator type of DataLabels. + + + NOTE: This member is now obsolete. Instead, + please use DataLabelsSeparatorType enum. + This property will be removed 12 months later since September 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents automatic separator + + + + + Represents space(" ") + + + + + Represents comma(",") + + + + + Represents semicolon(";") + + + + + Represents period(".") + + + + + Represents newline("\n") + + + + + Represents custom separator + + + + + Represents the display unit label. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Excel object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a sample value to "A4" cell + worksheet.Cells["A4"].PutValue(200); + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + //Adding a sample value to "B4" cell + worksheet.Cells["B4"].PutValue(40); + //Adding a sample value to "C1" cell as category data + worksheet.Cells["C1"].PutValue("Q1"); + //Adding a sample value to "C2" cell as category data + worksheet.Cells["C2"].PutValue("Q2"); + //Adding a sample value to "C3" cell as category data + worksheet.Cells["C3"].PutValue("Y1"); + //Adding a sample value to "C4" cell as category data + worksheet.Cells["C4"].PutValue("Y2"); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", true); + //Setting the data source for the category data of NSeries + chart.NSeries.CategoryData = "C1:C4"; + //Setting the display unit of value(Y) axis. + chart.ValueAxis.DisplayUnit = DisplayUnitType.Hundreds; + DisplayUnitLabel displayUnitLabel = chart.ValueAxis.DisplayUnitLabel; + //Setting the custom display unit label + displayUnitLabel.Text = "100"; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Excel object + Dim sheetIndex As Int32 = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a sample value to "A4" cell + worksheet.Cells("A4").PutValue(200) + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + 'Adding a sample value to "B4" cell + worksheet.Cells("B4").PutValue(40) + 'Adding a sample value to "C1" cell as category data + worksheet.Cells("C1").PutValue("Q1") + 'Adding a sample value to "C2" cell as category data + worksheet.Cells("C2").PutValue("Q2") + 'Adding a sample value to "C3" cell as category data + worksheet.Cells("C3").PutValue("Y1") + 'Adding a sample value to "C4" cell as category data + worksheet.Cells("C4").PutValue("Y2") + 'Adding a chart to the worksheet + Dim chartIndex As Int32 = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", True) + 'Setting the data source for the category data of NSeries + Chart.NSeries.CategoryData = "C1:C4" + 'Setting the display unit of value(Y) axis. + chart.ValueAxis.DisplayUnit = DisplayUnitType.Hundreds + Dim displayUnitLabel As DisplayUnitLabel = chart.ValueAxis.DisplayUnitLabel + 'Setting the custom display unit label + displayUnitLabel.Text = "100" + 'Saving the Excel file + workbook.Save("C:\\book1.xls") + + + + + + Gets or sets the text of display unit label. + + + + + Gets a object of the specified ChartFrame object. + + + + + True if the text in the object changes font size when the object size changes. The default value is True. + + + + + Represents the type of display unit. + + + + + Display unit is None. + + + + + Specifies the values on the chart shall be divided by 100. + + + + + Specifies the values on the chart shall be divided by 1,000. + + + + + Specifies the values on the chart shall be divided by 10,000. + + + + + Specifies the values on the chart shall be divided by 100,000. + + + + + Specifies the values on the chart shall be divided by 1,000,000. + + + + + Specifies the values on the chart shall be divided by 10,000,000. + + + + + Specifies the values on the chart shall be divided by 100,000,000. + + + + + Specifies the values on the chart shall be divided by 1,000,000,000. + + + + + Specifies the values on the chart shall be divided by 1,000,000,000,000. + + + + + The values on the chart shall be divided by 0.01. + + + + + specifies a custom value for the display unit. + + + + + Represents the up/down bars in a chart. + + + + + Gets the border . + + + + + Gets the . + + + + + Represents error bar of data series. + + + + [C#] + Workbook workbook = new Workbook(); + Cells cells = workbook.Worksheets[0].Cells; + cells["a1"].PutValue(2); + cells["a2"].PutValue(5); + cells["a3"].PutValue(3); + cells["a4"].PutValue(6); + cells["b1"].PutValue(4); + cells["b2"].PutValue(3); + cells["b3"].PutValue(6); + cells["b4"].PutValue(7); + + cells["C1"].PutValue("Q1"); + cells["C2"].PutValue("Q2"); + cells["C3"].PutValue("Y1"); + cells["C4"].PutValue("Y2"); + + int chartIndex = excel.Worksheets[0].Charts.Add(ChartType.Column, 11, 0, 27, 10); + + Chart chart = excel.Worksheets[0].Charts[chartIndex]; + chart.NSeries.Add("A1:B4", true); + + chart.NSeries.CategoryData = "C1:C4"; + + for(int i = 0; i < chart.NSeries.Count; i ++) + { + ASeries aseries = chart.NSeries[i]; + aseries.YErrorBar.DisplayType = ErrorBarDisplayType.Minus; + aseries.YErrorBar.Type = ErrorBarType.FixedValue; + aseries.YErrorBar.Amount = 5; + } + + [Visual Basic] + Dim workbook As Workbook = New Workbook() + Dim cells As Cells = workbook.Worksheets(0).Cells + cells("a1").PutValue(2) + cells("a2").PutValue(5) + cells("a3").PutValue(3) + cells("a4").PutValue(6) + cells("b1").PutValue(4) + cells("b2").PutValue(3) + cells("b3").PutValue(6) + cells("b4").PutValue(7) + + cells("C1").PutValue("Q1") + cells("C2").PutValue("Q2") + cells("C3").PutValue("Y1") + cells("C4").PutValue("Y2") + + Dim chartIndex As Integer = excel.Worksheets(0).Charts.Add(ChartType.Column,11,0,27,10) + + Dim chart As Chart = excel.Worksheets(0).Charts(chartIndex) + chart.NSeries.Add("A1:B4", True) + + chart.NSeries.CategoryData = "C1:C4" + + Dim i As Integer + For i = 0 To chart.NSeries.Count - 1 + Dim aseries As ASeries = chart.NSeries(i) + aseries.YErrorBar.DisplayType = ErrorBarDisplayType.Minus + aseries.YErrorBar.Type = ErrorBarType.FixedValue + aseries.YErrorBar.Amount = 5 + Next + + + + + + Represents error bar amount type. + + + + [C#] + //Sets custom error bar type + aseries.YErrorBar.Type = ErrorBarType.InnerCustom; + aseries.YErrorBar.PlusValue = "=Sheet1!A1"; + aseries.YErrorBar.MinusValue = "=Sheet1!A2"; + + [Visual Basic] + 'Sets custom error bar type + aseries.YErrorBar.Type = ErrorBarType.InnerCustom + aseries.YErrorBar.PlusValue = "=Sheet1!A1" + aseries.YErrorBar.MinusValue = "=Sheet1!A2" + + + + + + Represents error bar display type. + + + + + Represents amount of error bar. + The amount must be greater than and equal to zero. + + + + Indicates if formatting error bars with a T-top. + + + + + Represents positive error amount when error bar type is Custom. + + + + + Represents negative error amount when error bar type is Custom. + + + + + Represents error bar display type. + + + + + Both + + + + + Minus + + + + + None + + + + + Plus + + + + + Represents error bar amount type. + + + + + InnerCustom value type. + + + + + Fixed value type. + + + + + Percentage type + + + + + Standard deviation type. + + + + + Standard error type. + + + + + Encapsulates the object that represents the floor of a 3-D chart. + + + + + [C#] + + //Instantiate the License class + Aspose.Cells.License license = new Aspose.Cells.License(); + + //Pass only the name of the license file embedded in the assembly + license.SetLicense("Aspose.Cells.lic"); + + //Instantiate the workbook object + Workbook workbook = new Workbook(); + + //Get cells collection + Cells cells = workbook.Worksheets[0].Cells; + + //Put values in cells + cells["A1"].PutValue(1); + + cells["A2"].PutValue(2); + + cells["A3"].PutValue(3); + + //get charts colletion + Charts charts = workbook.Worksheets[0].Charts; + + //add a new chart + int index = charts.Add(ChartType.Column3DStacked, 5, 0, 15, 5); + + //get the newly added chart + Chart chart = charts[index]; + + //set charts nseries + chart.NSeries.Add("A1:A3", true); + + //Show data labels + chart.NSeries[0].DataLabels.IsValueShown = true; + + //Get chart's floor + Floor floor = chart.Floor; + + //set floor's border as red + floor.Border.Color = System.Drawing.Color.Red; + + //set fill format + floor.FillFormat.SetPresetColorGradient(GradientPresetType.CalmWater, GradientStyleType.DiagonalDown, 2); + + //save the file + workbook.Save(@"d:\dest.xls"); + + [VB.NET] + + 'Instantiate the License class + Dim license As New Aspose.Cells.License() + + 'Pass only the name of the license file embedded in the assembly + license.SetLicense("Aspose.Cells.lic") + + 'Instantiate the workbook object + Dim workbook As New Workbook() + + 'Get cells collection + Dim cells As Cells = workbook.Worksheets(0).Cells + + 'Put values in cells + cells("A1").PutValue(1) + + cells("A2").PutValue(2) + + cells("A3").PutValue(3) + + 'get charts colletion + Dim charts As Charts = workbook.Worksheets(0).Charts + + 'add a new chart + Dim index As Integer = charts.Add(ChartType.Column3DStacked, 5, 0, 15, 5) + + 'get the newly added chart + Dim chart As Chart = charts(index) + + 'set charts nseries + chart.NSeries.Add("A1:A3", True) + + 'Show data labels + chart.NSeries(0).DataLabels.IsValueShown = True + + 'Get chart's floor + Dim floor As Floor = chart.Floor + + 'set floor's border as red + floor.Border.Color = System.Drawing.Color.Red + + 'set fill format + floor.FillFormat.SetPresetColorGradient(GradientPresetType.CalmWater, GradientStyleType.DiagonalDown, 2) + + 'save the file + workbook.Save("d:\dest.xls") + + + + + + + Gets or sets the border . + + + + + Represents the type of formatting applied to an object or a object. + + + + + Represents automatic formatting type. + + + + + Represents custom formatting type. + + + + + Represents none formatting type. + + + + + Represents data label position type. + + + + + Applies only to bar, 2d/3d pie charts + + + + + Applies only to bar, 2d/3d pie charts + + + + + Applies only to bar charts + + + + + Applies only to bar, 2d/3d pie charts + + + + + Applies only to line charts + + + + + Applies only to line charts + + + + + Applies only to line charts + + + + + Applies only to line charts + + + + + Applies only to 2d/3d pie charts + + + + + User moved the data labels, Only for reading chart from template file. + + + + + Encapsulates the object that represents the chart legend. + + + + [C#] + + //Set Legend's width and height + Legend legend = chart.Legend; + + //Legend is at right side of chart by default. + //If the legend is at left or right side of the chart, setting Legend.X property will not take effect. + //If the legend is at top or bottom side of the chart, setting Legend.Y property will not take effect. + legend.Y = 1500; + legend.Width = 50; + legend.Height = 50; + //Set legend's position + legend.Position = LegendPositionType.Left; + + [Visual Basic] + + 'Set Legend's width and height + Dim legend as Legend = chart.Legend + + 'Legend is at right side of chart by default. + 'If the legend is at left or right side of the chart, setting Legend.X property will not take effect. + 'If the legend is at top or bottom side of the chart, setting Legend.Y property will not take effect. + legend.Y = 1500 + legend.Width = 50 + legend.Height = 50 + 'Set legend's position + legend.Position = LegendPositionType.Left + + + + + + Gets or sets the legend position type. + + +
Default position is right.
+
If the legend is at left or right side of the chart, setting Legend.X property will not take effect.
+
If the legend is at top or bottom side of the chart, setting Legend.Y property will not take effect.
+
+
+ + + Gets a collection of all the LegendEntry objects in the specified chart legend. + Setting the legend entries of the surface chart is not supported. + So it will return null if the chart type is surface chart type. + + + + + Gets the labels of the legend entries after call Chart.Calculate() method. + + + + + Gets or sets whether other chart elements shall be allowed to overlap this chart element. + + + + + Represents a legend entry in a chart legend. + + + + + Gets and sets whether the legend entry is deleted. + + + + + Gets a object of the specified ChartFrame object. + + + + + Gets a object of the specified LegendEntry object. + + NOTE: This member is now obsolete. Instead, + please use LegendEntry.Font property. + This property will be removed 12 months later since JANUARY 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or sets no fill of the text. + + + + + True if the text in the object changes font size when the object size changes. + The default value is True. + + + + + Gets and sets the display mode of the background + + NOTE: This member is now obsolete. Instead, + please use LegendEntry.BackgroundMode property. + This property will be removed 12 months later since JANUARY 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the display mode of the background + + + + + Represents a collection of all the objects in the specified chart legend. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Enumerates the legend position types. + + + + + Displays the legend to the bottom of the chart's plot area. + + + + + Displays the legend to the corner of the chart's plot area. + + + + + Displays the legend to the left of the chart's plot area. + + + + + Represents that the legend is not docked. + + + + + Displays the legend to the right of the chart's plot area. + + + + + Displays the legend to the top of the chart's plot area. + + + + + Represents the layout of map chart's labels. + + + + + Only best fit. + + + + + Shows all labels. + + + + + No labels. + + + + + Represents projection type of the map chart. + + + + + Automatic + + + + + Mercator + + + + + Miller + + + + + Albers + + + + + Represents the region type of the map chart. + + + + + Automatic + + + + + Only Data. + + + + + Country region list. + + + + + World. + + + + + Represents the marker in a line chart, scatter chart, or radar chart. + + + + + Gets the border. + + + + + Gets the area. + + + + + Represents the marker style. Applies to line chart, scatter chart, or radar chart. + + + + + Represents the marker size in unit of points. Applies to line chart, scatter chart, or radar chart. + + + + + Represents the marker size in unit of pixels. Applies to line chart, scatter chart, or radar chart. + + + + + Represents the marker foreground color in a line chart, scatter chart, or radar chart. + + + + + Gets or sets the marker foreground color set type. + + + + + Represents the marker background color in a line chart, scatter chart, or radar chart. + + + + + Gets or sets the marker background color set type. + + + + + Represents a complex type that specifies the pivot controls that appear on the chart + + + + + Specifies whether a control for each PivotTable field on the PivotTable page axis + of the source PivotTable appears on the chart when dropZonesVisible is set to true. + + + + + Specifies whether a control for each PivotTable field on the PivotTable row axis + of the source PivotTable appears on the chart when dropZonesVisible is set to true. + + + + + Specifies whether a control for each PivotTable field on the PivotTable data axis + of the source PivotTable appears on the chart when dropZonesVisible is set to true. + + + + + Specifies whether a control for each PivotTable field on the PivotTable column axis + of the source PivotTable appears on the chart when dropZonesVisible is set to true. + + + + + Specifies whether any pivot controls can appear on the pivot chart. + + + + + Encapsulates the object that represents the plot area in a chart. + + + + + Gets or gets the x coordinate of the upper left corner of plot-area bounding box in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or gets the y coordinate of the upper top corner of plot-area bounding box in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or sets the height of plot-area bounding box in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or sets the width of plot-area bounding box in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or gets the x coordinate of the upper top corner of plot area in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or gets the x coordinate of the upper top corner of plot area in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or sets the height of plot area in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Gets or sets the width of plot area in units of 1/4000 of the chart area. + + +

The plot-area bounding box includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If the value is not created by MS Excel, please call Chart.Calculate() method before calling this method.

+

The X, Y, Width and Height of PlotArea represents the plot-area + bounding box that includes the plot area, tick marks(tick labels), and a small border around the tick marks. + If you want to get actual size of plot area, you should call InnerX, InnerY, InnerWidth and + InnerHeight properties.

+

For excel 2007 or latter, the default value is zero. you should call get the value after calling Chart.Calculate().

+
+
+ + + Set position of the plot area to automatic + + + + + Indicates whether the plot area is automatic sized. + + + + + Represents the type of data plot by row or column. + + + + + By row. + + + + + By column. + + + + + Represents all plot empty cells type of a chart. + + + + + Not plotted(leave gap) + + + + + Zero + + + + + Interpolated + + + + + Represents quartile calculation methods. + + + + + The quartile calculation includes the median when splitting the dataset into quartiles. + + + + + The quartile calculation excludes the median when splitting the dataset into quartiles. + + + + + Encapsulates the object that represents a single data series in a chart. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Excel object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a sample value to "A4" cell + worksheet.Cells["A4"].PutValue(200); + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + //Adding a sample value to "B4" cell + worksheet.Cells["B4"].PutValue(40); + //Adding a sample value to "C1" cell as category data + worksheet.Cells["C1"].PutValue("Q1"); + //Adding a sample value to "C2" cell as category data + worksheet.Cells["C2"].PutValue("Q2"); + //Adding a sample value to "C3" cell as category data + worksheet.Cells["C3"].PutValue("Y1"); + //Adding a sample value to "C4" cell as category data + worksheet.Cells["C4"].PutValue("Y2"); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", true); + //Setting the data source for the category data of NSeries + chart.NSeries.CategoryData = "C1:C4"; + Series series = chart.NSeries[1]; + //Setting the values of the series. + series.Values = "=B1:B4"; + //Changing the chart type of the series. + series.Type = ChartType.Line; + //Setting marker properties. + series.MarkerStyle = ChartMarkerType.Circle; + series.MarkerForegroundColorSetType = FormattingType.Automatic; + series.MarkerForegroundColor = System.Drawing.Color.Black; + series.MarkerBackgroundColorSetType = FormattingType.Automatic; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Excel object + Dim sheetIndex As Int32 = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a sample value to "A4" cell + worksheet.Cells("A4").PutValue(200) + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + 'Adding a sample value to "B4" cell + worksheet.Cells("B4").PutValue(40) + 'Adding a sample value to "C1" cell as category data + worksheet.Cells("C1").PutValue("Q1") + 'Adding a sample value to "C2" cell as category data + worksheet.Cells("C2").PutValue("Q2") + 'Adding a sample value to "C3" cell as category data + worksheet.Cells("C3").PutValue("Y1") + 'Adding a sample value to "C4" cell as category data + worksheet.Cells("C4").PutValue("Y2") + 'Adding a chart to the worksheet + Dim chartIndex As Int32 = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", True) + 'Setting the data source for the category data of NSeries + chart.NSeries.CategoryData = "C1:C4" + Dim series As Series = chart.NSeries(1) + 'Setting the values of the series. + series.Values = "=B1:B4" + 'Changing the chart type of the series. + series.Type = ChartType.Line + 'Setting marker properties. + series.MarkerStyle = ChartMarkerType.Circle + series.MarkerForegroundColorSetType = FormattingType.Automatic + series.MarkerForegroundColor = System.Drawing.Color.Black + series.MarkerBackgroundColorSetType = FormattingType.Automatic + 'Saving the Excel file + workbook.Save("C:\\book1.xls") + + + + + + Represents the properties of layout. + + + + + Moves the series up or down. + + The number of moving up or down. + Move the series up if this is less than zero; + Move the series down if this is greater than zero. + + + + + Gets the collection of points in a series in a chart. + + + When the chart is Pie of Pie or Bar of Pie, the last point is other point in first pie plot. + + + + + Represents the background area of Series object. + + + + + Represents border of Series object. + + + + + Gets or sets the name of the data series. + + + + [C#] + + //Reference name to a cell + chart.NSeries[0].Name = "=A1"; + + //Set a string to name + chart.NSeries[0].Name = "First Series"; + [Visual Basic] + + 'Reference name to a cell + chart.NSeries[0].Name = "=A1" + + 'Set a string to name + chart.NSeries[0].Name = "First Series" + + + + + + Gets the series's name that displays on the chart graph. + + + + + Gets the number of the data values. + + + + + Indicates whether the data source is vertical. + + + + + Represents the data of the chart series. + + + + + Represents format code of Values¡®s NumberList. + + + + + Represents the x values of the chart series. + + + + + Gets or sets the bubble sizes values of the chart series. + + + + + Returns an object that represents a collection of all the trendlines for the series. + + + + + Represents curve smoothing. + True if curve smoothing is turned on for the line chart or scatter chart. + Applies only to line and scatter connected by lines charts. + + + + + True if the series has a shadow. + + + + + True if the series has a three-dimensional appearance. + Applies only to bubble charts. + + + + + Gets or sets the 3D shape type used with the 3-D bar or column chart. + + + + + Gets or sets the 3D shape type used with the 3-D bar or column chart. + + NOTE: This member is now obsolete. Instead, + please use ASeries.Bar3DShapeType property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents the DataLabels object for the specified ASeries. + + + + + Gets or sets a data series' type. + + + + + Gets the marker. + + + + + Indicates if this series is plotted on second value axis. + + + + + Represents X direction error bar of the series. + + + + + Represents Y direction error bar of the series. + + + + + True if the line chart has high-low lines. + Applies only to line charts. + + + + + Returns a HiLoLines object that represents the high-low lines for a series on a line chart. + Applies only to line charts. + + + + + True if a stacked column chart or bar chart has series lines or + if a Pie of Pie chart or Bar of Pie chart has connector lines between the two sections. + Applies only to stacked column charts, bar charts, Pie of Pie charts, or Bar of Pie charts. + + + + + Returns a SeriesLines object that represents the series lines for a stacked bar chart or a stacked column chart. + Applies only to stacked bar and stacked column charts. + + + + + True if the chart has drop lines. + Applies only to line chart or area charts. + + + + + Returns a object that represents the drop lines for a series on the line chart or area chart. + Applies only to line chart or area charts. + + + + + True if a line chart has up and down bars. + Applies only to line charts. + + + + + Returns an DropBars object that represents the up bars on a line chart. + Applies only to line charts. + + + + + Returns a object that represents the down bars on a line chart. + Applies only to line charts. + + + + + Represents if the color of points is varied. + The chart must contain only one series. + + + + + Returns or sets the space between bar or column clusters, as a percentage of the bar or column width. + The value of this property must be between 0 and 500. + + + + + Gets or sets the angle of the first pie-chart or doughnut-chart slice, in degrees (clockwise from vertical). + Applies only to pie, 3-D pie, and doughnut charts, 0 to 360. + + + + + Specifies how bars and columns are positioned. + Can be a value between ¨C 100 and 100. + Applies only to 2-D bar and 2-D column charts. + + + + + Returns or sets the size of the secondary section of either a pie of pie chart or a bar of pie chart, + as a percentage of the size of the primary pie. + Can be a value from 5 to 200. + + + + + Returns or sets a value that how to determine which data points are in the second pie or bar on a pie of pie or bar of + pie chart. + + + + + Returns or sets a value that shall be used to determine which data points are in the second pie or bar on + a pie of pie or bar of pie chart. + + + + + Indicates whether the threshold value is automatic. + + + + + Gets or sets the scale factor for bubbles in the specified chart group. + It can be an integer value from 0 (zero) to 300, + corresponding to a percentage of the default size. + Applies only to bubble charts. + + + + + Gets or sets what the bubble size represents on a bubble chart. + + + BubbleSizeRepresents.SizeIsArea means the value is the area of the bubble. + BubbleSizeRepresents.SizeIsWidth means the value is the width of the bubble. + + + + + True if negative bubbles are shown for the chart group. Valid only for bubble charts. + + + + + Returns or sets the size of the hole in a doughnut chart group. + The hole size is expressed as a percentage of the chart size, between 10 and 90 percent. + + + + + The distance of an open pie slice from the center of the pie chart is expressed as a percentage of the pie diameter. + + + + + True if a radar chart has category axis labels. Applies only to radar charts. + + + + + True if the series has leader lines. + + + + + Represents leader lines on a chart. Leader lines connect data labels to data points. + This object isn¡¯t a collection; there¡¯s no object that represents a single leader line. + + + + + Gets the legend entry according to this series. + + + + + Gets the object that holds the visual shape properties of the Series. + + + + + Encapsulates a collection of objects. + + + + + [C#] + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Excel object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a sample value to "A4" cell + worksheet.Cells["A4"].PutValue(200); + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + //Adding a sample value to "B4" cell + worksheet.Cells["B4"].PutValue(40); + //Adding a sample value to "C1" cell as category data + worksheet.Cells["C1"].PutValue("Q1"); + //Adding a sample value to "C2" cell as category data + worksheet.Cells["C2"].PutValue("Q2"); + //Adding a sample value to "C3" cell as category data + worksheet.Cells["C3"].PutValue("Y1"); + //Adding a sample value to "C4" cell as category data + worksheet.Cells["C4"].PutValue("Y2"); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", true); + //Setting the data source for the category data of NSeries + chart.NSeries.CategoryData = "C1:C4"; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Excel object + Dim sheetIndex As Integer = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a sample value to "A4" cell + worksheet.Cells("A4").PutValue(200) + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + 'Adding a sample value to "B4" cell + worksheet.Cells("B4").PutValue(40) + 'Adding a sample value to "C1" cell as category data + worksheet.Cells("C1").PutValue("Q1") + 'Adding a sample value to "C2" cell as category data + worksheet.Cells("C2").PutValue("Q2") + 'Adding a sample value to "C3" cell as category data + worksheet.Cells("C3").PutValue("Y1") + 'Adding a sample value to "C4" cell as category data + worksheet.Cells("C4").PutValue("Y2") + 'Adding a chart to the worksheet + Dim chartIndex As Integer = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", True) + 'Setting the data source for the category data of NSeries + chart.NSeries.CategoryData = "C1:C4" + 'Saving the Excel file + workbook.Save("C:\book1.xls") + + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element by order. + + The order of series + The element series + + + + Remove at a series at the specific index. + + The index. + + + + Gets or sets the range of category Axis values. + It can be a range of cells (such as, "d1:e10"), + or a sequence of values (such as,"{2,6,8,10}"). + + + + + Gets or sets the range of second category Axis values. + It can be a range of cells (such as, "d1:e10"), + or a sequence of values (such as,"{2,6,8,10}"). + Only effects when some ASerieses plot on the second axis. + + + + + Directly changes the orders of the two series. + + The current index + The dest index + + + + Adds the collection to a chart. + + Specifies values from which to plot the data series + Specifies whether to plot the series from a range of cell values by row or by column. + Return the first index of the added ASeries in the NSeries. + +
If set data on contiguous cells, use colon to seperate them.For example, R[1]C[1]:R[3]C[2].
+
If set data on contiguous cells, use comma to seperate them.For example,(R[1]C[1],R[3]C[2]).
+
+
+ + + Adds the collection to a chart. + + Specifies values from which to plot the data series + Specifies whether to plot the series from a range of cell values by row or by column. + Return the first index of the added ASeries in the NSeries. + +
If set data on contiguous cells, use colon to seperate them.For example, $C$2:$C$5.
+
If set data on non contiguous cells, use comma to seperate them.For example: ($C$2,$D$5).
+
+
+ + + Represents if the color of points is varied. + + + + + Clears the collection + + + + + + + + + Indicates whether showing connector lines between data points. + + + + + Indicates whether showing the line connecting all mean points. + + + + + Indicates whether showing outlier data points. + + + + + Indicates whether showing markers denoting the mean. + + + + + Indicates whether showing non-outlier data points. + + + + + Represents the index of a subtotal data point. + + + + + Represents the statistical properties for the series. + + + + + Gets and sets the layout of map labels. + + + + + Gets and sets the region type of the map. + + + + + Gets and sets the projection type of the map. + + + + + Represents the position type of tick-mark labels on the specified axis. + + + + + Position type is high. + + + + + Position type is low. + + + + + Position type is next to axis. + + + + + Position type is none. + + + + + Represents the tick-mark labels associated with tick marks on a chart axis. + + + + + Returns a object that represents the font of the specified TickLabels object. + + + + + True if the text in the object changes font size when the object size changes. The default value is True. + + + + + Gets and sets the display mode of the background + + + + + Represents text rotation angle in clockwise. + + +
0: Not rotated.
+
255: Top to Bottom.
+
-90: Downward.
+
90: Upward.
+
+
+ + + Indicates whether the rotation angle is automatic + + + + + Represents the format string for the TickLabels object. + + The formatting string is same as a custom format string setting to a cell. For example, "$0". + + + + Represents the format number for the TickLabels object. + + + + + True if the number format is linked to the cells + (so that the number format changes in the labels when it changes in the cells). + + + + + Gets and sets the display number format of tick labels. + + + + + Represents the distance between the levels of labels, and the distance between the first level and the axis line. + + + The default distance is 100 percent, which represents the default spacing between the axis labels and the axis line. + The value can be an integer percentage from 0 through 1000, relative to the axis label¡¯s font size. + + + + + Represents text reading order. + + NOTE: This member is now obsolete. Instead, + please use TickLabels.ReadingOrder property. + This property will be removed 12 months later since March 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents text reading order. + + + + + Gets and sets the direction of text. + + + + + Represents the tick mark type for the specified axis. + + + + + Tick mark type is Cross. + + + + + Tick mark type is Inside. + + + + + Tick mark type is None. + + + + + Tick mark type is Outside + + + + + Represents the base unit for the category axis. + + + + + Days + + + + + Months + + + + + Years + + + + + Encapsulates the object that represents the title of chart or axis. + + + + + [C#] + + //Setting the title of a chart + chart.Title.Text = "Title"; + //Setting the font color of the chart title to blue + chart.Title.Font.Color = Color.Blue; + //Setting the title of category axis of the chart + chart.CategoryAxis.Title.Text = "Category"; + //Setting the title of value axis of the chart + chart.ValueAxis.Title.Text = "Value"; + + [Visual Basic] + + 'Setting the title of a chart + chart.Title.Text = "Title" + 'Setting the font color of the chart title to blue + chart.Title.Font.Color = Color.Blue + 'Setting the title of category axis of the chart + chart.CategoryAxis.Title.Text = "Category" + 'Setting the title of value axis of the chart + chart.ValueAxis.Title.Text = "Value" + + + + + + + Gets or sets the text of display unit label. + + + + + Represents whether the title is visible. + + + + + Gets or sets the x coordinate of the upper left corner in units of 1/4000 of the chart area. + + + + + Gets or sets the y coordinate of the upper left corner in units of 1/4000 of the chart area. + + + + + Represents overlay centered title on chart without resizing chart. + + + + + Gets rich text formatting of this Title. + + returns FontSetting array + + + + Represents a trendline in a chart. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Excel object + int sheetIndex = workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[sheetIndex]; + //Adding a sample value to "A1" cell + worksheet.Cells["A1"].PutValue(50); + //Adding a sample value to "A2" cell + worksheet.Cells["A2"].PutValue(100); + //Adding a sample value to "A3" cell + worksheet.Cells["A3"].PutValue(150); + //Adding a sample value to "A4" cell + worksheet.Cells["A4"].PutValue(200); + //Adding a sample value to "B1" cell + worksheet.Cells["B1"].PutValue(60); + //Adding a sample value to "B2" cell + worksheet.Cells["B2"].PutValue(32); + //Adding a sample value to "B3" cell + worksheet.Cells["B3"].PutValue(50); + //Adding a sample value to "B4" cell + worksheet.Cells["B4"].PutValue(40); + //Adding a sample value to "C1" cell as category data + worksheet.Cells["C1"].PutValue("Q1"); + //Adding a sample value to "C2" cell as category data + worksheet.Cells["C2"].PutValue("Q2"); + //Adding a sample value to "C3" cell as category data + worksheet.Cells["C3"].PutValue("Y1"); + //Adding a sample value to "C4" cell as category data + worksheet.Cells["C4"].PutValue("Y2"); + //Adding a chart to the worksheet + int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5); + //Accessing the instance of the newly added chart + Chart chart = worksheet.Charts[chartIndex]; + //Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", true); + //Setting the data source for the category data of NSeries + chart.NSeries.CategoryData = "C1:C4"; + //adding a linear trendline + int index = chart.NSeries[0].TrendLines.Add(TrendlineType.Linear); + Trendline trendline = chart.NSeries[0].TrendLines[index]; + //Setting the custom name of the trendline. + trendline.Name = "Linear"; + //Displaying the equation on chart + trendline.DisplayEquation = true; + //Displaying the R-Squared value on chart + trendline.DisplayRSquared = true; + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Excel object + Dim sheetIndex As Int32 = workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(sheetIndex) + 'Adding a sample value to "A1" cell + worksheet.Cells("A1").PutValue(50) + 'Adding a sample value to "A2" cell + worksheet.Cells("A2").PutValue(100) + 'Adding a sample value to "A3" cell + worksheet.Cells("A3").PutValue(150) + 'Adding a sample value to "A4" cell + worksheet.Cells("A4").PutValue(200) + 'Adding a sample value to "B1" cell + worksheet.Cells("B1").PutValue(60) + 'Adding a sample value to "B2" cell + worksheet.Cells("B2").PutValue(32) + 'Adding a sample value to "B3" cell + worksheet.Cells("B3").PutValue(50) + 'Adding a sample value to "B4" cell + worksheet.Cells("B4").PutValue(40) + 'Adding a sample value to "C1" cell as category data + worksheet.Cells("C1").PutValue("Q1") + 'Adding a sample value to "C2" cell as category data + worksheet.Cells("C2").PutValue("Q2") + 'Adding a sample value to "C3" cell as category data + worksheet.Cells("C3").PutValue("Y1") + 'Adding a sample value to "C4" cell as category data + worksheet.Cells("C4").PutValue("Y2") + 'Adding a chart to the worksheet + Dim chartIndex As Int32 = worksheet.Charts.Add(ChartType.Column, 5, 0, 15, 5) + 'Accessing the instance of the newly added chart + Dim chart As Chart = worksheet.Charts(chartIndex) + 'Adding NSeries (chart data source) to the chart ranging from "A1" cell to "B4" + chart.NSeries.Add("A1:B4", True) + 'Setting the data source for the category data of NSeries + Chart.NSeries.CategoryData = "C1:C4" + 'adding a linear trendline + Dim index As Int32 = chart.NSeries(0).TrendLines.Add(TrendlineType.Linear) + Dim trendline As Trendline = chart.NSeries(0).TrendLines(index) + 'Setting the custom name of the trendline. + trendline.Name = "Linear" + 'Displaying the equation on chart + trendline.DisplayEquation = True + 'Displaying the R-Squared value on chart + trendline.DisplayRSquared = True + 'Saving the Excel file + workbook.Save("C:\\book1.xls") + + + + + + Returns if Microsoft Excel automatically determines the name of the trendline. + + + + + Returns the trendline type. + + + + + Returns the name of the trendline. + + + + + Returns or sets the trendline order (an integer greater than 1) when the trendline type is Polynomial. + The order must be between 2 and 6. + + + + + Returns or sets the period for the moving-average trendline. + + This value should be between 2 and 255. + And it must be less than the number of the chart points in the series + + + + Returns or sets the number of periods (or units on a scatter chart) that the trendline extends forward. + The number of periods must be greater than and equal to zero. + + + + + Returns or sets the number of periods (or units on a scatter chart) that the trendline extends backward. + The number of periods must be greater than and equal to zero. + If the chart type is column ,the number of periods must be between 0 and 0.5 + + + + + Represents if the equation for the trendline is displayed on the chart (in the same data label as the R-squared value). Setting this property to True automatically turns on data labels. + + + + + Represents if the R-squared value of the trendline is displayed on the chart (in the same data label as the equation). Setting this property to True automatically turns on data labels. + + + + + Returns or sets the point where the trendline crosses the value axis. + + + + + Represents the DataLabels object for the specified ASeries. + + + + + Gets the legend entry according to this trendline + + + + + Represents a collection of all the objects for the specified data series. + + + + [C#] + int chartIndex = excel.Worksheets[0].Charts.Add(ChartType.Column, 3, 3, 15, 10); + Chart chart = excel.Worksheets[0].Charts[chartIndex]; + chart.NSeries.Add("A1:a3", true); + chart.NSeries[0].TrendLines.Add(TrendlineType.Linear, "MyTrendLine"); + Trendline line = chart.NSeries[0].TrendLines[0]; + line.DisplayEquation = true; + line.DisplayRSquared = true; + line.Color = Color.Red; + + [Visual Basic] + Dim chartIndex As Integer = excel.Worksheets(0).Charts.Add(ChartType.Column,3,3,15,10) + Dim chart As Chart = excel.Worksheets(0).Charts(chartIndex) + chart.NSeries.Add("A1:a3", True) + chart.NSeries(0).TrendLines.Add(TrendlineType.Linear, "MyTrendLine") + Dim line As Trendline = chart.NSeries(0).TrendLines(0) + line.DisplayEquation = True + line.DisplayRSquared = True + line.Color = Color.Red + + + + + + Adds a object to this collection with specified type. + + Trendline type. + + object index. + + + + Adds a object to this collection with specified type and name. + + Trendline type. + Trendline name. + + object index. + + + + Gets a object by its index. + + + + + Represents the trendline type. + + + + + Exponential + + + + + Linear + + + + + Logarithmic + + + + + MovingAverage + + + + + Polynomial + + + + + Power + + + + + Encapsulates the object that represents the walls of a 3-D chart. + + + + + Gets the x coordinate of the left-bottom corner of Wall center in units of 1/4000 of chart's width after calls Chart.Calculate() method. + + + + + Gets the y coordinate of the left-bottom corner of Wall center in units of 1/4000 of chart's height after calls Chart.Calculate() method. + + + + + Gets the width of left to right in units of 1/4000 of chart's width after calls Chart.Calculate() method. + + + + + Gets the depth front to back in units of 1/4000 of chart's width after calls Chart.Calculate() method. + + + + + Gets the height of top to bottom in units of 1/4000 of chart's height after calls Chart.Calculate() method. + + + + + Gets the x coordinate of the left-bottom corner of Wall center in units of pixels after calls Chart.Calculate() method. + + + + + Gets the y coordinate of the left-bottom corner of Wall center in units of pixels after calls Chart.Calculate() method. + + + + + Gets the width of left to right in units of pixels after calls Chart.Calculate() method. + + + + + Gets the depth front to back in units of pixels after calls Chart.Calculate() method. + + + + + Gets the height of top to bottom in units of pixels after calls Chart.Calculate() method. + + + + + Gets the number of cube points after calls Chart.Calculate() method. + + + + + Gets x-coordinate of the apex point of walls cube after calls Chart.Calculate() method. + The number of apex points of walls cube is eight + + + + + Gets y-coordinate of the apex point of walls cube after calls Chart.Calculate() method. + The number of apex points of walls cube is eight. + + + + + Contains all classes of chart and sparkline. + + + + + A sparkline represents a tiny chart or graphic in a worksheet cell that provides a visual representation of data. + + + + + Represents the data range of the sparkline. + + + + + Gets the row index of the sparkline. + + + + + Gets the column index of the sparkline. + + + + + Converts a sparkline to an image. + + The image file name. + The image options + + + + Converts a sparkline to an image. + + The image stream. + The image options. + + + + Represents the minimum and maximum value types for the sparkline vertical axis. + + + + + Automatic for each sparkline. + + + + + Same for all sparklines in the group. + + + + + Custom value for sparkline. + + + + + Encapsulates a collection of objects. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Add a sparkline. + + Specifies the new data range of the sparkline. + The row index of the location. + The column index of the location. + + + + Removes the sparkline + + + + + + + is organized into sparkline group. A SparklineGroup contains a variable number of sparkline items. + A sparkline group specifies the type, display settings and axis settings for the sparklines. + + + + + Resets the data range and location range of the sparkline group. + This method will clear original sparkline items in the group and creates new sparkline items for the new ranges. + + Specifies the new data range of the sparkline group. + Specifies whether to plot the sparklines from the new data range by row or by column. + Specifies where the sparklines to be placed. + + + + Gets and sets the preset style type of the sparkline group. + + + + + Gets the object of the sparkline group. + + + + + Indicates the sparkline type of the sparkline group. + + + + + Indicates how to plot empty cells. + + + + + Indicates whether to show data in hidden rows and columns. + + + + + Indicates whether to highlight the highest points of data in the sparkline group. + + + + + Gets and sets the color of the highest points of data in the sparkline group. + + + + + Indicates whether to highlight the lowest points of data in the sparkline group. + + + + + Gets and sets the color of the lowest points of data in the sparkline group. + + + + + Indicates whether to highlight the negative values on the sparkline group with a different color or marker. + + + + + Gets and sets the color of the negative values on the sparkline group. + + + + + Indicates whether to highlight the first point of data in the sparkline group. + + + + + Gets and sets the color of the first point of data in the sparkline group. + + + + + Indicates whether to highlight the last point of data in the sparkline group. + + + + + Gets and sets the color of the last point of data in the sparkline group. + + + + + Indicates whether to highlight each point in each line sparkline in the sparkline group. + + + + + Gets and sets the color of points in each line sparkline in the sparkline group. + + + + + Gets and sets the color of the sparklines in the sparkline group. + + + + + Indicates whether the plot data is right to left. + + + + + Gets and sets the line weight in each line sparkline in the sparkline group, in the unit of points. + + + + + Gets and sets the color of the horizontal axis in the sparkline group. + + + + + Indicates whether to show the sparkline horizontal axis. + The horizontal axis appears if the sparkline has data that crosses the zero axis. + + + + + Represents the range that contains the date values for the sparkline data. + + + + + Represents the vertical axis maximum value type. + + + + + Gets and sets the custom maximum value for the vertical axis. + + + + + Represents the vertical axis minimum value type. + + + + + Gets and sets the custom minimum value for the vertical axis. + + + + + Encapsulates a collection of objects. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Adds an item to the collection. + + Specifies the type of the Sparkline group. + Specifies the data range of the sparkline group. + Specifies whether to plot the sparklines from the data range by row or by column. + Specifies where the sparklines to be placed. + + object index. + + + + Clears the sparklines that is inside an area of cells. + + Specifies the area of cells + + + + Clears the sparkline groups that overlaps an area of cells. + + Specifies the area of cells + + + + Represents the preset style types for sparkline. + + + + + Style 1 + + + + + Style 2 + + + + + Style 3 + + + + + Style 4 + + + + + Style 5 + + + + + Style 6 + + + + + Style 7 + + + + + Style 8 + + + + + Style 9 + + + + + Style 10 + + + + + Style 11 + + + + + Style 12 + + + + + Style 13 + + + + + Style 14 + + + + + Style 15 + + + + + Style 16 + + + + + Style 17 + + + + + Style 18 + + + + + Style 19 + + + + + Style 20 + + + + + Style 21 + + + + + Style 22 + + + + + Style 23 + + + + + Style 24 + + + + + Style 25 + + + + + Style 26 + + + + + Style 27 + + + + + Style 28 + + + + + Style 29 + + + + + Style 30 + + + + + Style 31 + + + + + Style 32 + + + + + Style 33 + + + + + Style 34 + + + + + Style 35 + + + + + Style 36 + + + + + No preset style. + + + + + Represents the sparkline types. + + + + + Line sparkline. + + + + + Column sparkline. + + + + + Win/Loss sparkline. + + + + + Represents a single column in a worksheet. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + Style style = workbook.CreateStyle(); + + //Setting the background color to Blue + style.BackgroundColor = Color.Blue; + + //Setting the foreground color to Red + style.ForegroundColor= Color.Red; + + //setting Background Pattern + style.Pattern = BackgroundType.DiagonalStripe; + + //New Style Flag + StyleFlag styleFlag = new StyleFlag(); + + //Set All Styles + styleFlag.All = true; + + //Get first Column + Column column = worksheet.Cells.Columns[0]; + + //Apply Style to first Column + column.ApplyStyle(style, styleFlag); + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + Dim style As Style = workbook.CreateStyle() + + 'Setting the background color to Blue + style.BackgroundColor = Color.Blue + + 'Setting the foreground color to Red + style.ForegroundColor = Color.Red + + 'setting Background Pattern + style.Pattern = BackgroundType.DiagonalStripe + + 'New Style Flag + Dim styleFlag As New StyleFlag() + + 'Set All Styles + styleFlag.All = True + + 'Get first Column + Dim column As Column = worksheet.Cells.Columns(0) + + 'Apply Style to first Column + column.ApplyStyle(style, styleFlag) + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + Gets the index of this column. + + + + + Gets and sets the column width in unit of characters. + + + + + Gets the group level of the column. + + + + + Indicates whether the column is hidden. + + + + + Applies formats for a whole column. + + The style object which will be applied. + Flags which indicates applied formatting properties. + + + + Gets the style of this column. + + + You have to call Column.ApplyStyle() method to save your changing with the row style, + otherwise it will not effect. + + + + + Collects the objects that represent the individual columns in a worksheet. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the first worksheet + Worksheet worksheet = workbook.Worksheets[0]; + + //Add new Style to Workbook + Style style = workbook.CreateStyle(); + + //Setting the background color to Blue + style.ForegroundColor = Color.Blue; + + //setting Background Pattern + style.Pattern = BackgroundType.Solid; + + //New Style Flag + StyleFlag styleFlag = new StyleFlag(); + + //Set All Styles + styleFlag.All = true; + + //Change the default width of first ten columns + for (int i = 0; i < 10; i++) + { + worksheet.Cells.Columns[i].Width = 20; + } + + //Get the Column with non default formatting + ColumnCollection columns = worksheet.Cells.Columns; + + foreach (Column column in columns) + { + //Apply Style to first ten Columns + column.ApplyStyle(style, styleFlag); + } + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the first worksheet + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Add new Style to Workbook + Dim style As Style = workbook.CreateStyles() + + 'Setting the background color to Blue + style.ForegroundColor = Color.Blue + + 'setting Background Pattern + style.Pattern = BackgroundType.Solid + + 'New Style Flag + Dim styleFlag As New StyleFlag() + + 'Set All Styles + styleFlag.All = True + + 'Change the default width of first ten columns + For i As Integer = 0 To 9 + worksheet.Cells.Columns(i).Width = 20 + Next i + + 'Get the Column with non default formatting + Dim columns As ColumnCollection = worksheet.Cells.Columns + + For Each column As Column In columns + 'Apply Style to first ten Columns + column.ApplyStyle(style, styleFlag) + Next column + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + + Gets the column object by the index. + + + + Returns the column object. + NOTE: This member is now obsolete. Instead, + please use Columns.GetColumnByIndex() method. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets the object by the position in the list. + + The position in the list. + Returns the column object. + + + + Gets a object by column index. The Column object of given column index will be instantiated if it does not exist before. + + + + + Represents the custom icon of conditional formatting rule. + + + + + Get the icon set data + + icon's type + icon's index + + + + + + Gets the icon set data. + + + + + Gets and sets the icon set type. + + + + + Gets and sets the icon's index in the icon set. + + + + + Represents a collection of objects. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + Worksheet sheet = workbook.Worksheets[0]; + + //Get Conditional Formatting + ConditionalFormattingCollection cformattings = sheet.ConditionalFormattings; + + //Adds an empty conditional formatting + int index = cformattings.Add(); + + //Get newly added Conditional formatting + FormatConditionCollection fcs = cformattings[index]; + + //Sets the conditional format range. + CellArea ca = new CellArea(); + + ca.StartRow = 0; + + ca.EndRow = 0; + + ca.StartColumn = 0; + + ca.EndColumn = 0; + + fcs.AddArea(ca); + + ca = new CellArea(); + + ca.StartRow = 1; + + ca.EndRow = 1; + + ca.StartColumn = 1; + + ca.EndColumn = 1; + + fcs.AddArea(ca); + + //Sets condition + int idx = fcs.AddCondition(FormatConditionType.IconSet); + + FormatCondition cond = fcs[idx]; + + //Sets condition's type + cond.IconSet.Type = IconSetType.ArrowsGray3; + + //Add custom iconset condition. + ConditionalFormattingIcon cfIcon = cond.IconSet.CfIcons[0]; + + cfIcon.Type = IconSetType.Arrows3; + + cfIcon.Index = 0; + + ConditionalFormattingIcon cfIcon1 = cond.IconSet.CfIcons[1]; + + cfIcon1.Type = IconSetType.ArrowsGray3; + + cfIcon1.Index = 1; + + ConditionalFormattingIcon cfIcon2 = cond.IconSet.CfIcons[2]; + + cfIcon2.Type = IconSetType.Boxes5; + + cfIcon2.Index = 2; + + //Saving the Excel file + workbook.Save("C:\\output.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Get Conditional Formatting + Dim cformattings As ConditionalFormattingCollection = sheet.ConditionalFormattings + + 'Adds an empty conditional formatting + Dim index As Integer = cformattings.Add() + + 'Get newly added Conditional formatting + Dim fcs As FormatConditionCollection = cformattings(index) + + 'Sets the conditional format range. + Dim ca As New CellArea() + + ca.StartRow = 0 + + ca.EndRow = 0 + + ca.StartColumn = 0 + + ca.EndColumn = 0 + + fcs.AddArea(ca) + + ca = New CellArea() + + ca.StartRow = 1 + + ca.EndRow = 1 + + ca.StartColumn = 1 + + ca.EndColumn = 1 + + fcs.AddArea(ca) + + //Sets condition + Dim idx As Integer =fcs.AddCondition(FormatConditionType.IconSet) + + Dim cond As FormatCondition=fcs[idx] + + //Sets condition's type + cfIcon.Type = IconSetType.ArrowsGray3 + + 'Add custom iconset condition. + Dim cfIcon As ConditionalFormattingIcon = cond.IconSet.CfIcons[0] + + cfIcon.Type = IconSetType.Arrows3 + + cfIcon.Index=0 + + Dim cfIcon1 As ConditionalFormattingIcon = cond.IconSet.CfIcons[1] + + cfIcon1.Type = IconSetType.ArrowsGray3 + + cfIcon1.Index=1 + + Dim cfIcon2 As ConditionalFormattingIcon = cond.IconSet.CfIcons[2] + + cfIcon2.Type = IconSetType.Boxes5 + + cfIcon2.Index=2 + + 'Saving the Excel file + workbook.Save("C:\output.xls") + + + + + + Gets the ConditionalFormattingIcon element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Adds object. + + The value type. + The Index. + Returns the index of new object in the list. + + + + Adds object. + + Returns the index of new object in the list. + + + + Specifies the axis position for a range of cells with conditional formatting as data bars. + + + + + Display the axis at a variable position based on the ratio of the minimum negative value to the maximum positive value in the range. + Positive values are displayed in a left-to-right direction. + Negative values are displayed in a right-to-left direction. + When all values are positive or all values are negative, no axis is displayed. + + + + + Display the axis at the midpoint of the cell regardless of the set of values in the range. + Positive values are displayed in a left-to-right direction. + Negative values are displayed in a right-to-left direction. + + + + + No axis is displayed, and both positive and negative values are displayed in the left-to-right direction. + + + + + Represents the border of the data bars specified by a conditional formatting rule. + + + + + Gets or sets the border's color of data bars specified by a conditional formatting rule. + + + + + Gets or sets the border's type of data bars specified by a conditional formatting rule. + + + + + Specifies the border type of a data bar. + + + + + The data bar has no border. + + + + + The data bar has a solid border. + + + + + Specifies how a data bar is filled with color. + + + + + The data bar is filled with solid color. + + + + + The data bar is filled with a color gradient. + + + + + Specifies whether to use the same border and fill color as positive data bars. + + + + + Use the color specified in the Negative Value and Axis Setting dialog box + or by using the ColorType and BorderColorType properties of the NegativeBarFormat object. + + + + + Use the same color as positive data bars. + + + + + Represents the color settings of the data bars for negative values that are defined by a data bar conditional formatting rule. + + + + + Gets or sets a FormatColor object that you can use to specify the border color for negative data bars. + + + + + Gets whether to use the same border color as positive data bars. + + + + + Gets or sets a FormatColor object that you can use to specify the fill color for negative data bars. + + + + + Gets or sets whether to use the same fill color as positive data bars. + + + + + Describe the AboveAverage conditional formatting rule. + This conditional formatting rule highlights cells that + are above or below the average for all values in the range. + + + + + Get or set the flag indicating whether the rule is an "above average" rule. + 'true' indicates 'above average'. + Default value is true. + + + + + Get or set the flag indicating whether the 'aboveAverage' and 'belowAverage' criteria + is inclusive of the average itself, or exclusive of that value. + 'true' indicates to include the average value in the criteria. + Default value is false. + + + + + Get or set the number of standard deviations to include above or below the average in the + conditional formatting rule. + The input value must between 0 and 3 (include 0 and 3). + Setting this value to 0 means stdDev is not set. + The default value is 0. + + + + + Describe the ColorScale conditional formatting rule. + This conditional formatting rule creates a gradated color scale on the cells. + + + + + Indicates whether conditional formatting is 3 color scale. + + + + + Get or set this ColorScale's min value object. + Cannot set null or CFValueObject with type FormatConditionValueType.Max to it. + + + + + Get or set this ColorScale's mid value object. + Cannot set CFValueObject with type FormatConditionValueType.Max or FormatConditionValueType.Min to it. + + + + + Get or set this ColorScale's max value object. + Cannot set null or CFValueObject with type FormatConditionValueType.Min to it. + + + + + Get or set the min value object's corresponding color. + + + + + Get or set the mid value object's corresponding color. + + + + + Get or set the max value object's corresponding color. + + + + + Encapsulates a collection of objects. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + Worksheet sheet = workbook.Worksheets[0]; + + //Get Conditional Formatting + ConditionalFormattingCollection cformattings = sheet.ConditionalFormattings; + + //Adds an empty conditional formatting + int index = cformattings.Add(); + + //Get newly added Conditional formatting + FormatConditionCollection fcs = cformattings[index]; + + //Sets the conditional format range. + CellArea ca = new CellArea(); + + ca.StartRow = 0; + + ca.EndRow = 0; + + ca.StartColumn = 0; + + ca.EndColumn = 0; + + fcs.AddArea(ca); + + ca = new CellArea(); + + ca.StartRow = 1; + + ca.EndRow = 1; + + ca.StartColumn = 1; + + ca.EndColumn = 1; + + fcs.AddArea(ca); + + //Add condition. + int conditionIndex = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "=A2", "100"); + + //Add condition. + int conditionIndex2 = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "50", "100"); + + //Sets the background color. + FormatCondition fc = fcs[conditionIndex]; + + fc.Style.BackgroundColor = Color.Red; + + //Saving the Excel file + workbook.Save("C:\\output.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Get Conditional Formatting + Dim cformattings As ConditionalFormattingCollection = sheet.ConditionalFormattings + + 'Adds an empty conditional formatting + Dim index As Integer = cformattings.Add() + + 'Get newly added Conditional formatting + Dim fcs As FormatConditionCollection = cformattings(index) + + 'Sets the conditional format range. + Dim ca As New CellArea() + + ca.StartRow = 0 + + ca.EndRow = 0 + + ca.StartColumn = 0 + + ca.EndColumn = 0 + + fcs.AddArea(ca) + + ca = New CellArea() + + ca.StartRow = 1 + + ca.EndRow = 1 + + ca.StartColumn = 1 + + ca.EndColumn = 1 + + fcs.AddArea(ca) + + 'Add condition. + Dim conditionIndex As Integer = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "=A2", "100") + + 'Add condition. + Dim conditionIndex2 As Integer = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "50", "100") + + 'Sets the background color. + Dim fc As FormatCondition = fcs(conditionIndex) + + fc.Style.BackgroundColor = Color.Red + + 'Saving the Excel file + workbook.Save("C:\output.xls") + + + + + + Remove all conditional formatting in the range. + + The start row of the range. + The start column of the range. + The number of rows of the range. + The number of columns of the range. + + + + Copies conditional formatting. + + The conditional formatting + + + + Gets the FormatConditions element at the specified index. + + The zero based index of the element. + + + + Adds a FormatConditions to the collection. + + FormatConditions object index. + + + + Represents the result of conditional formatting which applies to a cell. + + + + + Gets the conditional result style. + + + + + Gets the image of icon set. + + + + + Gets the DataBar object. + + + + + Gets the ColorScale object. + + + + + Gets the display color of color scale. + + + + + Describes the values of the interpolation points in a gradient scale, dataBar or iconSet. + + + + + Get or set the value of this conditional formatting value object. + It should be used in conjunction with Type. + + + If the value is string and start with "=", it will be processed as a formula, + otherwise we will process it as a simple value. + + + + + Get or set the type of this conditional formatting value object. + Setting the type to FormatConditionValueType.Min or FormatConditionValueType.Max + will auto set "Value" to null. + + + + + Get or set the Greater Than Or Equal flag. + Use only for icon sets, determines whether this threshold value uses + the greater than or equal to operator. + 'false' indicates 'greater than' is used instead of 'greater than or equal to'. + Default value is true. + + + + + Describes a collection of CFValueObject. + Use only for icon sets. + + + + + Get the CFValueObject element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Adds object. + + The value type. + The value. + Returns the index of new object in the list. + + + + Describe the DataBar conditional formatting rule. + This conditional formatting rule displays a gradated + data bar in the range of cells. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + Worksheet sheet = workbook.Worksheets[0]; + + //Adds an empty conditional formatting + int index = sheet.ConditionalFormattings.Add(); + + FormatConditions fcs = sheet.ConditionalFormattings[index]; + + //Sets the conditional format range. + CellArea ca = new CellArea(); + + ca.StartRow = 0; + + ca.EndRow = 2; + + ca.StartColumn = 0; + + ca.EndColumn = 0; + + fcs.AddArea(ca); + + //Adds condition. + int idx = fcs.AddCondtion(FormatConditionType.DataBar); + + fcs.AddArea(ca); + + FormatCondition cond = fcs[idx]; + + //Get Databar + DataBar dataBar = cond.DataBar; + + dataBar.Color = Color.Orange; + + //Set Databar properties + dataBar.MinCfvo.Type = FormatConditionValueType.Percentile; + + dataBar.MinCfvo.Value = 30; + + dataBar.ShowValue = false; + + dataBar.BarBorder.Type = DataBarBorderType.DataBarBorderSolid; + + dataBar.BarBorder.Color = Color.Plum; + + dataBar.BarFillType = DataBarFillType.DataBarFillSolid; + + dataBar.AxisColor = Color.Red; + + dataBar.AxisPosition = DataBarAxisPosition.DataBarAxisMidpoint; + + dataBar.NegativeBarFormat.ColorType = DataBarNegativeColorType.DataBarColor; + + dataBar.NegativeBarFormat.Color = Color.White; + + dataBar.NegativeBarFormat.BorderColorType = DataBarNegativeColorType.DataBarColor; + + dataBar.NegativeBarFormat.BorderColor = Color.Yellow; + + //Put Cell Values + Aspose.Cells.Cell cell1 = sheet.Cells["A1"]; + + cell1.PutValue(10); + + Aspose.Cells.Cell cell2 = sheet.Cells["A2"]; + + cell2.PutValue(120); + + Aspose.Cells.Cell cell3 = sheet.Cells["A3"]; + + cell3.PutValue(260); + + //Saving the Excel file + workbook.Save("D:\\book1.xlsx"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Adds an empty conditional formatting + Dim index As Integer = sheet.ConditionalFormattings.Add() + + Dim fcs As FormatConditions = sheet.ConditionalFormattings(index) + + 'Sets the conditional format range. + Dim ca As New CellArea() + + ca.StartRow = 0 + + ca.EndRow = 2 + + ca.StartColumn = 0 + + ca.EndColumn = 0 + + fcs.AddArea(ca) + + 'Adds condition. + Dim idx As Integer = fcs.AddCondtion(FormatConditionType.DataBar) + + fcs.AddArea(ca) + + Dim cond As FormatCondition = fcs(idx) + + 'Get Databar + Dim dataBar As DataBar = cond.DataBar + + dataBar.Color = Color.Orange + + 'Set Databar properties + dataBar.MinCfvo.Type = FormatConditionValueType.Percentile + + dataBar.MinCfvo.Value = 30 + + dataBar.ShowValue = False + + dataBar.BarBorder.Type = DataBarBorderType.DataBarBorderSolid + + dataBar.BarBorder.Color = Color.Plum + + dataBar.BarFillType = DataBarFillType.DataBarFillSolid + + dataBar.AxisColor = Color.Red + + dataBar.AxisPosition = DataBarAxisPosition.DataBarAxisMidpoint + + dataBar.NegativeBarFormat.ColorType = DataBarNegativeColorType.DataBarColor + + dataBar.NegativeBarFormat.Color = Color.White + + dataBar.NegativeBarFormat.BorderColorType = DataBarNegativeColorType.DataBarColor + + dataBar.NegativeBarFormat.BorderColor = Color.Yellow + + 'Put Cell Values + Dim cell1 As Aspose.Cells.Cell = sheet.Cells("A1") + + cell1.PutValue(10) + + Dim cell2 As Aspose.Cells.Cell = sheet.Cells("A2") + + cell2.PutValue(120) + + Dim cell3 As Aspose.Cells.Cell = sheet.Cells("A3") + + cell3.PutValue(260) + + 'Saving the Excel file + workbook.Save("D:\book1.xlsx") + + + + + + + Gets the color of the axis for cells with conditional formatting as data bars. + + + + + Gets or sets the position of the axis of the data bars specified by a conditional formatting rule. + + + + + Gets or sets how a data bar is filled with color. + + + + + Gets or sets the direction the databar is displayed. + + + + + Gets an object that specifies the border of a data bar. + + + + + Gets the NegativeBarFormat object associated with a data bar conditional formatting rule. + + + + + Get or set this DataBar's min value object. + Cannot set null or CFValueObject with type FormatConditionValueType.Max to it. + + + + + Get or set this DataBar's max value object. + Cannot set null or CFValueObject with type FormatConditionValueType.Min to it. + + + + + Get or set this DataBar's Color. + + + + + Represents the min length of data bar . + + + + + Represents the max length of data bar . + + + + + Get or set the flag indicating whether to show the values of the cells on which this data bar is applied. + Default value is true. + + + + + Render data bar in cell to image byte array. + + Indicate the data bar in which cell to be rendered + ImageOrPrintOptions contains some property of output image + + + + + + Represents conditional formatting condition. + + + + + [C#] + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + Worksheet sheet = workbook.Worksheets[0]; + + //Adds an empty conditional formatting + int index = sheet.ConditionalFormattings.Add(); + FormatConditionCollection fcs = sheet.ConditionalFormattings[index]; + + //Sets the conditional format range. + CellArea ca = new CellArea(); + ca.StartRow = 0; + ca.EndRow = 0; + ca.StartColumn = 0; + ca.EndColumn = 0; + fcs.AddArea(ca); + + ca = new CellArea(); + ca.StartRow = 1; + ca.EndRow = 1; + ca.StartColumn = 1; + ca.EndColumn = 1; + fcs.AddArea(ca); + + //Adds condition. + int conditionIndex = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "=A2", "100"); + + //Adds condition. + int conditionIndex2 = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "50", "100"); + + //Sets the background color. + FormatCondition fc = fcs[conditionIndex]; + fc.Style.BackgroundColor = Color.Red; + + //Saving the Excel file + workbook.Save("C:\\output.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + Dim sheet As Worksheet = workbook.Worksheets(0) + + ' Adds an empty conditional formatting + Dim index As Integer = sheet.ConditionalFormattings.Add() + Dim fcs As FormatConditionCollection = sheet.ConditionalFormattings(index) + + 'Sets the conditional format range. + Dim ca As CellArea = New CellArea() + ca.StartRow = 0 + ca.EndRow = 0 + ca.StartColumn = 0 + ca.EndColumn = 0 + fcs.AddArea(ca) + ca = New CellArea() + ca.StartRow = 1 + ca.EndRow = 1 + ca.StartColumn = 1 + ca.EndColumn = 1 + fcs.AddArea(ca) + + 'Adds condition. + Dim conditionIndex As Integer = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "=A2", "100") + + 'Adds condition. + Dim conditionIndex2 As Integer = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "50", "100") + + 'Sets the background color. + Dim fc As FormatCondition = fcs(conditionIndex) + fc.Style.BackgroundColor = Color.Red + + 'Saving the Excel file + workbook.Save("C:\output.xls") + + + + + + Gets the value or expression associated with this format condition. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The value or expression associated with this format condition. + + + + Gets the value or expression associated with this format condition. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The value or expression associated with this format condition. + + + + Gets the value or expression of the conditional formatting of the cell. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The row index. + The column index. + The value or expression associated with the conditional formatting of the cell. + The given cell must be contained by this conditional formatting, otherwise null will be returned. + + + + Gets the value or expression of the conditional formatting of the cell. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The row index. + The column index. + The value or expression associated with the conditional formatting of the cell. + The given cell must be contained by this conditional formatting, otherwise null will be returned. + + + + Sets the value or expression associated with this format condition. + + The value or expression associated with this format condition. + If the input value starts with '=', then it will be taken as formula. Otherwise it will be taken as plain value(text, number, bool). + For text value that starts with '=', user may input it as formula in format: "=\"=...\"". + The value or expression associated with this format condition. The input format is same with formula1 + Whether the formula is R1C1 formula. + Whether the formula is locale formatted. + + + + Sets the value or expression associated with this format condition. + + The value or expression associated with this format condition. + If the input value starts with '=', then it will be taken as formula. Otherwise it will be taken as plain value(text, number, bool). + For text value that starts with '=', user may input it as formula in format: "=\"=...\"". + Whether the formula is R1C1 formula. + Whether the formula is locale formatted. + + + + Sets the value or expression associated with this format condition. + + The value or expression associated with this format condition. + If the input value starts with '=', then it will be taken as formula. Otherwise it will be taken as plain value(text, number, bool). + For text value that starts with '=', user may input it as formula in format: "=\"=...\"". + Whether the formula is R1C1 formula. + Whether the formula is locale formatted. + + + + Gets and sets the value or expression associated with conditional formatting. + + + Please add all areas before setting formula. + For setting formula for this condition, if the input value starts with '=', then it will be taken as formula. + Otherwise it will be taken as plain value(text, number, bool). For text value that starts with '=', user may input it as formula in format: "=\"=...\"". + + + + + Gets the formula of the conditional formatting of the cell. + + The row index. + The column index. + The formula. + + + + Gets and sets the value or expression associated with conditional formatting. + + + Please add all areas before setting formula. + For setting formula for this condition, if the input value starts with '=', then it will be taken as formula. + Otherwise it will be taken as plain value(text, number, bool). For text value that starts with '=', user may input it as formula in format: "=\"=...\"". + + + + + Gets the formula of the conditional formatting of the cell. + + The row index. + The column index. + The formula. + + + + Gets and sets the conditional format operator type. + + + + + + True, no rules with lower priority may be applied over this rule, when this rule evaluates to true. + Only applies for Excel 2007; + + + + + The priority of this conditional formatting rule. This value is used to determine which + format should be evaluated and rendered. Lower numeric values are higher priority than + higher numeric values, where '1' is the highest priority. + + + + + Gets or setts style of conditional formatted cell ranges. + + + + + Gets and sets whether the conditional format Type. + + + + + + Get the conditional formatting's "IconSet" instance. + The default instance's IconSetType is TrafficLights31. + Valid only for type = IconSet. + + + + + + + Get the conditional formatting's "DataBar" instance. + The default instance's color is blue. + Valid only for type is DataBar. + + + + + + + Get the conditional formatting's "ColorScale" instance. + The default instance is a "green-yellow-red" 3ColorScale . + Valid only for type = ColorScale. + + + + + + + Get the conditional formatting's "Top10" instance. + The default instance's rule highlights cells whose + values fall in the top 10 bracket. + Valid only for type is Top10. + + + + + + + Get the conditional formatting's "AboveAverage" instance. + The default instance's rule highlights cells that are + above the average for all values in the range. + Valid only for type = AboveAverage. + + + + + + + The text value in a "text contains" conditional formatting rule. + Valid only for type = containsText, notContainsText, beginsWith and endsWith. + The default value is null. + + + + + The applicable time period in a "date occurring¡­" conditional formatting rule. + Valid only for type = timePeriod. + The default value is TimePeriodType.Today. + + + + + Represents conditional formatting. + The FormatConditions can contain up to three conditional formats. + + + + + [C#] + + //Adds an empty conditional formatting + int index = sheet.ConditionalFormattings.Add(); + FormatConditionCollection fcs = sheet.ConditionalFormattings[index]; + //Sets the conditional format range. + CllArea ca = new CellArea(); + ca.StartRow = 0; + ca.EndRow = 0; + ca.StartColumn = 0; + ca.EndColumn = 0; + fcs.AddArea(ca); + ca = new CellArea(); + ca.StartRow = 1; + ca.EndRow = 1; + ca.StartColumn = 1; + ca.EndColumn = 1; + fcs.AddArea(ca); + //Adds condition. + int conditionIndex = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "=A2", "100"); + //Adds condition. + int conditionIndex2 = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "50", "100"); + //Sets the background color. + FormatCondition fc = fcs[conditionIndex]; + fc.Style.BackgroundColor = Color.Red; + //Saving the Excel file + workbook.Save("C:\\output.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + Dim sheet As Worksheet = workbook.Worksheets(0) + ' Adds an empty conditional formatting + Dim index As Integer = sheet.ConditionalFormattings.Add() + Dim fcs As FormatConditionCollection = sheet.ConditionalFormattings(index) + 'Sets the conditional format range. + Dim ca As CellArea = New CellArea() + ca.StartRow = 0 + ca.EndRow = 0 + ca.StartColumn = 0 + ca.EndColumn = 0 + fcs.AddArea(ca) + ca = New CellArea() + ca.StartRow = 1 + ca.EndRow = 1 + ca.StartColumn = 1 + ca.EndColumn = 1 + fcs.AddArea(ca) + 'Adds condition. + Dim conditionIndex As Integer = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "=A2", "100") + 'Adds condition. + Dim conditionIndex2 As Integer = fcs.AddCondition(FormatConditionType.CellValue, OperatorType.Between, "50", "100") + 'Sets the background color. + Dim fc As FormatCondition = fcs(conditionIndex) + fc.Style.BackgroundColor = Color.Red + 'Saving the Excel file + workbook.Save("C:\output.xls") + + + + + + Adds a formatting condition and effected cell rang to the FormatConditions + The FormatConditions can contain up to three conditional formats. + References to the other sheets are not allowed in the formulas of conditional formatting. + + Conditional formatted cell range. + Type of conditional formatting.It could be one of the members of FormatConditionType. + Comparison operator.It could be one of the members of OperatorType. + The value or expression associated with conditional formatting. + The value or expression associated with conditional formatting + [0]:Formatting condition object index;[1] Effected cell rang index. + + + + + + Adds a conditional formatted cell range. + + Conditional formatted cell range. + Conditional formatted cell rang index. + + + + Adds a formatting condition. + + + of conditional formatting. + It could be one of the members of FormatConditionType. + The comparison . + It could be one of the members of OperatorType. + The value or expression associated with conditional formatting. + If the input value starts with '=', then it will be taken as formula. + Otherwise it will be taken as plain value(text, number, bool). + For text value that starts with '=', user may input it as formula in format: "=\"=...\"". + The value or expression associated with conditional formatting. + The input format is same with formula1 + Formatting condition object index; + + + + Add a format condition. + + Format condition type. + Formatting condition object index; + + + + Gets the count of the conditions. + + + + + Gets count of conditionally formatted ranges. + + + + + Gets the formatting condition by index. + + the index of the formatting condition to return. + the formatting condition + + + + Gets the conditional formatted cell range by index. + + the index of the conditional formatted cell range. + the conditional formatted cell range + + + + Removes conditional formatted cell range by index. + + The index of the conditional formatted cell range to be removed. + + + + Remove conditional formatting int the range. + + The startRow of the range. + The startColumn of the range. + The number of rows of the range. + The number of columns of the range. + + Returns TRUE, this FormatCondtionCollection should be removed. + + + + + Removes the formatting condition by index. + + The index of the formatting condition to be removed. + + + + Conditional format rule type. + + + + + This conditional formatting rule compares a cell value + to a formula calculated result, using an operator. + + + + + This conditional formatting rule contains a formula to + evaluate. When the formula result is true, the cell is + highlighted. + + + + + This conditional formatting rule creates a gradated + color scale on the cells. + + + + + This conditional formatting rule displays a gradated + data bar in the range of cells. + + + + + This conditional formatting rule applies icons to cells + according to their values. + + + + + This conditional formatting rule highlights cells whose + values fall in the top N or bottom N bracket, as + specified. + + + + + This conditional formatting rule highlights unique + values in the range. + + + + + This conditional formatting rule highlights duplicated + values. + + + + + This conditional formatting rule highlights cells + containing given text. Equivalent to using the SEARCH() + sheet function to determine whether the cell contains + the text. + + + + + This conditional formatting rule highlights cells that + are not blank. Equivalent of using LEN(TRIM()). This + means that if the cell contains only characters that + TRIM() would remove, then it is considered blank. An + empty cell is also considered blank. + + + + + This conditional formatting rule highlights cells in the + range that begin with the given text. Equivalent to + using the LEFT() sheet function and comparing values. + + + + + This conditional formatting rule highlights cells ending + with given text. Equivalent to using the RIGHT() sheet + function and comparing values. + + + + + This conditional formatting rule highlights cells that + are completely blank. Equivalent of using LEN(TRIM()). + This means that if the cell contains only characters + that TRIM() would remove, then it is considered blank. + An empty cell is also considered blank. + + + + + This conditional formatting rule highlights cells that + are not blank. Equivalent of using LEN(TRIM()). This + means that if the cell contains only characters that + TRIM() would remove, then it is considered blank. An + empty cell is also considered blank. + + + + + This conditional formatting rule highlights cells with + formula errors. Equivalent to using ISERROR() sheet + function to determine if there is a formula error. + + + + + This conditional formatting rule highlights cells + without formula errors. Equivalent to using ISERROR() + sheet function to determine if there is a formula error. + + + + + This conditional formatting rule highlights cells + containing dates in the specified time period. The + underlying value of the cell is evaluated, therefore the + cell does not need to be formatted as a date to be + evaluated. For example, with a cell containing the + value 38913 the conditional format shall be applied if + the rule requires a value of 7/14/2006. + + + + + This conditional formatting rule highlights cells that + are above or below the average for all values in the + range. + + + + + Condition value type. + + + + + The minimum/ midpoint / maximum value for the + gradient is determined by a formula. + + + + + Indicates that the maximum value in the range shall be + used as the maximum value for the gradient. + + + + + Indicates that the minimum value in the range shall be + used as the minimum value for the gradient. + + + + + Indicates that the minimum / midpoint / maximum + value for the gradient is specified by a constant + numeric value. + + + + + Value indicates a percentage between the minimum + and maximum values in the range shall be used as the + minimum / midpoint / maximum value for the gradient. + + + + + Value indicates a percentile ranking in the range shall + be used as the minimum / midpoint / maximum value + for the gradient. + + + + + Indicates that the Automatic maximum value in the range shall be + used as the Automatic maximum value for the gradient. + + + + + Indicates that the Automatic minimum value in the range shall be + used as the Automatic minimum value for the gradient. + + + + + Describe the IconSet conditional formatting rule. + This conditional formatting rule applies icons to cells + according to their values. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + Worksheet sheet = workbook.Worksheets[0]; + + //Adds an empty conditional formatting + int index = sheet.ConditionalFormattings.Add(); + + FormatConditions fcs = sheet.ConditionalFormattings[index]; + + //Sets the conditional format range. + CellArea ca = new CellArea(); + + ca.StartRow = 0; + + ca.EndRow = 2; + + ca.StartColumn = 0; + + ca.EndColumn = 0; + + fcs.AddArea(ca); + + //Adds condition. + int idx = fcs.AddCondtion(FormatConditionType.IconSet); + + fcs.AddArea(ca); + + FormatCondition cond = fcs[idx]; + + //Get Icon Set + IconSet iconSet = cond.IconSet; + + //Set Icon Type + iconSet.Type = IconSetType.Arrows3; + + //Put Cell Values + Aspose.Cells.Cell cell1 = sheet.Cells["A1"]; + + cell1.PutValue(10); + + Aspose.Cells.Cell cell2 = sheet.Cells["A2"]; + + cell2.PutValue(120); + + Aspose.Cells.Cell cell3 = sheet.Cells["A3"]; + + cell3.PutValue(260); + + //Saving the Excel file + workbook.Save("D:\\book1.xlsx"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + Dim sheet As Worksheet = workbook.Worksheets(0) + + 'Adds an empty conditional formatting + Dim index As Integer = sheet.ConditionalFormattings.Add() + + Dim fcs As FormatConditions = sheet.ConditionalFormattings(index) + + 'Sets the conditional format range. + Dim ca As New CellArea() + + ca.StartRow = 0 + + ca.EndRow = 2 + + ca.StartColumn = 0 + + ca.EndColumn = 0 + + fcs.AddArea(ca) + + 'Adds condition. + Dim idx As Integer = fcs.AddCondtion(FormatConditionType.IconSet) + + fcs.AddArea(ca) + + Dim cond As FormatCondition = fcs(idx) + + 'Get Icon Set + Dim iconSet As IconSet = cond.IconSet + + 'Set Icon Type + iconSet.Type = IconSetType.Arrows3 + + 'Put Cell Values + Dim cell1 As Aspose.Cells.Cell = sheet.Cells("A1") + + cell1.PutValue(10) + + Dim cell2 As Aspose.Cells.Cell = sheet.Cells("A2") + + cell2.PutValue(120) + + Dim cell3 As Aspose.Cells.Cell = sheet.Cells("A3") + + cell3.PutValue(260) + + 'Saving the Excel file + workbook.Save("D:\book1.xlsx") + + + + + + Get the from the collection + + + + + Get the CFValueObjects instance. + + + + + Get or Set the icon set type to display. + Setting the type will auto check if the current Cfvos's count is + accord with the new type. If not accord, old Cfvos will be cleaned and + default Cfvos will be added. + + + + + Indicates whether the icon set is custom. + Default value is false. + + + + + Get or set the flag indicating whether to show the values of the cells on which this icon set is applied. + Default value is true. + + + + + Get or set the flag indicating whether to reverses the default order of the icons in this icon set. + Default value is false. + + + + + Icon set type for conditional formatting. + The threshold values for triggering the different icons within a set are + configurable, and the icon order is reversible. + + + + + 3 arrows icon set. + + + + + 3 gray arrows icon set. + + + + + 3 flags icon set. + + + + + 3 signs icon set. + + + + + 3 symbols icon set (circled). + + + + + 3 Symbols icon set (uncircled). + + + + + 3 traffic lights icon set (unrimmed). + + + + + 3 traffic lights icon set with thick black border. + + + + + 4 arrows icon set. + + + + + 4 gray arrows icon set. + + + + + 4 ratings icon set. + + + + + 4 'red to black' icon set. + + + + + 4 traffic lights icon set. + + + + + 5 arrows icon set. + + + + + 5 gray arrows icon set. + + + + + 5 quarters icon set. + + + + + 5 rating icon set. + + + + + 3 stars set + + + + + 5 boxes set + + + + + 3 triangles set + + + + + None + + + + + CustomSet. + This element is read-only. + + + + + 3 smilies. + Only for .ods. + + + + + 3 color smilies. + Only for .ods. + + + + + Represents the operator type of conditional format and data validation. + + + + + Represents Between operator of conditional format and data validation. + + + + + Represents Equal operator of conditional format and data validation. + + + + + Represents GreaterThan operator of conditional format and data validation. + + + + + Represents GreaterOrEqual operator of conditional format and data validation. + + + + + Represents LessThan operator of conditional format and data validation. + + + + + Represents LessOrEqual operator of conditional format and data validation. + + + + + Represents no comparison. + + + + + Represents NotBetween operator of conditional format and data validation. + + + + + Represents NotEqual operator of conditional format and data validation. + + + + + Used in a FormatConditionType.TimePeriod conditional formatting rule. + These are dynamic time periods, which change based on + the date the conditional formatting is refreshed / applied. + + + + + Today's date. + + + + + Yesterday's date. + + + + + Tomorrow's date. + + + + + A date in the last seven days. + + + + + A date occurring in this calendar month. + + + + + A date occurring in the last calendar month. + + + + + A date occurring in the next calendar month. + + + + + A date occurring this week. + + + + + A date occurring last week. + + + + + A date occurring next week. + + + + + A date occurring this year. + Only for .ods. + + + + + A date occurring last year. + Only for .ods. + + + + + A date occurring next year. + Only for .ods. + + + + + Describe the Top10 conditional formatting rule. + This conditional formatting rule highlights cells whose + values fall in the top N or bottom N bracket, as specified. + + + + + Get or set the flag indicating whether a "top/bottom n" rule is a "top/bottom n percent" rule. + Default value is false. + + + + + Get or set the flag indicating whether a "top/bottom n" rule is a "bottom n" rule. '1' indicates 'bottom'. + Default value is false. + + + + + Get or set the value of "n" in a "top/bottom n" conditional formatting rule. + If IsPercent is true, the value must between 0 and 100. + Otherwise it must between 0 and 1000. + Default value is 10. + + + + + Represents consolidation function. + + + + + Represents Sum function. + + + + + Represents Count function. + + + + + Represents Average function. + + + + + Represents Max function. + + + + + Represents Min function. + + + + + Represents Product function. + + + + + Represents Count Nums function. + + + + + Represents StdDev function. + + + + + Represents StdDevp function. + + + + + Represents Var function. + + + + + Represents Varp function. + + + + + Represents Distinct Count function. + + + Only valid for PivotTable with Data Module created since by 2013. + + + + + The event triggered when exporting an object, such as Picture. + + + + Gets the object that contains the data to be saved. + @return the data source object. + + Gets the object to be exported. + the object to be exported. + + + Represents five types of html cross string. + + + + + Display like MS Excel,depends on the next cell. + If the next cell is null,the string will cross,or it will be truncated + + + + + Display the string like MS Excel exporting html. + + + + + Display HTML cross string, this performance for creating large html files will be more than ten times faster than setting the value to Default or FitToCell. + + + + + Display HTML cross string and hide the right string when the texts overlap. + + + + + Only displaying the string within the width of cell. + + + + + Represents two types of showing the hidden columns in html. + + + + + Hidden the hidden columns in html page. + + + + + Remove the hidden columns in html page. + + + + + Represents two types of showing the hidden rows in html. + + + + + Hidden the hidden rows in html page. + + + + + Remove the hidden rows in html page. + + + + + Represents the exported file path provider. + + + + + Gets the full path of the file by Worksheet name when exporting Worksheet to html separately. + So the references among the Worksheets can be exported correctly. + + Worksheet name + the full path of the file + + + + Represents the exported stream provider. + + + + + Gets the stream. + + + + + + + Closes the stream. + + + + + + + Represents the stream options. + + + + + Initializes a new instance of the class. + + The type to load the linked resource. + The default path. + + + + Initializes a new instance of the class. + + + + + Gets and sets the type of loading resource. + + + + + The default path(URL) saved in generated html file for the referred source. + For example, the sheet data saved in xxx_files/sheet001.htm, the url used in the main html file should be like "src="xxx_files/sheet001.htm"" + + + + + The user custom path(URL) saved in generated html file for the referred source. If not defined by user, DefaultPath will be used. + For example, the sheet data will be saved by user to d:/sheet001.htm, the url used in the main html file should be "d:/sheet001.htm" or other valid relative path that can be accessed by the main html file. + + + + + Gets/Sets the stream + + + + + Allows users to manipulate objects while exporting. + + + The following example creates a Workbook, opens a file named designer.xls in it and makes the horizontal and vertical scroll bars invisible for the Workbook. It then replaces two string values with an Integer value and string value respectively within the spreadsheet and finally sends the updated file to the client browser. + + [C#] + //custom implementation of IExportObjectListener + class CustomExportObjectListener : IExportObjectListener + { + private int imgIdx = 0; + public object ExportObject(ExportObjectEvent e) + { + Object source = e.GetSource(); + if (source is Shape) + { + Shape shape = (Shape)source; + string url = null; + switch (shape.MsoDrawingType) + { + case MsoDrawingType.Picture: + { + url = SaveImage(((Picture)shape).Data, imgIdx, ((Picture)shape).ImageFormat); + break; + } + } + if (url != null) + { + imgIdx++; + } + return url; + } + return null; + } + private string SaveImage(byte[] data, int imgIdx, ImageFormat format) + { + //here save the image to any location, then return the url(relative or absolute) that the generated html can get the image + return "temp1/temp2.png"; + } + } + + //Save html file with custom listener + HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + saveOptions.ExportObjectListener = new CustomExportObjectListener(); + Stream stream = File.Create(outfn); + book.Save(stream, saveOptions); + stream.Flush(); + stream.Close(); + + + + + + Export one object. + + The event triggered when one object needs to be exported. + + The information about the result of exporting object. +
  • For exporting objects when export workbook to HTML format, + the result is URL string to access the saved Image from the html file which contains this exported object. +
+
+ + + Represents the cell field of ods. + + + + + Represents the custom format of the field's value. + + + + + Gets and sets the type of the field. + + + + + Get and sets the row index of the cell. + + + + + Get and sets the column index of the cell. + + + + + Represents the fields of ODS. + + + + + Gets the field by the index. + + The index. + + + + + + Gets the field by row and column index. + + The row index. + The column index. + + + + + + Adds a field. + + The row index. + The column index. + The type of the field. + The number format of the field. + + + + + + Update fields value to the cells. + + + + + Represents the cell field type of ods. + + + + + Current date. + + + + + The name of the sheet. + + + + + The name of the file. + + + + + Represents the type of ODS generator. + + + + + Libre Office + + + + + Open Office + + + + + Represents the page background of ods. + + + + + Gets and sets the page background type. + + + + + Gets and sets the color of background. + + + + + Gets and sets the page background graphic type. + + + + + Gets and set the background graphic position. + + + + + Indicates whether it's a linked graphic. + + + + + Gets and sets the linked graphic path. + + + + + Gets and sets the graphic data. + + + + + Represents the position. + + + + + Top left. + + + + + Top center. + + + + + Top right. + + + + + Center left. + + + + + Center. + + + + + Center right. + + + + + Bottom left. + + + + + Bottom center. + + + + + Bottom right. + + + + + Represents the type of formatting page background with image. + + + + + Set the image at specific position. + + + + + Stretch the image. + + + + + Repeat and repeat the image. + + + + + Represents the page background type of ods. + + + + + No background. + + + + + Formats the background with color. + + + + + Formats the background with image. + + + + + Represents the default edit language. + + + + + Represents auto detecting edit language according to the text itself. + + + + + Represents English language. + + + + + Represents Chinese, Japanese, Korean language. + + + + + Setting for rendering Emf metafile. + + + + + Only rendering Emf records. + + + + + Prefer rendering EmfPlus records. + + + + + Enumerates grid line Type. + + + + + Represents dotted line. + + + + + Represents hair line. + + + + + Indicates which pages will not be printed. + + + + + Prints all pages. + + + + + Don't print the pages which the cells are blank. + + + + + Don't print the pages which cells only contain styles. + + + + + Enumerates displaying text type when the text width is larger than cell width. + + + + + Display text like in Microsoft Excel. + + + + + Display all the text by crossing other cells and keep text of crossed cells. + + + + + Display all the text by crossing other cells and override text of crossed cells. + + + + + Only display the text within the width of cell. + + + + + Represents type of copying format when inserting rows. + + + + + Formats same as above row. + + + + + Formats same as below row. + + + + + Clears formatting. + + + + + Represents the copy options. + + + + + CopyOptions constructor. + + + + + Indicates whether keeping macros; + + + Only for copying workbook. + + + + + Indicates whether extend ranges when copying the range to adjacent range. + + + If it's true, only extends the range of the hyperlink,not adding a new hyperlink when copying hyperlinks to adjacent rows. + + + + + Indicates whether copying the names. + + + + + If the formula is not valid for the dest destination, only copy values. + + + + + Indicates whether copying column width in unit of characters. + + + + + When copying a worksheet to another workbook and the worksheet contains the formulas which refer to other worksheets in MS Excel, + the copied formulas should refer to source workbook. + But sometimes we have copied other worksheets and we hope the copied formulas refer to other worksheets with the name in the same workbook, + please set this property as true. + + + The default value is true. + + + + + When copying the range in the same file and the chart refers to the source sheet, + False means the copied chart's data source will not be changed. + True means the copied chart's data source refers to the destination sheet. + + + The default value is false, it works as MS Excel. + + + + + Represents the setting of deleting rows/columns. + + + + + Indicates if update references in other worksheets. + + + + + Represents find options. + + + + + [C#] + + //Instantiate the workbook object + Workbook workbook = new Workbook("C:\\book1.xls"); + + //Get Cells collection + Cells cells = workbook.Worksheets[0].Cells; + + //Instantiate FindOptions Object + FindOptions findOptions = new FindOptions(); + + //Create a Cells Area + CellArea ca = new CellArea(); + ca.StartRow = 8; + ca.StartColumn = 2; + ca.EndRow = 17; + ca.EndColumn = 13; + + //Set cells area for find options + findOptions.SetRange(ca); + + //Set searching properties + findOptions.SearchBackward = false; + + findOptions.SeachOrderByRows = true; + + findOptions.LookInType = LookInType.Values; + + //Find the cell with 0 value + Cell cell = cells.Find(0, null, findOptions); + + [VB.NET] + + 'Instantiate the workbook object + Dim workbook As New Workbook("C:\book1.xls") + + 'Get Cells collection + Dim cells As Cells = workbook.Worksheets(0).Cells + + 'Instantiate FindOptions Object + Dim findOptions As New FindOptions() + + 'Create a Cells Area + Dim ca As New CellArea() + ca.StartRow = 8 + ca.StartColumn = 2 + ca.EndRow = 17 + ca.EndColumn = 13 + + 'Set cells area for find options + findOptions.SetRange(ca) + + 'Set searching properties + findOptions.SearchBackward = True + + findOptions.SeachOrderByRows = True + + findOptions.LookInType = LookInType.Values + + 'Find the cell with 0 value + Dim cell As Cell = cells.Find(0, Nothing, findOptions) + + + + + + + Indicates if the searched string is case sensitive. + + NOTE: This member is now obsolete. Instead, + please use FindOptions.CaseSensitive property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates if the searched string is case sensitive. + + + + + Look at type. + + + + + Gets and sets the searched range. + + + Returns the searched range. + + + + + Sets the searched range. + + the searched range. + + + + Indicates whether the searched range is set. + + + + + Search order. True: search next. False: search previous. + + NOTE: This member is now obsolete. Instead, + please use FindOptions.SearchBackward property. + This property will be removed 12 months later since November 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Whether search backward for cells. + + + + + Indicates whether search order by rows or columns. + + + + + Look in type. + + + + + Indicates whether the searched key is regex. If true then the searched key will be taken as regex. + + + + + Indicates whether searched cell value type should be same with the searched key. + + + + + The format to search for. + + + + + Gets or sets a value that indicates whether converting the searched string value to numeric data. + + + + + Represents the options of inserting. + + + + + + + + + Indicates if references in other worksheets will be updated. + + + + + Represents look at type. + + + + + Cell value Contains the find object. + + + + + Cell value Starts with the find object. + + + + + Cell value ends with the find object. + + + + + Cell value is same as the find object. + + + + + Represents look in type. + + + + + If the cell contains a formula, find object from formula,else find it from the value. + + + + + Only find object from the formatted values. + + + + + Only find object from the values of cells which do not contains formula. + + + + + Only find object from the comments. + + + + + Only find object from formulas. + + + + + Only find object from the original values. + + + + + Represents the paste special options. + + + + + The paste special type. + + + + + Indicates whether skips blank cells. + + + + + True means only copying visible cells. + + + + + True to transpose rows and columns when the range is pasted. The default value is False. + + + + + Represents the paste special type. + + + + + Copies all data of the range. + + + + + It works as "All" behavior of MS Excel. + + + + + Copies all data of the range without the range. + + + + + It works as "All except borders" behavior of MS Excel. + + + + + Only copies the widths of the range. + + + + + Only copies the heights of the range. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represent the replace options. + + + + + Indicates if the searched string is case sensitive. + + + + + Indicates whether to match entire cells contents + + + + + Indicates whether the searched key is regex. If true then the searched key will be taken as regex. + + + + + Represents Excel country identifiers. + + + + + + + + + United States + + + + + Canada + + + + + Latin America, except Brazil + + + + + Russia + + + + + Egypt + + + + + Greece + + + + + Netherlands + + + + + Belgium + + + + + France + + + + + Spain + + + + + Hungary + + + + + Italy + + + + + Switzerland + + + + + Austria + + + + + United Kingdom + + + + + Denmark + + + + + Sweden + + + + + Norway + + + + + Poland + + + + + Germany + + + + + Mexico + + + + + Brazil + + + + + Australia + + + + + New Zealand + + + + + Thailand + + + + + Japan + + + + + SouthKorea + + + + + Viet Nam + + + + + People's Republic of China + + + + + Turkey + + + + + India + + + + + Algeria + + + + + Morocco + + + + + Libya + + + + + Portugal + + + + + Iceland + + + + + Finland + + + + + Czech Republic + + + + + Taiwan + + + + + Lebanon + + + + + Jordan + + + + + Syria + + + + + Iraq + + + + + Kuwait + + + + + Saudi Arabia + + + + + United Arab Emirates + + + + + Israel + + + + + Qatar + + + + + Iran + + + + + Factory to create some instances which may be re-implemented by user for special purpose. + + + + + Create one instance of MemoryStream or custom implementation of MemoryStream. + + The MemoryStream instance. + + + + Create one instance of MemoryStream or custom implementation of MemoryStream. + + Initial capacity for the MemoryStream + The MemoryStream instance. + + + + Create one CultureInfo by given id. + + + + The CultureInfo instance. + This implementation is useful for situations: + 1. Some cultures may not be supported by user's environment and creating the required CultureInfo with given identifier may cause Exception. + To avoid the exception, user may override this method to provide a valid CultureInfo instance for the unsupported one. + 2. User may want to specify some custom properties for some cultures to get expected result for formatting. + For this purpose user may override this method to provide the CultureInfo instance with user specified properties. + Please note UseUserOverride property of the returned CultureInfo instance may influence the formatted result. + If it is false, some properties of the returned CultureInfo instance may be overridden by our built-in + formatting engine according to the formatting requirements of different scenarios. + If it is true, we will not change any properties of it and use it to format values directly. + So, if user has specified custom properties for the returned CultureInfo instance, please make sure its UseUserOverride is true. + + + + + Create one instance of random number generator. + + instance of random number generator + + + + Represents identifier information. + + + + + Returns or sets the name of the object. + + + + + Returns or sets the value of the custom property. + + NOTE: This member is now obsolete. Instead, + please use CustomProperty.Value property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Returns or sets the value of the custom property. + + + + + A collection of objects that represent additional information. + + + + + Adds custom property information. + + The name of the custom property. + The value of the custom property. + + + + Gets the custom property by the specific index. + + The index. + The custom property + + + + Gets the custom property by the property name. + + The property name. + The custom property + + + + A collection of built-in document properties. + + +

Provides access to objects by their names (using an indexer) and + via a set of typed properties that return values of appropriate types.

+
+
+ + Returns a object. + + Returns a object by the name of the property. + + +

The string names of the properties correspond to the names of the typed + properties available from .

+

If you request a property that is not present in the document, but the name + of the property is recognized as a valid built-in name, a new + is created, added to the collection and returned. The newly created property is assigned + a default value (empty string, zero, false or DateTime.MinValue depending on the type + of the built-in property).

+

If you request a property that is not present in the document and the name + is not recognized as a built-in name, a null is returned.

+
+ The case-insensitive name of the property to retrieve. +
+ + + Gets or sets the document's language. + + + + + Gets or sets the name of the document's author. + + + + + Represents an estimate of the number of bytes in the document. + + + + + Represents an estimate of the number of characters in the document. + + + + + Represents an estimate of the number of characters (including spaces) in the document. + + + + + Gets or sets the document comments. + + + + + Gets or sets the category of the document. + + + + + Gets or sets the content type of the document. + + + + + Gets or sets the content status of the document. + + + + + Gets or sets the company property. + + + + + Gets or sets the hyperlinkbase property. + + + + + Gets or sets date of the document creation in local timezone. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the Universal time of the document creation. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the document keywords. + + + + + Gets or sets the date when the document was last printed in local timezone. + + +

If the document was never printed, this property will return DateTime.MinValue.

+

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the Universal time when the document was last printed. + + + + + Gets or sets the name of the last author. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the time of the last save in local timezone. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the universal time of the last save. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Represents an estimate of the number of lines in the document. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the manager property. + + + + + Gets or sets the name of the application. + + + + + Represents an estimate of the number of pages in the document. + + + + + Represents an estimate of the number of paragraphs in the document. + + + + + Gets or sets the document revision number. + + +

Aspose.Cells does not update this property when you modify the document.

+
+ NOTE: This property is now obsolete. + Instead, please use BuiltInDocumentPropertyCollection.Revision property, + this property will be removed 12 months later since February 2017. + Aspose apologizes for any inconvenience you may have experienced. +
+ + + Gets or sets the document revision number. + + +

Aspose.Cells does not update this property when you modify the document.

+
+
+ + + Gets or sets the subject of the document. + + + + + Gets or sets the informational name of the document template. + + + + + Gets or sets the title of the document. + + + + + Gets or sets the total editing time in minutes. + + + + + Represents the version number of the application that created the document. + + + It's format is "00.0000",for example : 12.0000 + + + + + Represents the version of the file. + + + + + Indicates the display mode of the document thumbnail. + + + + + Indicates whether hyperlinks in a document are up-to-date. + + + + + Represents an estimate of the number of words in the document. + + + + + A collection of custom document properties. + + +

Each object represents a custom property of a container document.

+
+ + + + [C#] + + //Instantiate a Workbook object + Workbook workbook = new Workbook("C:\\book1.xls"); + + //Retrieve a list of all custom document properties of the Excel file + CustomDocumentPropertyCollection customProperties = workbook.Worksheets.CustomDocumentProperties; + + [VB.NET] + + 'Instantiate a Workbook object + Dim workbook As New Workbook("C:\book1.xls") + + 'Retrieve a list of all custom document properties of the Excel file + Dim customProperties As CustomDocumentPropertyCollection = workbook.Worksheets.CustomDocumentProperties + + + +
+ + Creates a new custom document property. + + Creates a new custom document property of the PropertyType.String data type. + + The name of the property. + The value of the property. + The newly created property object. + + + + Creates a new custom document property of the PropertyType.Number data type. + + The name of the property. + The value of the property. + The newly created property object. + + + + Creates a new custom document property of the PropertyType.DateTime data type. + + The name of the property. + The value of the property. + The newly created property object. + + + + Creates a new custom document property of the PropertyType.Boolean data type. + + The name of the property. + The value of the property. + The newly created property object. + + + + Creates a new custom document property of the PropertyType.Float data type. + + The name of the property. + The value of the property. + The newly created property object. + + + + Creates a new custom document property which links to content. + + The name of the property. + The source of the property + The newly created property object. + + + + Update custom document property value which links to content. + + + + + Update custom document property value to linked range. + + + + + Represents a custom or built-in document property. + + + + + [C#] + + //Instantiate a Workbook object + Workbook workbook = new Workbook("C:\\book1.xls"); + + //Retrieve a list of all custom document properties of the Excel file + DocumentPropertyCollection customProperties = workbook.Worksheets.CustomDocumentProperties; + + //Accessng a custom document property by using the property index + DocumentProperty customProperty1 = customProperties[3]; + + //Accessng a custom document property by using the property name + DocumentProperty customProperty2 = customProperties["Owner"]; + + [VB.NET] + + 'Instantiate a Workbook object + Dim workbook As Workbook = New Workbook("C:\\book1.xls") + + 'Retrieve a list of all custom document properties of the Excel file + Dim customProperties As DocumentPropertyCollection = workbook.Worksheets.CustomDocumentProperties + + 'Accessng a custom document property by using the property index + Dim customProperty1 As DocumentProperty = customProperties(3) + + 'Accessng a custom document property by using the property name + Dim customProperty2 As DocumentProperty = customProperties("Owner") + + + + + + Returns the name of the property. + + + + + Gets or sets the value of the property. + + + + + Indicates whether this property is linked to content + + + + + The linked content source. + + + + + Gets the data type of the property. + + + + + Returns true if this property does not have a name in the OLE2 storage + and a unique name was generated only for the public API. + + + + + Returns the property value as a string. + + +

Converts a number property using Object.ToString(). Converts a boolean property + into "Y" or "N". Converts a date property into a short date string.

+
+
+ + + Returns the property value as integer. + + + Throws an exception if the property type is not PropertyType.Number. + + + + + Returns the property value as double. + + + Throws an exception if the property type is not PropertyType.Float. + + + + + Returns the property value as DateTime in local timezone. + + +

Throws an exception if the property type is not PropertyType.Date.

+
+
+ + + Returns the property value as bool. + + +

Throws an exception if the property type is not PropertyType.Boolean.

+
+
+ + + Base class for and collections. + + + + + [C#] + + //Instantiate a Workbook object by calling its empty constructor + Workbook workbook = new Workbook("C:\\book1.xls"); + + //Retrieve a list of all custom document properties of the Excel file + DocumentPropertyCollection customProperties = workbook.Worksheets.CustomDocumentProperties; + + //Accessng a custom document property by using the property index + DocumentProperty customProperty1 = customProperties[3]; + + //Accessng a custom document property by using the property name + DocumentProperty customProperty2 = customProperties["Owner"]; + + [VB.NET] + + 'Instantiate a Workbook object by calling its empty constructor + Dim workbook As Workbook = New Workbook("C:\\book1.xls") + + 'Retrieve a list of all custom document properties of the Excel file + Dim customProperties As DocumentPropertyCollection = workbook.Worksheets.CustomDocumentProperties + + 'Accessng a custom document property by using the property index + Dim customProperty1 As DocumentProperty = customProperties(3) + + 'Accessng a custom document property by using the property name + Dim customProperty2 As DocumentProperty = customProperties("Owner") + + + + + + + Gets number of items in the collection. + + + + Returns a object. + + Returns a object by the name of the property. + + +

Returns null if a property with the specified name is not found.

+
+ The case-insensitive name of the property to retrieve. +
+ + + Returns a object by index. + + Zero-based index of the to retrieve. + + + + + + + + + + Returns true if a property with the specified name exists in the collection. + + The case-insensitive name of the property. + True if the property exists in the collection; false otherwise. + + + + Gets the index of a property by name. + + The case-insensitive name of the property. + The zero based index. Negative value if not found. + + + + Removes a property with the specified name from the collection. + + The case-insensitive name of the property. + + + + Removes a property at the specified index. + + The zero based index. + + + + Removes all properties from the collection. + + + + + Specifies data type of a document property. + + + + + The property is a boolean value. + + + + + The property is a date time value. + + + + + The property is a floating number. + + + + + The property is an integer number. + + + + + The property is a string value. + + + + + The property is a byte array. + + + + + Represents identifier information. + + + + + Returns or sets the name of the object. + + + + + Returns or sets the value of the content type property. + + + + + Gets and sets the type of the property. + + + + + Indicates whether the value could be empty. + + + + + A collection of objects that represent additional information. + + + + + Adds content type property information. + + The name of the content type property. + The value of the content type property. + + + + Adds content type property information. + + The name of the content type property. + The value of the content type property. + The type of the content type property. + + + + Gets the content type property by the specific index. + + The index. + The content type property + + + + Gets the content type property by the property name. + + The property name. + The content type property + + + + Contains all core classes of Aspose.Cells. + + + + + Signature in file. + + + + + Constructor of digitalSignature. Uses .Net implementation. + + Certificate object that was used to sign the document. + The purpose to signature. + The utc time when the document was signed. + + + + Constructor of digitalSignature. Uses Bouncy Castle implementation. + + A byte array containing data from an X.509 certificate. + The password required to access the X.509 certificate data. + The purpose to signature. + The utc time when the document was signed. + + + + Certificate object that was used to sign the document. + + + + + The purpose to signature. + + + + + The time when the document was signed. + + + + + Specifies a GUID which can be cross-referenced with the GUID of the signature line stored in the document content. + Default value is Empty (all zeroes) Guid. + + + When set, it associates with corresponding . + + + + + Specifies the text of actual signature in the digital signature. + Default value ise Empty. + + + + + Specifies an image for the digital signature. + Default value is null. + + + + + Specifies the class ID of the signature provider. + Default value is Empty (all zeroes) Guid. + + + The cryptographic service provider (CSP) is an independent software module that actually performs cryptography algorithms for authentication, encoding, and encryption. + Microsoft Office reserves the value of {00000000-0000-0000-0000-000000000000} for its default signature provider, + and {000CD6A4-0000-0000-C000-000000000046} for its East Asian signature provider. + + The GUID of the additionally installed provider should be obtained from the documentation shipped with the provider. + + + + + If this digital signature is valid and the document has not been tampered with, + this value will be true. + + + + + XAdES type. + Default value is None(XAdES is off). + + + + + Provides a collection of digital signatures attached to a document. + + + The following example shows how to create digital signature + + [C#] + internal void ValidateSignature() + { + Workbook wb = new Workbook(@"c:\newfile.xlsx"); + //wb.IsDigitallySigned is true when the workbook is signed already. + System.Console.WriteLine(wb.IsDigitallySigned); + //get digitalSignature collection from workbook + DigitalSignatureCollection dsc = wb.GetDigitalSignature(); + foreach (DigitalSignature ds in dsc) + { + System.Console.WriteLine(ds.Comments); + System.Console.WriteLine(ds.SignTime); + System.Console.WriteLine(ds.IsValid); + } + } + internal void SignSignature() + { + //dsc is signature collection contains one or more signature needed to sign + DigitalSignatureCollection dsc = new DigitalSignatureCollection(); + //cert must contain private key, it can be contructed from cert file or windows certificate collection. + //123456 is password of cert + X509Certificate2 cert = new X509Certificate2("c:\\mykey2.pfx", "123456"); + DigitalSignature ds = new DigitalSignature(cert, "test for sign", DateTime.Now); + dsc.Add(ds); + Workbook wb = new Workbook(); + //wb.SetDigitalSignature sign all signatures in dsc + wb.SetDigitalSignature(dsc); + wb.Save(@"c:\newfile.xlsx"); + } + + [Visual Basic] + Sub ValidateSignature() + Dim workbook As Workbook = New Workbook("c:\newfile.xlsx") + 'Workbook.IsDigitallySigned is true when the workbook is signed already. + System.Console.WriteLine(workbook.IsDigitallySigned) + 'get digitalSignature collection from workbook + Dim dsc As DigitalSignatureCollection = workbook.GetDigitalSignature() + Dim ds As DigitalSignature + For Each ds In dsc + System.Console.WriteLine(ds.Comments) + System.Console.WriteLine(ds.SignTime) + System.Console.WriteLine(ds.IsValid) + Next + End Sub + + Sub SignSignature() + 'dsc is signature collection contains one or more signature needed to sign + Dim dsc As DigitalSignatureCollection = New DigitalSignatureCollection() + 'cert must contain private key, it can be contructed from cert file or windows certificate collection. + Dim cert As X509Certificate2 = New X509Certificate2("c:\mykey2.pfx", "123456") + 'create a signature with certificate, sign purpose and sign time + Dim ds As DigitalSignature = New DigitalSignature(cert, "test for sign", DateTime.Now) + dsc.Add(ds) + Dim workbook As Workbook = New Workbook() + 'workbook.SetDigitalSignature sign all signatures in dsc + workbook.SetDigitalSignature(dsc) + workbook.Save("c:\newfile.xlsx") + End Sub + + + + + The constructor of DigitalSignatureCollection. + + + + + Add one signature to DigitalSignatureCollection. + + Digital signature in collection. + + + + Get the enumerator for DigitalSignatureCollection, + this enumerator allows iteration over the collection + + The enumerator to iteration. + + + + Type of XML Advanced Electronic Signature (XAdES). + + + + + XAdES is off. + + + + + Basic XAdES. + + + + + Contains all classes of DigitalSignature. + + + + + Represents whether and how to show objects in the workbook. + + + + + Show all objects + + + + + Show placeholders + + + + + Hide all shapes. + + + + + Encapsulates the object that represents a cell comment. + + + + [C#] + + Workbook workbook = new Workbook(); + CommentCollection comments = workbook.Worksheets[0].Comments; + + //Add comment to cell A1 + int commentIndex = comments.Add(0, 0); + Comment comment = comments[commentIndex]; + comment.Note = "First note."; + comment.Font.Name = "Times New Roman"; + + //Add comment to cell B2 + comments.Add("B2"); + comment = comments["B2"]; + comment.Note = "Second note."; + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + Dim comments as CommentCollection = workbook.Worksheets(0).Comments + + 'Add comment to cell A1 + Dim commentIndex as Integer = comments.Add(0, 0) + Dim comment as Comment = comments(commentIndex) + comment.Note = "First note." + comment.Font.Name = "Times New Roman" + + 'Add comment to cell B2 + comments.Add("B2") + comment = comments("B2") + comment.Note = "Second note." + + + + + + + Gets and sets Name of the original comment author + + + + + Get a Shape object that represents the shape attached to the specified comment. + + + + + Gets the row index of the comment. + + + + + Gets the column index of the comment. + + + + + Gets the list of threaded comments; + + + + + Represents the content of comment. + + + + + Gets and sets the html string which contains data and some formats in this comment. + + + + + Gets the font of comment. + + + + + Format some characters with the font setting. + + The start index. + The length. + The font setting. + The flag of the font setting. + + + + Returns a Characters object that represents a range of characters within the comment text. + + The index of the start of the character. + The number of characters. + Characters object. + + + + Returns all Characters objects + that represents a range of characters within the comment text. + + All Characters objects + + + + Represents if the comment is visible or not. + + + + + Gets and sets the text orientation type of the comment. + + + + + Gets and sets the text horizontal alignment type of the comment. + + + + + Gets and sets the text vertical alignment type of the comment. + + + + + Indicates if size of comment is adjusted automatically according to its content. + + + + + Represents the height of the comment, in unit of centimeters. + + + + + Represents the width of the comment, in unit of centimeters. + + + + + Represents the width of the comment, in unit of pixels. + + + + + Represents the Height of the comment, in unit of pixels. + + + + + Represents the width of the comment, in unit of inches. + + + + + Represents the height of the comment, in unit of inches. + + + + + Encapsulates a collection of objects. + + + + [C#] + + Workbook workbook = new Workbook(); + + CommentCollection comments = workbook.Worksheets[0].Comments; + + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + + Dim comments as CommentCollection = workbook.Worksheets(0).Comments + + + + + + Adds a threaded comment. + + Cell row index. + Cell column index. + The text of the comment + The user of this threaded comment. + + object index. + + + + Adds a threaded comment. + + The name of the cell. + The text of the comment + The user of this threaded comment. + + object index. + + + + Gets the threaded comments by row and column index. + + The row index. + The column index. + + + + + + Gets the threaded comments by cell name. + + The name of the cell. + + + + + + Adds a comment to the collection. + + Cell row index. + Cell column index. + + object index. + + + + Adds a comment to the collection. + + Cell name. + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element at the specified cell. + + Cell name. + The element at the specified cell. + + + + Gets the element at the specified row index and column index. + + Row index. + Column index. + The element at the specified cell. + + + + Removes the comment of the specific cell. + + The name of cell which contains a comment. + + + + Removes the comment of the specific cell. + + The row index. + the column index. + + + + Removes all comments; + + + + + Represents the threaded comment. + + + + + Gets the row index of the comment. + + + + + Gets the column index of the comment. + + + + + Gets and sets the text of the comment. + + + + + Gets the author of the comment. + + + + + Gets and sets the created time of this threaded comment. + + + + + Represents the person who creates the threaded comments; + + + + + Gets and sets the name. + + + + + Gets and sets the id of the user. + + + + + Gets the id of the provider. + + + + + Represents all persons who . + + + + + Gets and sets the current user. + + + + + Gets the person who create threaded comments. + + The index + + + + + + Gets the person who create threaded comments. + + The name of the author. + + + + + + Adds one thread comment person. + + The name of the person. + + + The id of the provider + + + + + + Represents the list of threaded comments. + + + + + Gets the threaded comment by the specific index. + + The index + + + + + + Adds a threaded comment; + + The text of the threaded comment. + The author of the threaded comment + + + + + + Encryption Type. + Only used by excel2003. + We will encrypt 2007/2010 workbook using SHA AES the same as Excel does, and this EncryptionType will be ignored. + + + + + + + + + Office 97/2000 compatible. + + + + + + + + + + + + + Error check setting applied on certain ranges. + + + + + [C#] + + Workbook workbook = new Workbook(); + ErrorCheckOptionCollection opts = workbook.Worksheets[0].ErrorCheckOptions; + int optionIdx = opts.Add(); + ErrorCheckOption opt = opts[optionIdx]; + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.InconsistFormula, false); + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.InconsistRange, false); + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.TextDate, false); + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.TextNumber, false); + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.Validation, false); + opt.AddRange(CellArea.CreateCellArea("A1", "B10")); + workbook.Save(@"D:\Filetemp\Book1.xlsx"); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + Dim opts As ErrorCheckOptionCollection = workbook.Worksheets(0).ErrorCheckOptions + Dim optionIdx As Integer = opts.Add() + Dim opt As ErrorCheckOption = opts(optionIdx) + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.InconsistFormula, False) + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.InconsistRange, False) + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.TextDate, False) + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.TextNumber, False) + opt.SetErrorCheck(Aspose.Cells.ErrorCheckType.Validation, False) + opt.AddRange(CellArea.CreateCellArea("A1", "B10")) + workbook.Save("D:\Filetemp\Book1.xlsx") + + + + + + + Checks whether given error type will be checked. + + error type can be checked + return true if given error type will be checked(green triangle will be shown for cell if the check failed). + + + + Sets whether given error type will be checked. + + error type can be checked. + true if given error type needs to be checked(green triangle will be shown for cell if the check failed). + + + + Gets the count of ranges that influenced by this setting. + + the count of ranges that influenced by this setting. + + + + Adds one influenced range by this setting. + + the range to be added. + the index of the added range in the range list of this setting. + + + + Gets the influenced range of this setting by given index. + + the index of range + return influenced range at given index. + + + + Removes one range by given index. + + the index of the range to be removed. + + + + Represents all error check option. + + + + + Gets object by the given index. + + The index + Return object + + + + Add an error check option. + + + + + + + Represents all error check type. + + + + + check for calculation errors + + + + + check for references to empty cells + + + + + check the format of numeric values + + + + + check formulas with references to less than the entirety + of a range containing continuous data + + + + + check formulas that are inconsistent with formulas in neighboring cells. + + + + + check the format of date/time values + + + + + check for unprotected formulas + + + + + whether to perform data validation + + + + + Ignore errors when cells contain a value different from a calculated column formula. + + + + + Represents custom exception type code. + + + + + Invalid chart setting. + + + + + Invalid data type setting. + + + + + Invalid data validation setting. + + + + + Invalid data validation setting. + + + + + Invalid file format. + + + + + Invalid formula. + + + + + Invalid data. + + + + + Invalid operator. + + + + + Incorrect password. + + + + + License related errors. + + + + + Out of MS Excel limitation error. + + + + + Invalid page setup setting. + + + + + Invalid pivotTable setting. + + + + + Invalid drawing object setting. + + + + + Invalid sparkline object setting. + + + + + Invalid worksheet name. + + + + + Invalid worksheet type. + + + + + The process is interrupted. + + + + + The file is invalid. + + + + + Permission is required to open this file. + + + + + Unsupported feature. + + + + + Unsupported stream to be opened. + + + + + Files contains some undisclosed information. + + + + + Represents all export table options. + + + + + Gets and sets the DataTable which columns' data type is assigned. + + + + + Indicates whether the data in the first row are exported to the column name of the DataTable. + The default value is false. + + + + + Indicates whether skip invalid value for the column. + For example,if the column type is decimal ,the value is greater than decimal.MaxValue + and this property is true,we will not throw exception again. + The default value is false. + + + + + Only exports visible cells. + + + + + Only exports visible rows. + + + + + Only exports visible columns. + + + + + Exports the string value of the cells to the DataTable. + + + + + Exports the html string value of the cells to the DataTable. + + + + + Gets and sets the format strategy when exporting the value as string value. + + + + + False, Aspose.Cells will set the DataColumn's type by the value type of the first row for performance. + True, Aspose.Cells will check whether the value type in the column are mixed before set the DataColumn's type + And the value type are mixed, the DataColumn's type will be string. + + + + + True if a row in Workbook file represents a row in DataTable. False if a column in Workbook file represents a row in DataTable. + + + + + The indexes of columns/rows which should be exported out. + + + + + Renames strategy when columns contains the duplicate names. + + + + + Specifies all properties associated with an ODBC or OLE DB external data connection. + + + + + The connection information string is used to make contact with an OLE DB or ODBC data source. + + + + + Gets the definition of power query formula. + + + + + Specifies the OLE DB command type. + 1. Query specifies a cube name + 2. Query specifies a SQL statement + 3. Query specifies a table name + 4. Query specifies that default information has been given, and it is up to the provider how to interpret. + 5. Query is against a web based List Data Provider. + + + + + The string containing the database command to pass to the data provider API that will + interact with the external source in order to retrieve data + + + + + Specifies a second command text string that is persisted when PivotTable server-based + page fields are in use. + For ODBC connections, serverCommand is usually a broader query than command (no + WHERE clause is present in the former). Based on these 2 commands(Command and ServerCommand), + parameter UI can be populated and parameterized queries can be constructed + + + + + + Specifies an external data connection + + + + + Gets the id of the connection. + + + + + Gets the definition of power query formula. + + + + + Gets or Sets the external connection DataSource type. + + + + + Used when the external data source is file-based. When a connection to such a data + source fails, the spreadsheet application attempts to connect directly to this file. May be + expressed in URI or system-specific file path notation. + + + + + Identifier for Single Sign On (SSO) used for authentication between an intermediate + spreadsheetML server and the external data source. + + + + + True if the password is to be saved as part of the connection string; otherwise, False. + + + + + True if the external data fetched over the connection to populate a table is to be saved + with the workbook; otherwise, false. + + + + + True if this connection should be refreshed when opening the file; otherwise, false. + + + + + Specifies what the spreadsheet application should do when a connection fails. + The default value is ReConnectionMethodType.Required. + + + + + Specifies what the spreadsheet application should do when a connection fails. + The default value is ReConnectionMethodType.Required. + + + NOTE: This property is now obsolete. Instead, + please use ExternalConnection.ReconnectionMethodType property. + This property will be removed 12 months later since October 2017. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates whether the spreadsheet application should always and only use the + connection information in the external connection file indicated by the odcFile attribute + when the connection is refreshed. If false, then the spreadsheet application + should follow the procedure indicated by the reconnectionMethod attribute + + + + + Specifies the full path to external connection file from which this connection was + created. If a connection fails during an attempt to refresh data, and reconnectionMethod=1, + then the spreadsheet application will try again using information from the external connection file + instead of the connection object embedded within the workbook. + + + + + True if the connection has not been refreshed for the first time; otherwise, false. + This state can happen when the user saves the file before a query has finished returning. + + + + + Specifies the name of the connection. Each connection must have a unique name. + + + + + True when the spreadsheet application should make efforts to keep the connection + open. When false, the application should close the connection after retrieving the + information. + + + + + Specifies the number of minutes between automatic refreshes of the connection. + + + + + Specifies The unique identifier of this connection. + + + + + Specifies the user description for this connection + + + + + Indicates whether the associated workbook connection has been deleted. true if the + connection has been deleted; otherwise, false. + + + + + Specifies the authentication method to be used when establishing (or re-establishing) the connection. + + + + + Specifies the authentication method to be used when establishing (or re-establishing) the connection. + + + NOTE: This property is now obsolete. Instead, + please use ExternalConnection.CredentialsMethodType property. + This property will be removed 12 months later since October 2017. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates whether the connection can be refreshed in the background (asynchronously). + true if preferred usage of the connection is to refresh asynchronously in the background; + false if preferred usage of the connection is to refresh synchronously in the foreground. + + + + + Gets for an ODBC or web query. + + + + + Specifies the collection + + + + [C#] + Workbook wb = new Workbook("connection.xlsx"); + ExternalConnectionCollection dataConns = wb.DataConnections; + ExternalConnection dataConn = null; + for (int i = 0; i < dataConns.Count; i++) + { + dataConn = dataConns[i]; + //get external connection id + Console.WriteLine(dataConn.ConnectionId); + } + + [Visual Basic] + Dim wb As Workbook = New Workbook("connection.xlsx") + Dim dataConns As ExternalConnectionCollection = wb.DataConnections + Dim dataConn As ExternalConnection + Dim count As Integer = dataConns.Count - 1 + Dim i As Integer + For i = 0 To count Step 1 + dataConn = dataConns(i) + 'get external connection id + Console.WriteLine(dataConn.ConnectionId) + Next + + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element with the specified name. + + data connection name + The element with the specified name. + + + + Gets the element with the specified id. + + external connection id + The element with the specified id. + + + + Specifies the properties for a web query source. A web query will retrieve data from HTML tables, + and can also supply HTTP "Get" parameters to be processed by the web server in generating the HTML by + including the parameters and parameter elements. + + + + + true if the web query source is XML (versus HTML), otherwise false. + + + + + This flag exists for backward compatibility with older existing spreadsheet files, and is set + to true if this web query was created in Microsoft Excel 97. + This is an optional attribute that can be ignored. + + + + + This flag exists for backward compatibility with older existing spreadsheet files, and is set + to true if this web query was refreshed in a spreadsheet application newer than or equal + to Microsoft Excel 2000. + This is an optional attribute that can be ignored. + + + + + URL to use to refresh external data. + + + + + Flag indicating whether dates should be imported into cells in the worksheet as text rather than dates. + + + + + Flag indicating that XML source data should be imported instead of the HTML table itself. + + + + + Returns or sets the string used with the post method of inputting data into a web server + to return data from a web query. + + + + + Flag indicating whether data contained within HTML PRE tags in the web page is + parsed into columns when you import the page into a query table. + + + + + Flag indicating whether web queries should only work on HTML tables. + + + + + How to handle formatting from the HTML source when bringing web query data into the + worksheet. Relevant when sourceData is True. + + + + + Flag indicating whether to parse all tables inside a PRE block with the same width settings + as the first row. + + + + + The URL of the user-facing web page showing the web query data. This URL is persisted + in the case that sourceData="true" and url has been redirected to reference an XML file. + Then the user-facing page can be shown in the UI, and the XML data can be retrieved + behind the scenes. + + + + + The URL of the user-facing web page showing the web query data. This URL is persisted + in the case that sourceData="true" and url has been redirected to reference an XML file. + Then the user-facing page can be shown in the UI, and the XML data can be retrieved + behind the scenes. + + + NOTE: This property is now obsolete. Instead, + please use WebQueryConnection.EditWebPage property. + This property will be removed 12 months later since October 2017. + Aspose apologizes for any inconvenience you may have experienced. + + + + Flag indicating whether consecutive delimiters should be treated as just one delimiter. + + + + + Specifies external database source type + + + + + ODBC-based source + + + + + DAO-based source + + + + + File based database source + + + + + Web query + + + + + OLE DB-based source + + + + + Text-based source + + + + + ADO record set + + + + + DSP + + + + + OLE DB data source created by the Spreadsheet Data Model. + + + + + Data feed data source created by the Spreadsheet Data Model. + + + + + Worksheet data source created by the Spreadsheet Data Model. + + + + + Worksheet data source created by the Spreadsheet Data Model. + + NOTE: This member is now obsolete. Instead, + please use WorksheetDataModel enum. + This property will be removed 12 months later since September 2017. + Aspose apologizes for any inconvenience you may have experienced. + + + + Text data source created by the Spreadsheet Data Model. + + + + + Text data source created by the Spreadsheet Data Model. + + + + + Specifies properties about any parameters used with external data connections + Parameters are valid for ODBC and web queries. + + + + + SQL data type of the parameter. Only valid for ODBC sources. + + + + + Flag indicating whether the query should automatically refresh when the contents of a + cell that provides the parameter value changes. If true, then external data is refreshed + using the new parameter value every time there's a change. If false, then external data + is only refreshed when requested by the user, or some other event triggers refresh (e.g., workbook opened). + + + + + Prompt string for the parameter. Presented to the spreadsheet user along with input UI + to collect the parameter value before refreshing the external data. Used only when + parameterType = prompt. + + + + + Type of parameter used. + If the parameterType=value, then the value from boolean, double, integer, + or string will be used. In this case, it is expected that only one of + {boolean, double, integer, or string} will be specified. + + + + + The name of the parameter. + + + + + Cell reference indicating which cell's value to use for the query parameter. Used only when parameterType is cell. + + + + + Non-integer numeric value,Integer value,String value or Boolean value + to use as the query parameter. Used only when parameterType is value. + + + + + Specifies the collection + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element with the specified name. + + connection parameter name + The element with the specified name. + + + + Specifies the parameter type of external connection + + + + + Get the parameter value from a cell on each refresh. + + + + + Prompt the user on each refresh for a parameter value. + + + + + Use a constant value on each refresh for the parameter value. + + + + + Specifies Credentials method used for server access. + + + + + Integrated Authentication + + + + + No Credentials + + + + + Prompt Credentials + + + + + Stored Credentials + + + + + Specifies how to handle formatting from the HTML source + + + + + Transfer all HTML formatting into the worksheet along with data. + + + + + Bring data in as unformatted text (setting data types still occurs). + + + + + Translate HTML formatting to rich text formatting on the data brought into the worksheet. + + + + + Specifies the OLE DB command type. + + + + + The command type is not specified. + + + + + Specifies a cube name + + unsupported + + + + Specifies a SQL statement + + + + + Specifies a table name + + + + + Specifies that default information has been given, and it is up to the provider how to interpret. + + unsupported + + + + Specifies a query which is against a web based List Data Provider. + + unsupported + + + + Specifies what the spreadsheet application should do when a connection fails. + + + + + On refresh use the existing connection information and if it ends up being invalid + then get updated connection information, if available from the external connection file. + + + + + On every refresh get updated connection information from the external connection file, + if available, and use that instead of the existing connection information. + In this case the data refresh will fail if the external connection file is unavailable. + + + + + Never get updated connection information from the external connection file + even if it is available and even if the existing connection information is invalid + + + + + Specifies SQL data type of the parameter. Only valid for ODBC sources. + + + + + sql unsigned offset + + + + + sql signed offset + + + + + sql guid + + + + + sql wide long variable char + + + + + sql wide variable char + + + + + sql wide char + + + + + sql bit + + + + + sql tiny int + + + + + sql big int + + + + + sql long variable binary + + + + + sql variable binary + + + + + sql binary + + + + + sql long variable char + + + + + sql unknown type + + + + + sql char + + + + + sql numeric + + + + + sql decimal + + + + + sql integer + + + + + sql small int + + + + + sql float + + + + + sql real + + + + + sql double + + + + + sql date type + + + + + sql time type + + + + + sql timestamp type + + + + + sql variable char + + + + + sql interval year + + + + + sql interval month + + + + + sql interval day + + + + + sql interval hour + + + + + sql interval minute + + + + + sql interval second + + + + + sql interval year to month + + + + + sql interval day to hour + + + + + sql interval day to minute + + + + + sql interval day to second + + + + + sql interval hour to minute + + + + + sql interval hour to second + + + + + sql interval minute to second + + + + + Contains all classes of external connections. + + + + + Represents the directory type of the file name. + + + + + Represents an MS-DOS drive letter. It is followed by the drive letter. + Or UNC file names, such as \\server\share\myfile.xls + + + + + Indicates that the source workbook is on the same drive as the dependent workbook (the drive letter is omitted) + + + + + Indicates that the source workbook is in a subdirectory of the current directory. + + + + + Indicates that the source workbook is in the parent directory of the current directory. + + + + + Represents an external link in a workbook. + + + + + [C#] + + //Open a file with external links + Workbook workbook = new Workbook("d:\\book1.xls"); + + //Get External Link + ExternalLink externalLink = workbook.Worksheets.ExternalLinks[0]; + + //Change External Link's Data Source + externalLink.DataSource = "d:\\link.xls"; + + [VB.NET] + + 'Open a file with external links + Dim workbook As New Workbook("d:\book1.xls") + + 'Get External Link + Dim externalLink As ExternalLink = workbook.Worksheets.ExternalLinks(0) + + 'Change External Link's Data Source + externalLink.DataSource = "d:\link.xls" + + + + + + Gets the type of external link. + + + + + Represents stored data source of the external link. + + + + + Represents data source of the external link. + + + + + Adds an external name. + + The text of the external name. + If the external name belongs to a worksheet, the text should be as Sheet1!Text. + + The referTo of the external name. It must be a cell or the range. + + + + Indicates whether this external link is referenced by others. + + + + + Indicates whether this external link is visible in MS Excel. + + + + + Represents external links collection in a workbook. + + + + [C#] + //Open a file with external links + Workbook workbook = new Workbook("d:\\book1.xls"); + + //Change external link data source + workbook.Worksheets.ExternalLinks[0].DataSource = "d:\\link.xls"; + + + [Visual Basic] + 'Open a file with external links + Dim workbook As Workbook = New Workbook("d:\\book1.xls") + + 'Change external link data source + workbook.Worksheets.ExternalLinks(0).DataSource = "d:\\link.xls" + + + + + + Gets the number of elements actually contained in the collection. + + + + + Adds an external link. + + The external file name. + All sheet names of the external file. + The position of the external name in this list. + + + + Add an external link . + + The directory type of the file name. + the file name. + All sheet names of the external file. + The position of the external name in this list. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Represents the type of external link. + + + + + Represents the DDE link. + + + + + Represents external link. + + + + + Represents the type of target mode. + + + + + External link + + + + + Local and full paths to files or folders. + + + + + Email. + + + + + Link on cell or named range. + + + + + Contains data returned by file format detection methods. + + + + + Gets whether the file is protected by Microsoft Rights Management Server. + + + + + Returns true if the document is encrypted and requires a password to open. + + + + + Gets the detected file format. + + + + + Gets the detected load format. + + + + + Represents the file format types. + + + + + Comma-Separated Values(CSV) text file. + + + + + Comma-Separated Values(CSV) text file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Office Open XML SpreadsheetML file (macro-free). + + + + + Office Open XML SpreadsheetML Macro-Enabled file. + + + + + Office Open XML SpreadsheetML Template (macro-free). + + + + + Office Open XML SpreadsheetML Macro-Enabled Template. + + + + + Office Open XML SpreadsheetML addinMacro-Enabled file. + + + + + Tab-Separated Values(TSV) text file. + + + + + Tab-Separated Values(TSV) text file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Tab-Separated Values(TSV) text file, same with . + + + + + HTML format. + + + + + MHTML (Web archive) format. + + + + + Open Document Sheet(ODS) file. + + + + + Open Document Sheet(ODS) file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Excel97-2003 spreadsheet file. + + + + + Excel 2003 SpreadsheetML file. + + + + + Excel 2003 SpreadsheetML file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + The Excel Binary File Format (.xlsb) + + + + + Represents unrecognized format, cannot be loaded. + + + + + PDF (Adobe Portable Document) format. + + + + + XPS (XML Paper Specification) format. + + + + + XPS (XML Paper Specification) format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a TIFF file. + + + + + Represents a TIFF file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + SVG file. + + + + + SVG file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an Excel95 xls file. + + + + + Represents an Excel4.0 xls file. + + + The file format is not supported + + + + + Represents an Excel3.0 xls file. + + + The file format is not supported + + + + + Represents an Excel2.1 xls file. + + + The file format is not supported + + + + + Represents a pptx file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a docx file. + + + The file format is not supported + Only for detecting file type. + + + + + Data Interchange Format. + + + + + Represents a doc file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a ppt file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a email file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents the MS Equation 3.0 object. + + + The file format is not supported + Only for detecting file type. + + + + + Represents the MS Equation 3.0 object. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents the embedded native object. + + + The file format is not supported + Only for detecting file type. + + + + + Represents MS Visio VSD binary format. + + + The file format is not supported + Only for detecting file type. + + + + + Represents MS Visio VSD binary format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents MS Visio 2013 VSDX file format. + + + The file format is not supported + Only for detecting file type. + + + + + Represents MS Visio 2013 VSDX file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a docm file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a dotx file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a dotm file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a pptm file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a Potx file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a Potm file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a ppsx file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a ppsm file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents office open xml file(such as xlsx, docx,pptx, etc). + + + The file format is not supported + Only for detecting file type. + If the office open xml file is encrypted, it could not be detected as xlsx ,docx, pptx,etc. + + + + + Represents an ODT file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents an ODT file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a ODP file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents an ODP file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an ODF file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents an ODF file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an ODG file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents an ODG file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a simple xml file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents a simple xml file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Excel97-2003 spreadsheet template. + + + + + Represents an OTT file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents an OTT file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a BMP file. + + + The file format is not supported + Only for detecting file type. + + + + + Represents an BMP file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an ots file. + + + + + Represents an OTS file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents Numbers 9.0 file format by Apple Inc + + + + + Represents Numbers 9.0 file format by Apple Inc + + + + + Represents markdown document. + + + + + Represents embedded graph chart. + + + + + Represents OpenDocument Flat XML Spreadsheet (.fods) file format. + + + + + Represents OpenDocument Flat XML Spreadsheet (.fods) file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents StarOffice Calc Spreadsheet (.sxc) file format. + + + + + Represents StarOffice Calc Spreadsheet (.sxc) file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a OTP file. + + + The file format is not supported. + Only for detecting file type. + + + + + Represents a OTP file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents Numbers 3.5 file format since 2014 by Apple Inc + + + The file format is not supported. + Only for detecting file type. + + + + + Represents the single TrueType font file stored in the file system. + + + + + Ctor. + + path to font file + + + + Path to font file. + + + + + Returns the type of the font source. + + + + + Represents the folder that contains TrueType font files. + + + + + Ctor. + + path to fonts folder + Determines whether or not to scan subfolders. + + + + Path to fonts folder. + + + + + Determines whether or not to scan the subfolders. + + + + + Returns the type of the font source. + + + + + Specifies font settings + + + + + Gets or sets the default font name. + + + + + Indicate whether to use system font substitutes first or not when a font is not presented and the substitute of this font is not set. + e.g. On Ubuntu, "Arial" font is generally substituted by "Liberation Sans". + Default value is false. + + + + + Font substitute names for given original font name. + + Original font name. + List of font substitute names to be used if original font is not presented. + + + + Returns array containing font substitute names to be used if original font is not presented. + + originalFontName + An array containing font substitute names to be used if original font is not presented. + + + + Sets the fonts folder + + The folder that contains TrueType fonts. + Determines whether or not to scan subfolders. + + + + Sets the fonts folders + + The folders that contains TrueType fonts. + Determines whether or not to scan subfolders. + + + + Sets the fonts sources. + + An array of sources that contain TrueType fonts. + + + + Gets a copy of the array that contains the list of sources + + + + + + + This is an abstract base class for the classes that allow the user to specify various font sources + + + + + Returns the type of the font source. + + + + + Specifies the type of a font source. + + + + + represents single font file. + + + + + represents folder with font files. + + + + + represents single font in memory. + + + + + Font configs for each object. + + + + + Ctor. + + + + + Font substitute names for given original font name. + + Original font name. + List of font substitute names to be used if original font is not presented. + + + + Returns array containing font substitute names to be used if original font is not presented. + + originalFontName + An array containing font substitute names to be used if original font is not presented. + + + + Sets the fonts folder + + The folder that contains TrueType fonts. + Determines whether or not to scan subfolders. + + + + Sets the fonts folders + + The folders that contains TrueType fonts. + Determines whether or not to scan subfolders. + + + + Sets the fonts sources. + + An array of sources that contain TrueType fonts. + + + + Gets a copy of the array that contains the list of sources + + + + + + + Represents the single TrueType font file stored in memory. + + + + + Ctor. + + Binary font data. + + + + Binary font data. + + + + + Returns the type of the font source. + + + + + Represents all parameters' type or return value type of function. + + + + + + + + + + + + + + + + + Represents user's custom calculation engine to extend the default calculation engine of Aspose.Cells. + + + + [C#] + public class MyEngine : AbstractCalculationEngine + { + public override void Calculate(CalculationData data) + { + string funcName = data.FunctionName.ToUpper(); + if ("MYFUNC".Equals(funcName)) + { + //do calculation for MYFUNC here + int count = data.ParamCount; + object res = null; + for (int i = 0; i < count; i++) + { + object pv = data.GetParamValue(i); + if (pv is ReferredArea) + { + ReferredArea ra = (ReferredArea)pv; + pv = ra.GetValue(0, 0); + } + //process the parameter here + //res = ...; + } + data.CalculatedValue = res; + } + } + } + + + User should not modify any part of the Workbook directly in this implementation(except the calculated result of the custom function, which can be set by CalculationData.CalculatedValue property). + Otherwise unexpected result or Exception may be caused. + If user needs to change other data than calculated result in the implementation for some custom functions, + for example, change cell's formula, style, ...etc., user should gather those data in this implementation and change them out of the scope of formula calculation. + + + + Calculates one function with given data. + + the required data to calculate function such as function name, parameters, ...etc. + User should set the calculated value for given data for all functions(including excel native functions) + that he wants to calculate by himself in this implementation. + + + + + Indicates whether this engine needs the literal text of parameter while doing calculation. Default value is false. + + If this custom calculation engine requires the parameter's literal text, more stacks will be required to cache the literal text for parameters and Calculate() method may be called recursively to calculate the parameter's value. + Commonly the literal text is not needed for calculating formulas and this method should return false for most implementations to get better performance. + + + + + Whether built-in functions that have been supported by the built-in engine should be checked and processed by this implementation. + Default is false. + If user needs to change the calculation logic of some built-in functions, this property should be set as true. + + + + + Monitor for user to track the progress of formula calculation. + + + + [C#] + //Custom monitor to check possibility of StackOverflowException + public class MyCalculationMonitor : AbstractCalculationMonitor + { + public override void BeforeCalculate(int sheetIndex, int rowIndex, int colIndex) + { + if(new StackTrace(false).FrameCount > 1000) + { + throw new Exception("Stop the formula calculation because risk of StackOverflowException"); + } + } + } + + + + + + Gets the old value of the calculated cell. + Should be used only in and . + + + + + Whether the cell's value has been changed after the calculation. + Should be used only in . + + + + + Gets the newly calculated value of the cell. + Should be used only in . + + + + + Implement this method to do business before calculating one cell. + + Index of the sheet that the cell belongs to. + Row index of the cell + Column index of the cell + + + + Implement this method to do business after one cell has been calculated. + + Index of the sheet that the cell belongs to. + Row index of the cell + Column index of the cell + + + + Implement this method to do business when calculating formulas with circular references. + + IEnumerator with CalculationCell items representing cells that + depend on circular references. + Whether the formula engine needs to calculate those cells in circular after this call. + True to let the formula engine continue to do calculation for them. + False to let the formula engine just mark those cells as Calculated. + + In the implementation user may also set the expected value as calculated result + for part/all of those cells so the formula engine will not calculate them recursively. + + + + + Represents the calculation relevant data about one cell which is being calculated. + + All objects provided by this class are for "read" purpose only. + User should not change any data in the Workbook during the formula calculation process, + Otherwise unexpected result or Exception may be caused. + + + + + Sets the calculated value for the cell. + + User can set the calculated result by this method to ignore the automatic calculation for the cell. + + + + Gets the Workbook object. + + + + + Gets the Worksheet object where the cell is in. + + + + + Gets the row index of the cell. + + + + + Gets the column index of the cell. + + + + + Gets the Cell object which is being calculated. + + + + + Represents the required data when calculating one function, such as function name, parameters, ...etc. + + All objects provided by this class are for "read" purpose only. + User should not change any data in the Workbook during the formula calculation process, + Otherwise unexpected result or Exception may be caused. + + + + Gets or sets the calculated value for this function. + + User should set this property in his custom calculation engine for those functions the engine supports, + and the set value will be returned when getting this property later. + The set value can be any value of those objects that can be set to a Cell(Cell.Value). + And it can also be array of such kind of values, or a Range, Name, ReferredArea. + Getting this property before setting will make the function be calculated by the default calculation engine of Aspose.Cells and the calculated value will be returned. + + + + + Gets the Workbook object where the function is in. + + + + + Gets the Worksheet object where the function is in. + + + + + Gets the row index of the cell where the function is in. + + + + + Gets the column index of the cell where the function is in. + + + + + Gets the Cell object where the function is in. + + + + + Gets the function name to be calculated. + + + + + Gets the count of parameters + + + + + Gets the represented value object of the parameter at given index. + + index of the parameter(0 based) + If the parameter is plain value, then returns the plain value. + If the parameter is reference, then returns ReferredArea object. + If the parameter references to multiple datasets, then returns array of objects. + + + + Gets the literal text of the parameter at given index. + + index of the parameter(0 based) + literal text of the parameter + + + + Represents options for calculation. + + + + + Indicates if you need to hide the error in calculating formulas. + The error may be unsupported function, external links, etc. + + + + + The custom formula calculation functions to extend the calculation engine. + + + NOTE: This member is now obsolete. Instead, + please use CustomEngine property, AbstractCalculationEngine provides more convenient and flexible APIs + for manipulating custom functions. + This property will be removed 12 months later since August 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + The custom formula calculation engine to extend the default calculation engine of Aspose.Cells. + + + + + The monitor for user to track the progress of formula calculation. + + + + + Specifies the stack size for calculating cells recursively. + -1 for this property means the calculation will use WorkbookSettings.CalcStackSize of corresponding workbook. + + + + + + Specifies the strategy for processing precision of calculation. + + + + + Indicates whether calculate the dependent cells recursively when calculating one cell and it depends on other cells. + + + + + Enumerates strategies for handling calculation precision. + Because of the precision issue of IEEE 754 Floating-Point Arithmetic, some "seemingly simple" formulas may not be calculated as the expected result. + Such as formula "=-0.45+0.43+0.02", when calculating operands by '+' operator directly, the result is not zero. For such kind of precision issue, + some special strategies may give the expected result. + + + + + No strategy applied on calculation. + When calculating just use the original double value as operand and return the result directly. + Most efficient for performance and applicable for most cases. + + + + + Rounds the calculation result according with significant digits. + + + + + Uses decimal as operands when possible. + Most inefficient for performance. + + + + + Represents options when parsing formula. + + + + + Whether the formula is locale formatted. Default is false. + + + + + Whether the formula is R1C1 reference style. Default is false. + + + + + Whether check addins in existing external links of current workbook for user defined function without external link. + Default is true(if user defined function matches one addin in existing external links, then take it as the addin). + + + + + Whether parse given formula. Default is true. + If it is false, then given formula string will be kept as it is for the cell until user call other methods to parse them + or parsed formula data is required by other operations such as calculating formulas. + + + + + Represents data table. + + + + + + + Gets the columns' name. + + + + + Gets the count of the records. -1 for unknown records count. + + + + + Move the cursor to the front of this object, just before the first row. + + + + + Gets the data stored in the column specified by index. + + The zero-based index of the column. + + + + + + Gets the data stored in the column specified by column name. + + The column name. + + + + + + Moves the cursor down one row from its current position. + + if the new current row is valid; false if there are no more rows + + + + Provides the abstract base class for a strongly typed collection. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Remove all elements. + + + + + Removes the element at the specified index. + + + + + + + Gets or sets the number of elements that the list can contain. + + + + + Gets the number of elements. + + + + + Gets or sets the element at the specified index. + + + + + + + + + Represents the globalization settings. + + + + + Gets the name of "Total" label in the PivotTable. + You need to override this method when the PivotTable contains two or more PivotFields in the data area. + + The name of "Total" label + + + + Gets the name of "Grand Total" label in the PivotTable. + + The name of "Grand Total" label + + + + Gets the name of "(Multiple Items)" label in the PivotTable. + + The name of "(Multiple Items)" label + + + + Gets the name of "(All)" label in the PivotTable. + + The name of "(All)" label + + + + Gets the name of "Column Labels" label in the PivotTable. + + The name of column labels + + NOTE: This member is now obsolete. Instead, + please use GlobalizationSettings.GetColumnLabelsOfPivotTable() method. + This property will be removed 12 months later since September 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets the name of "Row Labels" label in the PivotTable. + + The name of row labels + + NOTE: This member is now obsolete. Instead, + please use GlobalizationSettings.GetRowLabelsOfPivotTable() method. + This property will be removed 12 months later since September 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets the protection name in the PivotTable. + + The protection name of PivotTable + + + + Gets the name of "Column Labels" label in the PivotTable. + + The name of column labels + + + + Gets the name of "Row Labels" label in the PivotTable. + + The name of row labels + + + + Gets the name of "(blank)" label in the PivotTable. + + The name of empty data + + + + Gets the name of type in the PivotTable. + + The type + The name of type + + + + Gets the total name of the function. + + The function type. + The total name of the function. + + + + Gets the grand total name of the function. + + The function type. + The grand total name of the function. + + + + Gets the name of "Other" labels for Pie charts. + + + + + + + Gets the type name of table rows that consists of the table header. + Default is "Headers": "#Headers" denotes the table header. + + the type name of table rows + + + + Gets the type name of table rows that consists of data region of referenced table. + Default is "Data": "#Data" denotes the data region of the table. + + the type name of table rows + + + + Gets the type name of table rows that consists of all rows in referenced table. + Default is "All": "#All" denotes all rows in referenced table. + + the type name of table rows + + + + Gets the type name of table rows that consists of the total row of referenced table. + Default is "Totals": "#Totals" denotes the total row of referenced table. + + the type name of table rows + + + + Gets the type name of table rows that consists of the current row in referenced table. + Default is "This Row": "#This Row" denotes the current row in referenced table. + + the type name of table rows + + + + Gets the display string value for cell's error value + + error values such as #VALUE!,#NAME? + Default returns the error value itself + + + + Gets the display string value for cell's boolean value + + boolean value + Default returns "TRUE" for true value and "FALSE" for false value. + + + + Gets the locale dependent function name according to given standard function name. + + Standard(en-US locale) function name. + Locale dependent function name. The locale was specified by the Workbook for which this settings is used. + + + + Gets the standard function name according to given locale dependent function name. + + Locale dependent function name. The locale was specified by the Workbook for which this settings is used. + Standard(en-US locale) function name. + + + + Gets the locale dependent text for built-in Name according to given standard text. + + Standard(en-US locale) text of built-in Name. + Locale dependent text. The locale was specified by the Workbook for which this settings is used. + + + + Gets the standard text of built-in Name according to given locale dependent text. + + Locale dependent text of built-in Name. The locale was specified by the Workbook for which this settings is used. + Standard(en-US locale) text. + + + + Gets the separator for list, parameters of function, ...etc. + + + + + Gets the separator for rows in array data in formula. + + + + + Gets the separator for the items in array's row data in formula. + + + + + Gets standard English font style name(Regular, Bold, Italic) for Header/Footer according to given locale font style name. + + Locale font style name for Header/Footer. + Standard English font style name(Regular, Bold, Italic) + + + + Transforms the string into a comparable object according to certain collation rules. + + String value needs to be compared with others. + whether ignore case when comparing values + Object can be used to compare or sort string values + + + + Compares two string values according to certain collation rules. + + the first string + the second string + whether ignore case when comparing values + Integer that indicates the lexical relationship between the two comparands + + + + Provides helper functions. + + + + + Gets and sets the number of significant digits. + The default value is 17. + + + Only could be 15 or 17 now. + + + + + Gets the DPI of the machine. + + + + + + + Get width of text in unit of points. + + The text. + The font of the text. + The scaling of text. + + + + + + Get the release version. + + The release version. + + + + Gets the cell row and column indexes according to its name. + + Name of cell. + Output row index + Output column index + + + + Gets cell name according to its row and column indexes. + + Row index. + Column index. + Name of cell. + + + + Gets column name according to column index. + + Column index. + Name of column. + + + + Gets column index according to column name. + + Column name. + Column index. + + + + Gets row name according to row index. + + Row index. + Name of row. + + + + Gets row index according to row name. + + Row name. + Row index. + + + + Converts the r1c1 formula of the cell to A1 formula. + + The r1c1 formula. + The row index of the cell. + The column index of the cell. + The A1 formula. + + + + Converts A1 formula of the cell to the r1c1 formula. + + The A1 formula. + The row index of the cell. + The column index of the cell. + The R1C1 formula. + + + + Convert the double value to the date time value. + + The double value. + Date 1904 system. + + + + + + Convert the date time to double value. + + The date time. + Date 1904 system. + + + + + + Gets or sets the startup path, which is referred to by some external formula references. + + + + + Gets or sets the alternate startup path, which is referred to by some external formula references. + + + + + Gets or sets the library path which is referred to by some external formula references. + + + + + Gets all used colors in the workbook. + + The workbook object. + The used colors. + + + + Gets or sets the factory for creating instances with special implementation. + + + + + Add addin function. + + The function name. + Minimum number of parameters this function requires + Maximum number of parameters this function allows. + The excepted parameters type of the function + The function value type. + + + + Merges some large xls files to a xls file. + + The files. + The cached file. + The dest file. + + This method only supports merging data, style and formulas to the new file. + The cached file is used to store some temporary data. + + + + + Checks given sheet name and create a valid one when needed. + If given sheet name conforms to the rules of excel sheet name, then return it. + Otherwise string will be truncated if length exceeds the limit + and invalid characters will be replaced with ' ', then return the rebuilt string value. + + sheet name to be used + + + + + + Checks given sheet name and create a valid one when needed. + If given sheet name conforms to the rules of excel sheet name, then return it. + Otherwise string will be truncated if length exceeds the limit + and invalid characters will be replaced with given character, then return the rebuilt string value. + + sheet name to be used + character which will be used to replace invalid characters in given sheet name + + + + + + Do the initialization for .NetCore programme. + We suggest you to call this method for all .NetCore initialization first. + For example: + CellsHelper.InitForDotNetCore(); + Workbook wb = new Workbook(); + + + + + Please set this property True when running on a cloud platform, such as: Azure, AWSLambda, etc, + + + + + Provides utility methods for converting file format enums to strings or file extensions and back. + + + + + Detects and returns the information about a format of an excel stored in a stream. + + + + A object that contains the detected information. + + + + Detects and returns the information about a format of an excel stored in a stream. + + + + The password for encrypted ooxml files. + A object that contains the detected information. + + + + Detects and returns the information about a format of an excel stored in a stream. + + + + The password for encrypted ooxml files. + Returns whether the password is corrected. + + + + Detects and returns the information about a format of an excel stored in a file. + + The file path. + A object that contains the detected information. + + + + Detects and returns the information about a format of an excel stored in a file. + + The file path. + The password for encrypted ooxml files. + A object that contains the detected information. + + + + Converting file format to save format. + + The file format type. + + + + + + Converts a file name extension into a SaveFormat value. + + The file extension. Can be with or without a leading dot. Case-insensitive. + + + If the extension cannot be recognized, returns . + + + + Returns true if the extension is .xlt, .xltX, .xltm,.ots. + + + + + + + + + Converts a load format enumerated value into a file extension. + + The loaded file format. + The returned extension is a lower-case string with a leading dot. + If it can not be converted, returns null. + + + + Converts a LoadFormat value to a SaveFormat value if possible. + + The load format. + The save format. + + + + Converts a save format enumerated value into a file extension. + + The save format. + The returned extension is a lower-case string with a leading dot. + + + + Converts a SaveFormat value to a LoadFormat value if possible. + + The save format. + The load format + + + + Represents the setting of the subtotal . + + + + + The field to group by, as a zero-based integer offset + + + + + The subtotal function. + + + + + An array of zero-based field offsets, indicating the fields to which the subtotals are added. + + + + + Indicates whether add summary below data. + + + + + Encapsulates the object that represents a hyperlink. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Adding a new worksheet to the Workbook object + workbook.Worksheets.Add(); + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[0]; + //Adding a hyperlink to a URL at "A1" cell + worksheet.Hyperlinks.Add("A1", 1, 1, "http://www.aspose.com"); + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Adding a new worksheet to the Workbook object + workbook.Worksheets.Add() + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(0) + 'Adding a hyperlink to a URL at "A1" cell + worksheet.Hyperlinks.Add("A1", 1, 1, "http://www.aspose.com") + 'Saving the Excel file + workbook.Save("C:\book1.xls") + + + + + + Represents the address of a hyperlink. + + + + + Represents the text to be displayed for the specified hyperlink. The default value is the address of the hyperlink. + + + + + Gets the range of hyperlink. + + + + + Returns or sets the ScreenTip text for the specified hyperlink. + + + + + Gets the link type. + + + + + Deletes this hyperlink + + + + + Encapsulates a collection of objects. + + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[0]; + + //Get Hyperlinks Collection + HyperlinkCollection hyperlinks = worksheet.Hyperlinks; + + //Adding a hyperlink to a URL at "A1" cell + hyperlinks.Add("A1", 1, 1, "http://www.aspose.com"); + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Get Hyperlinks Collection + Dim hyperlinks As HyperlinkCollection = worksheet.Hyperlinks + + 'Adding a hyperlink to a URL at "A1" cell + hyperlinks.Add("A1", 1, 1, "http://www.aspose.com") + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + Adds a hyperlink to a specified cell or a range of cells. + + First row of the hyperlink range. + First column of the hyperlink range. + Number of rows in this hyperlink range. + Number of columns of this hyperlink range. + Address of the hyperlink. + + object index. + + + [C#] + + Worksheet worksheet = excel.Worksheets[0]; + worksheet.Hyperlinks.Add("A4", 1, 1, "http://www.aspose.com"); + worksheet.Hyperlinks.Add("A5", 1, 1, "c:\\book1.xls"); + + [Visual Basic] + + Dim worksheet as Worksheet = excel.Worksheets(0) + worksheet.Hyperlinks.Add("A4", 1, 1, "http://www.aspose.com") + worksheet.Hyperlinks.Add("A5", 1, 1, "c:\\book1.xls") + + + + + + + Adds a hyperlink to a specified cell or a range of cells. + + Cell name. + Number of rows in this hyperlink range. + Number of columns of this hyperlink range. + Address of the hyperlink. + + object index. + + + + Adds a hyperlink to a specified cell or a range of cells. + + The top-left cell of the range. + The bottom-right cell of the range. + Address of the hyperlink. + The text to be displayed for the specified hyperlink. + The screenTip text for the specified hyperlink. + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Remove the hyperlink at the specified index. + + The zero based index of the element. + + + + Clears all hyperlinks. + + + + + Allows users to add their custom formula calculation functions to extend the calculation engine. + + + User should not modify any part in the Workbook directly in this implementation. + Otherwise unexpected result or Exception may be caused. + + NOTE: This member is now obsolete. Instead, + please use AbstractCalculationEngine which provides more convenient and flexible APIs + for manipulating custom functions. + This interface will be removed 12 months later since August 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Calculates the result of custom function. + + InnerCustom function name, such as "MyFunc1". + A list of parameters value for custom functions. + A list of context objects. + Result of custom function. + Currently there are 3 fixed context objects and some varialbe context objects: +

1. Current Workbook object.

2. Current Worksheet object.

3. Current Cell object.

Others are custom function parameters text.

+ If a custom function name is not supported, please return a null reference.
+
+ + + Allows users to add their custom value parser for parsing string values to other proper cell value object. + + + + + Parses given string to proper value object. + + The string value to be parsed + + Parsed value object from given string. If given string cannot be parsed to proper value object, returns null. + + + + + Gets the formatting pattern corresponding to the parsed value by last invocation of . + + + The returned formatting pattern may be used to format corresponding cell(set to Style.Custom for the cell). + + + + + Represents the options of importing data into cells. + + + + + Creates the default importing options. + + + + + Indicates whether apply the style of the grid view to cells. + + + + + Gets or sets a value that indicates whether the string value should be converted to numeric or date value. + + + + + Indicates whether new rows should be added for importing data records. + + + + + Indicates whether shifting the first row down when inserting rows. + + + + + Indicates whether field name should be imported. + + + + + Gets or sets date format string for cells with imported datetime values. + + + + + Gets or sets the number formats + + + + + Indicates whether the data are formulas. + + + + + Gets or sets total row count to import from data source. -1 means all rows of given data source. + + + + + Gets or sets total column count to import from data source. -1 means all rows of given data source. + + + + + Gets or sets the columns(0-based) to import from data source. null means all columns should be imported. + + + + + Default value for the value in the table is null. + + + + + Indicates whether the value contains html tags. + + + + + Indicates whether checking merged cells. + + + + + Represents all operator about the interrupt. + + + + + Interrupt the current operator. + + + + + Callback interface of warning. + + + + + Our callback only needs to implement the "Warning" method. + + warning info + + + + Provides methods to license the component. + + + In this example, an attempt will be made to find a license file named MyLicense.lic + in the folder that contains + + + the component, in the folder that contains the calling assembly, + in the folder of the entry assembly and then in the embedded resources of the calling assembly. + + [C#] + + License license = new License(); + license.SetLicense("MyLicense.lic"); + + + [Visual Basic] + + Dim license As license = New license + License.SetLicense("MyLicense.lic") + + + + + Initializes a new instance of this class. + + + In this example, an attempt will be made to find a license file named MyLicense.lic + in the folder that contains + + + the component, in the folder that contains the calling assembly, + in the folder of the entry assembly and then in the embedded resources of the calling assembly. + + [C#] + + License license = new License(); + license.SetLicense("MyLicense.lic"); + + + [Visual Basic] + + Dim license As license = New license + License.SetLicense("MyLicense.lic") + + + + + Licenses the component. + + +

Tries to find the license in the following locations:

+

1. Explicit path.

+

2. The folder that contains the Aspose component assembly.

+

3. The folder that contains the client's calling assembly.

+

4. The folder that contains the entry (startup) assembly.

+

5. An embedded resource in the client's calling assembly.

+

+ Note:On the .NET Compact Framework, tries to find the license only in these locations:

+

1. Explicit path.

+

2. An embedded resource in the client's calling assembly.

+
+ + In this example, an attempt will be made to find a license file named MyLicense.lic + in the folder that contains + + + the component, in the folder that contains the calling assembly, + in the folder of the entry assembly and then in the embedded resources of the calling assembly. + + [C#] + + License license = new License(); + license.SetLicense("MyLicense.lic"); + + + [Visual Basic] + + Dim license As License = New License + license.SetLicense("MyLicense.lic") + Can be a full or short file name or name of an embedded resource. + Use an empty string to switch to evaluation mode. +
+ + + Licenses the component. + + A stream that contains the license. + +

Use this method to load a license from a stream.

+
+ + + [C#] + + License license = new License(); + license.SetLicense(myStream); + + + [Visual Basic] + + Dim license as License = new License + license.SetLicense(myStream) + + +
+ + + Represents cells data handler for reading large spreadsheet files in light weight mode. + + + When reading a workbook by this mode, will be checked when reading every worksheet in the workbook. + For one sheet, if gives true, then all data and properties of rows/cells of this sheet will be checked + and processed by the implementation of this interface. For every row, will be called to check whether it need to be processed. + If a row needs to be processed, properties of this row will be read firstly and user can access its properties by . + if row's cells need to be processed too, then should returns true and then will be + called for every existing cell in this row to check whether one cell need to be processed. If one cell needs to be processed, + then will be called to process the cell by the implementation of this interface. + + + + + Starts to process a worksheet. + + + It will be called before reading cells data of a worksheet. + + the worksheet to read cells data. + + whether this sheet's cells data needs to be processed. false to ignore this sheet. + + + + + Prepares to process a row. + + the index of next row to be processed + whether this row(properties or cells data) needs to be processed. false to ignore this row and its cells and check the next row. + + + + Starts to process one row. + + + It will be called after row's properties such as height, style, ...etc. have been read. However, cells in this row has not been read yet. + + + Row object which is being processed currently. + + whether this row's cells need to be processed. false to ignore all cells in this row. + + + + Prepares to process a cell. + + + It will be called when reaching an existing cell in current row. Current row is the row of last call of . + + column index of the cell to be processed + whether this cell needs to be processed. false to ignore the cell and check the next one until reach the end of cells data of current row + + + + Starts to process one cell. + + + It will be called after one cell's data has been read. + + + Cell object which is being processed currently + + whether this cell needs to be kept in cells model of current sheet. + Commonly it should be false so that all cells will not be kept in memory after being processed and then memory be saved. + For some special purpose such as user needs to access some cells later after the whole workbook having been processed, + user can make this method return true to keep those special cells in Cells model and access them later by APIs such as Cells[row, column]. + However, keeping cells data in Cells model will requires more memory and if all cells are kept then reading template file + in LightCells mode will become same with reading it in normal way. + + + + Represents Data provider for saving large spreadsheet files in light weight mode. + + + When saving a workbook by this mode, will be checked when saving every worksheet in the workbook. + For one sheet, if gives true, then all data and properties of rows/cells of this sheet to be saved + will be provided by the implementation of this interface. In the first place, will be called to get the next row index to be saved. + If a valid row index is returned(the row index must be in ascending order for the rows to be saved), + then a Row object representing this row will be provided for implementation to set its properties by . + For one row, will be checked firstly. If a valid column index be returned(the column index must be in ascending order for all cells of one row to be saved), + then a Cell object representing this cell will be provided for implementation to set its data and properties by . + After data of this cell is set, this cell will be saved directly to the generated spreadsheet file and the next cell will be checked and processed. + + + + + Starts to save a worksheet. + + + It will be called at the beginning of saving a worksheet during saving a workbook. + If the provider needs to refer to sheetIndex later + in startRow(Row) or startCell(Cell) method, + that is, if the process needs to know which worksheet is being processed, + the implementation should retain the sheetIndex value here. + + index of current sheet to be saved. + + true if this provider will provide data for the given sheet; false if given sheet should use its normal data model(Cells). + + + + + Gets the next row to be saved. + + + It will be called at the beginning of saving a row and its cells data(before ). + + + the next row index to be saved. -1 means the end of current sheet data has been reached and no further row of current sheet to be saved. + + + + + Starts to save data of one row. + + + It will be called at the beginning of saving a row and its cells data. + If current row has some custom properties such as height, style, ...etc., + implementation should set those properties to given Row object here. + + + Row object for implementation to fill data. Its row index is the returned value of latest call of . + If the row has been initialized in the inner cells model, the existing row object will be used. + Otherwise a temporary Row object will be used for implementation to fill data. + + + + + Gets next cell to be saved. + + + It will be called at the beginning of saving one cell. + + + column index of the next cell to be saved. -1 means the end of current row data has been reached and no further cell of current row to be saved. + + + + + Starts to save data of one cell. + + + + + Cell object for implementation to fill data. Its column index is the returned value of latest call of . + If the cell has been initialized in the inner cells model, the existed cell object will be used. + Otherwise a temporary Cell object will be used for implementation to fill data. + + + + + Checks whether the current string value of cell needs to be gathered into a global pool. + + + Gathering string values will take advantage only when there are many duplicated string values for the cells provided by this implementation. + In this situation gathering string will save much memory and generate smaller resultant file. + If there are many string values for the cells provided by LightCellsDataProvider but few of them are same, + gathering string will cost more memory and time and has no advantage for the resultant file. + + + true if string value need to be gathered into a global pool for the resultant file. + + + + + Common options for loading text values + + + + + Gets and sets the default encoding. Only applies for csv file. + + + + + Indicates the strategy to apply style for parsed values when converting string value to number or datetime. + + + + + Gets or sets a value that indicates whether the string in text file is converted to numeric data. + + + + + Gets or sets a value that indicates whether the string in text file is converted to date data. + + + + + Indicates whether not parsing a string value if the length is 15. + + + + + Represents options when importing a html file. + + + + + Creates an options of loading the file. + + + + + Creates an options of loading the file. + + The loading format. + + + + The directory that the attached files will be saved to. + + + NOTE: This member is now obsolete. Instead, + please use HtmlLoadOptions.StreamProvider property. + This property will be removed 12 months later since December 2014. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates whether importing formulas if the original html file contains formulas + + + + + Indicates whether support the layout of <div> tag when the html file contains <div> tags. The default value is false. + + + + + Indicates whether delete redundant spaces when the text wraps lines using <br>tag.The default value is false. + + + + + Indicates whether auto-fit columns and rows. The default value is false. + + + + + if true, convert string to formula when string value starts with character '=',the default value is false. + + + + + Gets or sets the StreamProviderImportHtmlFile for importing objects. + + + + + Gets the program id of creating the file. + Only for MHT files. + + + + + Represents the options to filter data when loading workbook from template. + + + + + Load nothing for sheet data + + + NOTE: This member is now obsolete and please use Structure instead. + This property will be removed 12 months later since December 2017. + Aspose apologizes for any inconvenience you may have experienced. + + + + Load all + + + + + Load cells whose value is blank + + + + + Load cells whose value is string + + + + + Load cells whose value is numeric(including datetime) + + + + + Load cells whose value is error + + + + + Load cells whose value is bool + + + + + Load cells value(all value types) only + + + + + Load cell formulas. + + + Generally defined Name objects(DefinedNames) also need to be loaded when loading formulas because they may be referenced by formulas. + So Formula or CellData option should work with DefinedNames option together(Formula|DefinedNames or CellData|DefinedNames) for most scenarios. + + + + + Load cells data including values, formulas and formatting + + + + + Load charts + + + + + Load shapes + + + NOTE: This member is now obsolete and please use Drawing instead. + This property will be removed 12 months later since November 2019. + Aspose apologizes for any inconvenience you may have experienced. + + + + Drawing objects(including Chart, Picture, OleObject and all other drawing objects) + + + + + Load merged cells + + + + + Load conditional formatting + + + + + Load data validations + + + + + Load pivot tables + + + + + Load tables + + + + + Load hyperlinks + + + + + Load settings for worksheet + + + + + Load all data of worksheet, such as cells data, settings, objects, ...etc. + + + + + Load settings for workbook + + + + + Load settings for workbook and worksheet + + + + + Load XmlMap + + + + + Load structure of the workbook + + + + + Load document properties + + + + + Load defined Name objects + + + + + Load VBA projects + + + + + Load styles for cell formatting + + + + + Load pictures + + + + + Load OleObjects + + + + + Represents the filter that provides options for loading data when loading workbook from template. + + + User may specify the filter options or implement their own LoadFilter to specify how to load data. + + + The following example shows how to determine the filter options according to worksheet's properties. + + [C#] + Workbook wb = new Workbook(template, new LoadOptions() { LoadFilter = new LoadFilterSheet() }); + //Custom LoadFilter implementation + class LoadFilterSheet : LoadFilter + { + public override void StartSheet(Worksheet sheet) + { + if (sheet.Name == "Sheet1") + { + LoadDataFilterOptions = Aspose.Cells.LoadDataFilterOptions.All; + } + else + { + LoadDataFilterOptions = Aspose.Cells.LoadDataFilterOptions.None; + } + } + } + + + + + Constructs one LoadFilter with default filter options LoadDataFilterOptions.All. + + + + + Constructs one LoadFilter with given filter options. + + the default filter options + + + + The filter options to denote what data should be loaded. + + + + + Specifies the sheets(indices) and order to be loaded. + Default is null, that denotes to load all sheets in the default order in template file. + If not null and some sheet's index is not in the returned array, then the sheet will not be loaded. + + + + + Prepares filter options before loading given worksheet. + User's implementation of LoadFilter can change the LoadDataFilterOptions here + to denote how to load data for this worksheet. + + The worksheet to be loaded. + There are only few properties can be used for the given worksheet object here + because most data and properties have not been loaded. The available properties are: + Name, Index, VisibilityType + + + + Represents the load file format. + + + + + Represents recognizing the format automatically. + + + + + Comma-Separated Values(CSV) text file. + + + + + Comma-Separated Values(CSV) text file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents Office Open XML spreadsheetML workbook or template, with or without macros. + + + + + Tab-Separated Values(TSV) text file. + + + + + Tab-Separated Values(TSV) text file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a tab delimited text file, same with . + + + + + Represents a html file. + + + + + Represents a mhtml file. + + + + + Open Document Sheet(ODS) file. + + + + + Open Document Sheet(ODS) file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an Excel97-2003 xls file. + + + + + Represents an Excel 2003 xml file. + + + + + Represents an xlsb file. + + + + + Represents a numbers file. + + + + + Represents OpenDocument Flat XML Spreadsheet (.fods) file format. + + + + + Represents OpenDocument Flat XML Spreadsheet (.fods) file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents StarOffice Calc Spreadsheet (.sxc) file format. + + + + + Represents StarOffice Calc Spreadsheet (.sxc) file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents unrecognized format, cannot be loaded. + + + + + Represents the options of loading the file. + + + + + Gets the load format. + + + + + Creates an options of loading the file. + + + + + Creates an options of loading the file. + + The loading format. + + + + Gets and set the password of the workbook. + + + + + Indicates whether parsing the formula when reading the file. + + + Only applies for Excel Xlsx, Xltx, Xltm and Xlsm file + because the formulas in the files are stored with a string formula. + + + + + Indicates whether parsing pivot cached records when loading the file. + The default value is false. + + + Only applies for Excel Xlsx, Xltx, Xltm , Xlsm and xlsb file + + + + Sets the default print paper size from default printer's setting. + + The default paper size. + + If there is no setting about paper size,MS Excel will use default printer's setting. + + + + + Gets or sets the user interface language of the Workbook version based on CountryCode that has saved the file. + + + + + Gets or sets the system regional settings based on CountryCode at the time the file was loaded. + + If you do not want to use the region saved in the file, + please reset it after reading the file. + + + + Gets or sets the system culture info at the time the file was loaded. + + + + + Sets the default standard font name + + + + + Sets the default standard font size. + + + + + Gets and sets the interrupt monitor. + + + + + Ignore the data which are not printed if directly printing the file + + + Only for xlsx file. + + + + + Check whether data is valid in the template file. + + + + + Whether check restriction of excel file when user modify cells related objects. + For example, excel does not allow inputting string value longer than 32K. + When you input a value longer than 32K such as by Cell.PutValue(string), if this property is true, you will get an Exception. + If this property is false, we will accept your input string value as the cell's value so that later + you can output the complete string value for other file formats such as CSV. + However, if you have set such kind of value that is invalid for excel file format, + you should not save the workbook as excel file format later. Otherwise there may be unexpected error for the generated excel file. + + + + + Whether keep the unparsed data in memory for the Workbook when it is loaded from template file. Default is true. + + + For scenarios that user only needs to read some contents from template file and does not need to save the workbook back, + set this property as false may improve performance, especially when using it together with some kind of LoadFilter, + + + + + The filter to denote how to load data. + + + + + The data handler for processing cells data when reading template file. + + + + + Gets or sets the memory usage options. + + + + + Gets or sets warning callback. + + + + + Gets and sets the auto fitter options + + + Only for xlsx ,spreadsheetML file now. + + + + + Indicates whether auto filtering the data when loading the files. + + + Sometimes although autofilter is set, the corresponding rows is not hidden in the file. + Now only works for SpreadSheetML file. + + + + + + Gets and sets individual font configs. + Only works for the which uses this to load.> + + + + + Represents the options of loading ods file. + + + + + Represents the options of loading ods file. + + + + + Represents the options of loading ods file. + + The load format type. + + + + Indicates whether applying the default style of the Excel to hyperlink. + + + + + Indicates whether refresh pivot tables when loading file. + + + + + Represents the options for loading text file. + + + + + Creates the options for loading text file. + + The default load file type is CSV . + + + + Creates the options for loading text file. + + The loading format + + + + Gets and sets character separator of text file. + + + + + Gets and sets the a string value as separator. + + + + + True means that the file contains several encoding. + + + + + Gets and sets preferred value parsers for loading text file. + + + parsers[0] is the parser will be used for the first column in text template file, + parsers[1] is the parser will be used for the second column, ...etc. + The last one(parsers[parsers.length-1]) will be used for all other columns start from parsers.length-1. + If one item is null, the corresponding column will be parsed by the default parser of Aspose.Cells. + + + + + Indicates whether the text is formula if it starts with "=". + + + + + Whether there is text qualifier for cell value. Default is true. + + + + + Specifies the text qualifier for cell values. Default qualifier is '"'. + + When setting this property, will become true automatically. + + + + Whether consecutive delimiters should be treated as one. + + + + + Indicates whether the leading single quote sign should be taken as part of the value of one cell. + Default is true. If it is false, the leading single quote will be removed from corresponding cell's value + and will be set as true for the cell. + + + + + Specifies how to apply style for parsed values when converting string value to number or datetime. + + + + + Does not set style for the parsed value. + + + + + Set the style as built-in number/datetime when the parsed value are plain numeric/datetime values. + + + When ms excel parsing datetime or numeric values according to user's input(such as CSV file), + the formatting of those values may be changed, such as + leading/tailing zeros of number, year/month/day order of datetime, ...etc. + This type is for simulating ms excel's behavior. + + + + + Set the exact custom format for the parsed value to make the formatted value be same with the original input one. + + + + + Represents a Custom XML Data Storage Part (custom XML data within a package). + + + + + Gets or sets the XML content of this Custom XML Data Storage Part. + + + + + Gets or sets the XML content of this Custom XML Schema Data Storage Part. + + + + + Gets and sets the id of the custom xml part. + + + + + Represents a Custom XML Data Storage Part (custom XML data within a package). + + + + + Adds an item to the collection. + + The XML content of this Custom XML Data Storage Part. + The set of XML schemas that are associated with this custom XML part. + + + + + + Gets an item at the specified index. + + The index. + + + + + + Gets an item by id. + + Contains the GUID for the custom XML part. + + + + + + Represents a smart tag. + + + + + Indicates whether the smart tag is deleted. + + + + + Gets and set the properties of the smart tag. + + + + + Gets the namespace URI of the smart tag. + + + + + Gets the name of the smart tag. + + + + + Change the name and the namespace URI of the smart tag. + + The namespace URI of the smart tag. + The name of the smart tag. + + + + Represents all smart tags in the cell. + + + + + Gets the row of the cell smart tags. + + + + + Gets the column of the cell smart tags. + + + + + Gets a object at the specific index + + The index. + returns a object. + + + + Adds a smart tag. + + Specifies the namespace URI of the smart tag + Specifies the name of the smart tag. + The index of smart tag in the list. + + + + Represents the options of the smart tag. + + + + + Indicates whether saving smart tags with the workbook. + + + + + Represents the show type of smart tag. + + + + + Represents the property of the cell smart tag. + + + + + Gets and sets the name of the property. + + + + + Gets and sets the value of the property. + + + + + Represents all properties of cell smart tag. + + + + + Gets a object. + + The index + Returns a object. + + + + Gets a object by the name of the property. + + The name of the property. + Returns a object. + + + + Adds a property of cell's smart tag. + + The name of the property + The value of the property. + return + + + + Represents all object in the worksheet. + + + + + Adds a object to a cell. + + The row of the cell. + The column of the cell. + Returns index of a object in the worksheet. + + + + Add a cell smart tags. + + The name of the cell. + + + + + + Gets a object by the index. + + The index of the object in the list. + + + + + + Gets the object of the cell. + + The row index of the cell. + The column index of the cell + Returns the object of the cell. + Returns null if there is no any smart tags on the cell. + + + + + Gets the object of the cell. + + The name of the cell. + Returns the object of the cell. + Returns null if there is no any smart tags on the cell. + + + + + Represents the show type of the smart tag. + + + + + Indicates that smart tags are enabled and shown + + + + + Indicates that the smart tags are enabled but the indicator not be shown. + + + + + Indicates that smart tags are disabled and not displayed. + + + + + Contains all classes of smart tag. + + + + + Represents the options of loading metadata of the file. + + + + + Creates an options of loading the metadata. + + The type of metadata. + + + + Gets and sets the type of the metadata which is loading. + + + + + Represents Workbook file encryption password. + + + + + The key length. + + + + + Represents the type of metadata. + + + + + Encrypts the file. + + + + + Decrypts the file. + + + + + Load the properties of the file. + + + + + Represents the meta data. + + + The following example creates a WorkbookMetadata. + + [C#] + MetadataOptions options = new MetadataOptions(MetadataType.DocumentProperties); + WorkbookMetadata meta = new WorkbookMetadata(path + "book1.xlsx", options); + meta.CustomDocumentProperties.Add("test", "test"); + meta.Save(path + "book2.xlsx"); + + + + + Create the meta data object. + + + + + + + + + Create the meta data object. + + + + + + + + + Gets the options of the metadata. + + + + + Returns a DocumentProperties collection that represents all the built-in document properties of the spreadsheet. + + + + + Returns a DocumentProperties collection that represents all the custom document properties of the spreadsheet. + + + + + Save the modified metadata to the file. + + The file name. + + + + Save the modified metadata to the stream. + + The stream. + + + + Contains all classes of loading and saving metadata. + + + + + Provides methods to set metered key. + + + In this example, an attempt will be made to set metered public and private key + + + [C#] + + Metered matered = new Metered(); + matered.SetMeteredKey("PublicKey", "PrivateKey"); + + + [Visual Basic] + + Dim matered As Metered = New Metered + matered.SetMeteredKey("PublicKey", "PrivateKey") + + + + + Initializes a new instance of this class. + + + + + Sets metered public and private key. + If you purchase metered license, when start application, this API should be called, normally, this is enough. However, if always fail to upload consumption data and exceed 24 hours, the license will be set to evaluation status, to avoid such case, you should regularly check the license status, if it is evaluation status, call this API again. + + public key + private key + + + + Gets consumption file size + + consumption quantity + + + + Gets consumption credit + + consumption quantity + + + + Represents a defined name for a range of cells. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + //Accessing the first worksheet in the Excel file + Worksheet worksheet = workbook.Worksheets[0]; + //Creating a named range + Range range = worksheet.Cells.CreateRange("B4", "G14"); + //Setting the name of the named range + range.Name = "TestRange"; + //Saving the modified Excel file in default (that is Excel 2000) format + workbook.Save("C:\\output.xls"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + 'Accessing the first worksheet in the Excel file + Dim worksheet As Worksheet = workbook.Worksheets(0) + 'Creating a named range + Dim range As Range = worksheet.Cells.CreateRange("B4", "G14") + 'Setting the name of the named range + range.Name = "TestRange" + 'Saving the modified Excel file in default (that is Excel 2000) format + workbook.Save("C:\\output.xls") + + + + + + Gets and sets the comment of the name. + Only applies for Excel 2007. + + + + + Gets the name text of the object. + + + + + Gets the name full text of the object with the scope setting. + + + + + Returns or sets the formula that the name is defined to refer to, beginning with an equal sign. + + + + + Gets or sets a R1C1 reference of the . + + + + + Get the reference of this Name. + + Whether the reference needs to be formatted as R1C1. + Whether the reference needs to be formatted by locale. + + + + Set the reference of this Name. + + The reference. + Whether the reference is R1C1 format. + Whether the reference is locale formatted. + + + + Indicates whether this name is referred by other formulas. + + + + + Indicates whether the name is visible. + + + + + Indicates this name belongs to Workbook or Worksheet. + 0 = Global name, otherwise index to sheet (one-based) + + + + + Returns a string represents the current Range object. + + + + + + + Gets all ranges referred by this name. + + All ranges. + + + + Gets all ranges referred by this name. + + whether recalculate it if this name has been calculated before this invocation. + All ranges. + + + + Gets all references referred by this name. + + whether recalculate it if this name has been calculated before this invocation. + All ranges. + + + + Gets the range if this name refers to a range. + + The range. + + + + Gets the range if this name refers to a range + + whether recalculate it if this name has been calculated before this invocation. + The range. + + + + Gets the range if this name refers to a range. + If the reference of this name is not absolute, the range may be different for different cell. + + The according sheet index. + The according row index. + The according column index + The range. + + + + Represents a collection of all the objects in the spreadsheet. + + + + + Defines a new name. + + The text to use as the name. + + object index. + Name cannot include spaces and cannot look like cell references. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element with the specified name. + + Name text. + The element with the specified name. + + + + Remove an array of name + + The names' text. + + + + Remove the name. + + The name text. + + + + Remove the name at the specific index. + + index of the Name to be removed. + + Please make sure that the name is not referred by the other formulas before calling the method. + And if the name is referred, setting Name.RefersTo as null is better. + + + + + Remove all defined names which are not referenced by the formulas and data source. + If the defined name is referred, we only set Name.ReferTo as null and hide them. + + + + + Remove the duplicate defined names + + + + + Sorts defined names. + + If you create a large amount of named ranges in the Excel file, please call this method after all named ranges are created and before saving + + + + Contains all basic classes of Aspose.Cells. + + + + + Contains all classes of PivotTable. + + + + + Represents PivotTable condition formatting rule type. + + + + + Indicates that Top N conditional formatting is not evaluated + + + + + Indicates that Top N conditional formatting is + evaluated across the entire scope range. + + + + + Indicates that Top N conditional formatting is evaluated for each row. + + + + + Indicates that Top N conditional formatting is + evaluated for each column. + + + + + Represents PivotTable condition formatting scope type. + + + + + Indicates that conditional formatting is applied to the selected data fields. + + + + + Indicates that conditional formatting is applied to the selected PivotTable field intersections. + + + + + Indicates that conditional formatting is applied to the selected cells. + + + + + Represents a field in a PivotTable report. + + + + + Gets the pivot items of the pivot field + + + + + Gets the group range of the pivot field + + + + + Gets the pivot filter of the pivot field by type + + + + + Gets the pivot filters of the pivot field + + + + + Init the pivot items of the pivot field + + + + + Indicates whether the specified PivotTable field is calculated field. + + + + + Get the formula string of the specified calculated field . + + + + + Represents the PivotField index in the base PivotFields. + + + + + Represents the PivotField index in the PivotFields. + + + + + Represents the PivotField name. + + + + + Represents the PivotField display name. + + + + + Sets whether the specified field shows that subtotals. + + subtotals type. + whether the specified field shows that subtotals. + + + + + Gets whether the specified field shows that subtotals. + + subtotals type. + whether the specified field shows that subtotals. + + + + Indicates whether the specified field shows automatic subtotals. Default is true. + + + + + Indicates whether the specified field can be dragged to the column position. + The default value is true. + + + + + Indicates whether the specified field can be dragged to the hide position. + The default value is true. + + + + + Indicates whether the specified field can be dragged to the row position. + The default value is true. + + + + + Indicates whether the specified field can be dragged to the page position. + The default value is true. + + + + + Indicates whether the specified field can be dragged to the data position. + The default value is true. + + + + + indicates whether the field can have multiple items + selected in the page field + The default value is false. + + + + + indicates whether the field can repeat items labels + The default value is false. + + + + + indicates whether the field can include new items in manual filter + The default value is false. + + + + + indicates whether the field can insert page breaks between items + insert page break after each item + The default value is false. + + + + + Indicates whether all items in the PivotTable report are displayed, + even if they don't contain summary data. + show items with no data + The default value is false. + + + + + Indicates whether the specified PivotTable field is automatically sorted. + + + + + Indicates whether the specified PivotTable field is autosorted ascending. + + + + + Represents auto sort field index. + -1 means PivotField itself,others means the position of the data fields. + + + + + Indicates whether the specified PivotTable field is automatically shown,only valid for excel 2003. + + + + + Indicates whether the specified PivotTable field is autoshown ascending. + + + + + Represent the number of top or bottom items + that are automatically shown in the specified PivotTable field. + + + + + Represents auto show field index. -1 means PivotField itself. + It should be the index of the data fields. + + + + + Represents the function used to summarize the PivotTable data field. + + + + + Represents how to display the values contained in a data field. + + + + + + Represents the base field for a custom calculation. + + + + + Represents the item in the base field for a custom calculation. + Valid only for data fields. + Because PivotItemPosition.Custom is only for read,if you need to set PivotItemPosition.Custom, + please set PivotField.BaseItemIndex attribute. + + + + + + Represents the item in the base field for a custom calculation. + Valid only for data fields. + + + + + Represents the current page item showing for the page field (valid only for page fields). + + + + + Represents the built-in display format of numbers and dates. + + + + + Indicates whether inserting blank line after each item. + + + + + when ShowInOutlineForm is true, then display subtotals at the top of the list of items instead of at the bottom + + + + + Indicates whether layout this field in outline form on the Pivot Table view + + + + + Represents the custom display format of numbers and dates. + + + + + Indicates whether the specific PivotItem is hidden. + + the index of the pivotItem in the pivotField. + whether the specific PivotItem is hidden + + + + Sets whether the specific PivotItem in a data field is hidden. + + the index of the pivotItem in the pivotField. + whether the specific PivotItem is hidden + + + + Indicates whether the specific PivotItem is hidden detail. + + the index of the pivotItem in the pivotField. + whether the specific PivotItem is hidden detail + + + + Sets whether the specific PivotItem in a pivot field is hidden detail. + + the index of the pivotItem in the pivotField. + whether the specific PivotItem is hidden + + + + Sets whether the PivotItems in a pivot field is hidden detail.That is collapse/expand this field. + + whether the PivotItems is hidden + + + + Sets whether the specific PivotItem in a data field is hidden. + + the value of the pivotItem in the pivotField. + whether the specific PivotItem is hidden + + + + Get all base items; + + + + + Get the original base items; + + + + + Gets the base item count of this pivot field. + + + + + Add a calculated item to the pivot field. + + The item's name. + The item's formula + + Only supports to add calculated item to Row/Column field. + + + + + + + + + Represents a collection of all the PivotField objects + in the PivotTable's specific PivotFields type. + + + + + Gets the PivotFields type. + + + + + Gets the count of the pivotFields. + + + + + Gets an enumerator over the elements in this collection in proper sequence. + + enumerator + + + + Gets the PivotField Object at the specific index. + + + + + Gets the PivotField Object of the specific name. + + + + + Adds a PivotField Object to the specific type PivotFields. + + field index in the base PivotFields. + the index of the PivotField Object in this PivotFields. + + + + Adds a PivotField Object to the specific type PivotFields. + + a PivotField Object. + the index of the PivotField Object in this PivotFields. + + + + clear all fields of PivotFieldCollection + + + + + Represents data display format in the PivotTable data field. + + + + + Represents normal display format. + + + + + Represents difference from display format. + + + + + Represents percentage of display format. + + + + + Represents percentage difference from display format. + + + + + Represents running total in display format. + + + + + Represents percentage of row display format. + + + + + Represents percentage of column display format. + + + + + Represents percentage of total display format. + + + + + Represents index display format. + + + + + Represents percentage of parent row total display format. + + + + + Represents percentage of parent column total display format. + + + + + Represents percentage of parent total display format. + + + + + Represents percentage of running total in display format. + + + + + Represents smallest to largest display format. + + + + + Represents largest to smallest display format. + + + + + Summary description for PivotFieldSubtotalType. + + + + + Represents None subtotal type. + + + + + Represents Automatic subtotal type. + + + + + Represents Sum subtotal type. + + + + + Represents Count subtotal type. + + + + + Represents Average subtotal type. + + + + + Represents Max subtotal type. + + + + + Represents Min subtotal type. + + + + + Represents Product subtotal type. + + + + + Represents Count Nums subtotal type. + + + + + Represents Stdev subtotal type. + + + + + Represents Stdevp subtotal type. + + + + + Represents Var subtotal type. + + + + + Represents Varp subtotal type. + + + + + Represents PivotTable field type. + + + + + Presents base pivot field type. + + + + + Presents row pivot field type. + + + + + Presents column pivot field type. + + + + + Presents page pivot field type. + + + + + Presents data pivot field type. + + + + + Represents a PivotFilter in PivotFilter Collection. + + + + + Gets the autofilter of the pivot filter. + + + + + Gets the autofilter type of the pivot filter. + + + + + Gets the field index of the pivot filter. + + + + + Gets the string value1 of the label pivot filter. + + + + + Gets the string value2 of the label pivot filter. + + + + + Gets the measure field index of the pivot filter. + + + + + Gets the member property field index of the pivot filter. + + + + + Gets the name of the pivot filter. + + + + + Gets the Evaluation Order of the pivot filter. + + + + + Represents a collection of all the PivotFilter objects + + + + + Gets the pivotfilter object at the specific index. + + + + + Adds a PivotFilter Object to the specific type + + the PivotField index + the PivotFilter type + the index of the PivotFilter Object in this PivotFilterCollection. + + + + Clear PivotFilter from the specific PivotField + + the PivotField index + + + + Represents PivotTable Filter type. + + + + + Indicates the "begins with" filter for field captions. + + + + + Indicates the "is between" filter for field captions. + + + + + Indicates the "contains" filter for field captions. + + + + + Indicates the "ends with" filter for field captions. + + + + + Indicates the "equal" filter for field captions. + + + + + Indicates the "is greater than" filter for field captions. + + + + + Indicates the "is greater than or equal to" filter for field captions. + + + + + Indicates the "is less than" filter for field captions. + + + + + Indicates the "is less than or equal to" filter for field captions. + + + + + Indicates the "does not begin with" filter for field captions. + + + + + Indicates the "is not between" filter for field captions. + + + + + Indicates the "does not contain" filter for field captions. + + + + + Indicates the "does not end with" filter for field captions. + + + + + Indicates the "not equal" filter for field captions. + + + + + Indicates the "count" filter. + + + + + Indicates the "between" filter for date values. + + + + + Indicates the "equals" filter for date values. + + + + + Indicates the "newer than" filter for date values. + + + + + Indicates the "newer than or equal to" filter for date values. + + + + + Indicates the "not between" filter for date values. + + + + + Indicates the "does not equal" filter for date values. + + + + + Indicates the "older than" filter for date values. + + + + + Indicates the "older than or equal to" filter for date values. + + + + + Indicates the "last month" filter for date values. + + + + + Indicates the "last quarter" filter for date values. + + + + + Indicates the "last week" filter for date values. + + + + + Indicates the "last year" filter for date values. + + + + + Indicates the "January" filter for date values. + + + + + Indicates the "February" filter for date values. + + + + + Indicates the "March" filter for date values. + + + + + Indicates the "April" filter for date values. + + + + + Indicates the "May" filter for date values. + + + + + Indicates the "June" filter for date values. + + + + + Indicates the "July" filter for date values. + + + + + Indicates the "August" filter for date values. + + + + + Indicates the "September" filter for date values. + + + + + Indicates the "October" filter for date values. + + + + + Indicates the "November" filter for date values. + + + + + Indicates the "December" filter for date values. + + + + + Indicates the "next month" filter for date values. + + + + + Indicates the "next quarter" for date values. + + + + + Indicates the "next week" for date values. + + + + + Indicates the "next year" filter for date values. + + + + + Indicates the "percent" filter for numeric values. + + + + + Indicates the "first quarter" filter for date values. + + + + + Indicates the "second quarter" filter for date values. + + + + + Indicates the "third quarter" filter for date values. + + + + + Indicates the "fourth quarter" filter for date values. + + + + + Indicates the "sum" filter for numeric values. + + + + + Indicates the "this month" filter for date values. + + + + + Indicates the "this quarter" filter for date values. + + + + + Indicates the "this week" filter for date values. + + + + + Indicate the "this year" filter for date values. + + + + + Indicates the "today" filter for date values. + + + + + Indicates the "tomorrow" filter for date values. + + + + + Indicates the PivotTable filter is unknown to the application. + + + + + Indicates the "Value between" filter for text and numeric values. + + + + + Indicates the "value equal" filter for text and numeric values. + + + + + Indicates the "value greater than" filter for text and numeric values. + + + + + Indicates the "value greater than or equal to" filter for text and numeric values. + + + + + Indicates the "value less than" filter for text and numeric values. + + + + + Indicates the "value less than or equal to" filter for text and numeric values. + + + + + Indicates the "value not between" filter for text and numeric values. + + + + + Indicates the "value not equal" filter for text and numeric values. + + + + + Indicates the "year-to-date" filter for date values. + + + + + Indicates the "yesterday" filter for date values. + + + + + Represents a PivotTable Format Condition in PivotFormatCondition Collection. + + + + + Get and set scope type for the pivot table condition format . + + + + + Get and set rule type for the pivot table condition format . + + + + + Get formatconditions for the pivot table condition format . + + + + + Represents PivotTable Format Conditions. + + + + + Adds a pivot FormatCondition to the collection. + + pivot FormatCondition object index. + not supported + + + + Gets the pivot FormatCondition object at the specific index. + + pivot FormatCondition object. + + + + Represents PivotTable groupby type. + + + + + Presents range of values groupby type. + + + + + Presents Seconds groupby type. + + + + + Presents Minutes groupby type. + + + + + Presents Hours groupby type. + + + + + Presents Days groupby type. + + + + + Presents Months groupby type. + + + + + Presents Quarters groupby type. + + + + + Presents Years groupby type. + + + + + Represents a item in a PivotField report. + + + + + Gets and Sets whether the pivot item is hidden. + + + + + Specifying the position index in all the PivotItems,not the PivotItems under the same parent node. + + + + + Specifying the position index in the PivotItems under the same parent node. + + + + + Moves the item up or down + + + The number of moving up or down. + Move the item up if this is less than zero; + Move the item down if this is greater than zero. + + + Specifying whether moving operation is in the same parent node or not + + + + + Gets the string value of the pivot item + If the value is null, it will return "" + + + + + Gets the double value of the pivot item + If the value is null or not number ,it will return 0 + + + + + Gets the date time value of the pivot item + If the value is null ,it will return DateTime.MinValue + + + + + Gets the value of the pivot item + + + + + Gets the name of the pivot item. + + + + + Gets the index of the pivot item in the pivot field + + + + + Represents a collection of all the PivotItem objects in the PivotField's + + + + + Gets an enumerator over the elements in this collection in proper sequence. + + enumerator + + + + Gets the PivotItem Object at the specific index. + + + + + Gets the PivotItem Object of the specific name. + + + + + Gets the count of the pivot items. + + + + + Directly changes the orders of the two items. + + The current index + The dest index + + + + Represents PivotTable base item Next/Previous/All position in the base field . + + + + + Represents the previous pivot item in the PivotField. + + + + + Represents the next pivot item in the PivotField. + + + + + Represents a pivot item index, as specified by Pivot Items, that specifies a pivot item in the PivotField. + only read + + + + Represents number of items to retain per field. + + + + + The default number of unique items per PivotField allowed. + + + + + The maximum number of unique items per PivotField allowed (>32,500). + + + + + No unique items per PivotField allowed. + + + + + Represents the pivot page field items + if the pivot table data source is consolidation ranges. + It only can contain up to 4 fields. + + + + + Represents the pivot page field items. + + + + + Adds a page field. + + Page field item label + + + + Gets the number of page fields. + + + + + Sets which item label in each page field to use to identify the data range. + The pageItemIndex.Length must be equal to PageFieldCount, so please add the page field first. + + The consolidation data range index. + The page item index in the each page field. + pageItemIndex[2] = 1 means the second item in the third field to use to identify this range. + pageItemIndex[1] = -1 means no item in the second field to use to identify this range + and MS will auto create "blank" item in the second field to identify this range. + + + + + Summary description for PivotTable. + + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources. + + + + + Specifies whether the PivotTable is compatible for Excel2003 when refreshing PivotTable, + if true, a string must be less than or equal to 255 characters, so if the string is greater than 255 characters, + it will be truncated. if false, a string will not have the aforementioned restriction. + The default value is true. + + + + + Gets the name of the user who last refreshed the PivotTable + + + + + Gets the date when the PivotTable was last refreshed. + + + + + Gets and sets the pivottable style name. + + + + + Gets and sets the built-in pivot table style. + + + + + Copies named style from another pivot table. + + Source pivot table. + + + + Show all the report filter pages according to PivotField, the PivotField must be located in the PageFields. + + The PivotField object + + + + Show all the report filter pages according to PivotField's name, the PivotField must be located in the PageFields. + + The name of PivotField + + + + Show all the report filter pages according to the position index in the PageFields + + The position index in the PageFields + + + + Removes a field from specific field area + + The fields area type. + The name in the base fields. + + + + + Removes a field from specific field area + + The fields area type. + The field index in the base fields. + + + + + Remove field from specific field area + + the fields area type.It could be one of the following + values:
PivotFieldType.Row
PivotFieldType.Column
PivotFieldType.Data
PivotFieldType.Page
+ the field in the base fields. +
+ + + Adds the field to the specific area. + + The fields area type. + The name in the base fields. + The field position in the specific fields.If there is no field named as it, return -1. + + + + + Adds the field to the specific area. + + The fields area type. + The field index in the base fields. + The field position in the specific fields. + + + + + Adds the field to the specific area. + + the fields area type.It could be one of the following + values:
PivotFieldType.Row
PivotFieldType.Column
PivotFieldType.Data
PivotFieldType.Page
+ the field in the base fields. + the field position in the specific fields. +
+ + + Adds a calculated field to pivot field. + + The name of the calculated field + The formula of the calculated field. + True,drag this field to data area immediately + + + + Adds a calculated field to pivot field and drag it to data area. + + The name of the calculated field + The formula of the calculated field. + + + + Gets the specific fields by the field type. + + the field type. + the specific fields + + + + Returns a PivotFields object that are currently shown as column fields. + + + + + Returns a PivotFields object that are currently shown as row fields. + + + + + Returns a PivotFields object that are currently shown as page fields. + + + + + Gets a PivotField object that represents all the data fields in a PivotTable. + Read-only.It would be init only when there are two or more data fields in the DataPiovtFiels. + It only use to add DataPivotField to the PivotTable row/column area . Default is in row area. + + + + + Gets a PivotField object that represents all the data fields in a PivotTable. + Read-only.It would be init only when there are two or more data fields in the DataPiovtFiels. + It only use to add DataPivotField to the PivotTable row/column area . Default is in row area. + + + + + Returns a PivotFields object that includes all fields in the PivotTable report + + + + + Returns a PivotFilterCollection object. + + + + + Returns a CellArea object that represents the range + that contains the column area in the PivotTable report. Read-only. + + + + + Returns a CellArea object that represents the range + that contains the row area in the PivotTable report. Read-only. + + + + + Returns a CellArea object that represents the range that contains the data area + in the list between the header row and the insert row. Read-only. + + + + + Returns a CellArea object that represents the range containing the entire PivotTable report, + but doesn't include page fields. Read-only. + + + + + Returns a CellArea object that represents the range containing the entire PivotTable report, + includes page fields. Read-only. + + + + + Moves the PivotTable to a different location in the worksheet. + + row index. + column index. + + + + Moves the PivotTable to a different location in the worksheet. + + the dest cell name. + + + + Indicates whether the PivotTable report shows grand totals for columns. + + + + + Indicates whether the PivotTable report displays classic pivottable layout. + (enables dragging fields in the grid) + + + + + Indicates whether the PivotTable report shows grand totals for rows. + + + + + Indicates whether the PivotTable report displays a custom string + in cells that contain null values. + + + + + Gets the string displayed in cells that contain null values + when the DisplayNullString property is true.The default value is an empty string. + + + + + Indicates whether the PivotTable report displays a custom string in cells that contain errors. + + + + + Gets the string displayed in cells that contain errors + when the DisplayErrorString property is true.The default value is an empty string. + + + + + Indicates whether the PivotTable report is automatically formatted. + Checkbox "autoformat table " which is in pivottable option for Excel 2003 + Checkbox "autofit column width on update" which is in pivot table Options :Layout Format for Excel 2007 + + + + + Gets the PivotTable auto format type. + + + + + + Indicates whether to add blank rows. + This property only applies for the PivotTable auto format types which needs to add blank rows. + + + + + Indicates whether the specified PivotTable report's outer-row item, column item, subtotal, + and grand total labels use merged cells. + + + + + Indicates whether formatting is preserved when the PivotTable is refreshed or recalculated. + + + + + Gets whether expand/collapse buttons is shown. + + + + + Gets whether drilldown is enabled. + + + + + Indicates whether the PivotTable Field dialog box is available + when the user double-clicks the PivotTable field. + + + + + Gets whether enable the field list for the PivotTable. + + + + + Indicates whether the PivotTable Wizard is available. + + + + + Indicates whether hidden page field items in the PivotTable report + are included in row and column subtotals, block totals, and grand totals. + The default value is False. + + + + + Returns the text string label that is displayed in the grand total column or row heading. + The default value is the string "Grand Total". + + + + + Indicates whether the PivotTable report is recalculated only at the user's request. + + + + + Specifies a boolean value that indicates whether the fields of a PivotTable can have multiple filters set on them. + + + + + Specifies a boolean value that indicates whether the fields of a PivotTable can have multiple filters set on them. + + + + + Specifies a boolean value that indicates whether the user is allowed to edit the cells in the data area of the pivottable. + Enable cell editing in the values area + + + + + Specifies a boolean value that indicates whether tooltips should be displayed for PivotTable data cells. + + + + + Specifies a boolean value that indicates whether member property information should be omitted from PivotTable tooltips. + + + + + Specifies a boolean value that indicates whether show values row. + show the values row + + + + + Specifies a boolean value that indicates whether to include empty columns in the table + + + + + Specifies a boolean value that indicates whether to include empty rows in the table. + + + + + Specifies a boolean value that indicates whether fields in the PivotTable are sorted in non-default order in the field list. + + + + + Specifies a boolean value that indicates whether drill indicators should be printed. + print expand/collapse buttons when displayed on pivottable. + + + + + Gets the title of the altertext + + + + + Gets the description of the alt text + + + + + Gets the name of the PivotTable + + + + + Gets the Column Header Caption of the PivotTable. + + + + + Specifies the indentation increment for compact axis and can be used to set the Report Layout to Compact Form. + + + + + Gets the Row Header Caption of the PivotTable. + + + + + Indicates whether row header caption is shown in the PivotTable report + Indicates whether Display field captions and filter drop downs + + + + + Indicates whether consider built-in custom list when sort data + + + + + Gets the Format Conditions of the pivot table. + + + + + Gets the order in which page fields are added to the PivotTable report's layout. + + + + + Gets the number of page fields in each column or row in the PivotTable report. + + + + + Gets a string saved with the PivotTable report. + + + + + Indicates whether data for the PivotTable report is saved with the workbook. + + + + + Indicates whether Refresh Data when Opening File. + + + + + Indicates whether Refresh Data or not. + + + + + Gets the external connection data source. + + + + + Gets and sets the data source of the pivot table. + + + + + Set pivottable's source data. + Sheet1!$A$1:$C$3 + + + + + Get pivottable's source data. + + + + + Refreshes pivottable's data and setting from it's data source. + + + We will gather data from data source to a pivot cache ,then calculate the data in the cache to the cells. + This method is only used to gather all data to a pivot cache. + + + + + Calculates pivottable's data to cells. + + + Cell.Value in the pivot range could not return the correct result if the method is not been called. + This method calculates data with an inner pivot cache,not original data source. + So if the data source is changed, please call RefreshData() method first. + + + + + Clear PivotTable's data and formatting + + + If this method is not called before you add or delete PivotField, Maybe the PivotTable data is not corrected + + + + + Calculates pivottable's range. + + + If this method is not been called,maybe the pivottable range is not corrected. + + + + + Format all the cell in the pivottable area + + Style which is to format + + + + Format the cell in the pivottable area + + RowIndex of the cell + Column index of the cell + Style which is to format the cell + + + + A bit that specifies whether pivot item captions on the row axis + are repeated on each printed page for pivot fields in tabular form. + + + + + Indicates whether the print titles for the worksheet are set based + on the PivotTable report. The default value is false. + + + + + Indicates whether items in the row and column areas are visible + when the data area of the PivotTable is empty. The default value is true. + + + + + Indicates whether the PivotTable is selected. + + + + + Indicates whether the row header in the pivot table should have the style applied. + + + + + Indicates whether the column header in the pivot table should have the style applied. + + + + + Indicates whether row stripe formatting is applied. + + + + + Indicates whether column stripe formatting is applied. + + + + + Indicates whether column stripe formatting is applied. + + + + + Sets auto field group by the PivotTable. + + The row or column field index in the base fields + + + + Sets auto field group by the PivotTable. + + The row or column field in the specific fields + + + + Sets manual field group by the PivotTable. + + The row or column field index in the base fields + Specifies the starting value for numeric grouping. + Specifies the ending value for numeric grouping. + Specifies the grouping type list. Specified by PivotTableGroupType + Specifies the interval number group by numeric grouping. + + + + Sets manual field group by the PivotTable. + + The row or column field in the base fields + Specifies the starting value for numeric grouping. + Specifies the ending value for numeric grouping. + Specifies the grouping type list. Specified by PivotTableGroupType + Specifies the interval number group by numeric grouping. + + + + Sets manual field group by the PivotTable. + + The row or column field index in the base fields + Specifies the starting value for date grouping. + Specifies the ending value for date grouping. + Specifies the grouping type list. Specified by PivotTableGroupType + Specifies the interval number group by in days grouping.The number of days must be positive integer of nonzero + + + + Sets manual field group by the PivotTable. + + The row or column field in the base fields + Specifies the starting value for date grouping. + Specifies the ending value for date grouping. + Specifies the grouping type list. Specified by PivotTableGroupType + Specifies the interval number group by in days grouping.The number of days must be positive integer of nonzero + + + + Sets ungroup by the PivotTable + + The row or column field index in the base fields + + + + Sets ungroup by the PivotTable + + The row or column field in the base fields + + + + get pivot table row index list of horizontal pagebreaks + + + + + + + Layouts the PivotTable in compact form. + + + + + Layouts the PivotTable in outline form. + + + + + Layouts the PivotTable in tabular form. + + + + + Gets the Cell object by the DisplayName of PivotField + + the DisplayName of PivotField + the Cell object + + + + Gets the Children Pivot Tables which use this PivotTable data as data source. + + the PivotTable array object + + + + Represents PivotTable auto format type. + + + + + Represents None format type. + + + + + Represents Classic auto format type. + + + + + Represents Report1 format type. + + + + + Represents Report2 format type. + + + + + Represents Report3 format type. + + + + + Represents Report4 format type. + + + + + Represents Report5 format type. + + + + + Represents Report6 format type. + + + + + Represents Report7 format type. + + + + + Represents Report8 format type. + + + + + Represents Report9 format type. + + + + + Represents Report10 format type. + + + + + Represents Table1 format type. + + + + + Represents Table2 format type. + + + + + Represents Table3 format type. + + + + + Represents Table4 format type. + + + + + Represents Table5 format type. + + + + + Represents Table6 format type. + + + + + Represents Table7 format type. + + + + + Represents Table8 format type. + + + + + Represents Table9 format type. + + + + + Represents Table10 format type. + + + + + Represents the collection of all the PivotTable objects on the specified worksheet. + + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources. + + + + + Adds a new PivotTable cache to a PivotCaches collection. + + The data for the new PivotTable cache. + The cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + The new added cache index. + + + + Adds a new PivotTable cache to a PivotCaches collection. + + The data for the new PivotTable cache. + The cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + Indicates whether using same data source when another existing pivot table has used this data source. + If the property is true, it will save memory. + The new added cache index. + + + + Adds a new PivotTable cache to a PivotCaches collection. + + The data cell range for the new PivotTable.Example : Sheet1!A1:C8 + Row index of the cell in the upper-left corner of the PivotTable report's destination range. + Column index of the cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + The new added cache index. + + + + Adds a new PivotTable cache to a PivotCaches collection. + + The data cell range for the new PivotTable.Example : Sheet1!A1:C8 + Row index of the cell in the upper-left corner of the PivotTable report's destination range. + Column index of the cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + Indicates whether using same data source when another existing pivot table has used this data source. + If the property is true, it will save memory. + The new added cache index. + + + + Adds a new PivotTable Object to the collection from another PivotTable. + + The source pivotTable. + The cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + The new added PivotTable index. + + + + Adds a new PivotTable Object to the collection from another PivotTable. + + The source pivotTable. + Row index of the cell in the upper-left corner of the PivotTable report's destination range. + Column index of the cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + The new added PivotTable index. + + + + Adds a new PivotTable Object to the collection with multiple consolidation ranges as data source. + + The multiple consolidation ranges,such as {"Sheet1!A1:C8","Sheet2!A1:B8"} + Whether auto create a single page field. + If true,the following param pageFields will be ignored. + + The pivot page field items. + + destCellName The name of the new PivotTable report. + the name of the new PivotTable report. + The new added PivotTable index. + + + + Adds a new PivotTable Object to the collection with multiple consolidation ranges as data source. + + The multiple consolidation ranges,such as {"Sheet1!A1:C8","Sheet2!A1:B8"} + Whether auto create a single page field. + If true,the following param pageFields will be ignored + The pivot page field items. + + Row index of the cell in the upper-left corner of the PivotTable report's destination range. + Column index of the cell in the upper-left corner of the PivotTable report's destination range. + The name of the new PivotTable report. + The new added PivotTable index. + + + + Gets the PivotTable report by index. + + + + + Gets the PivotTable report by pivottable's name. + + + + + Gets the PivotTable report by pivottable's position. + + + + + Clear all pivot tables. + + + + + Deletes the specified PivotTable + + PivotTable object + + + + Deletes the PivotTable at the specified index + + the position index in PivotTable collection + + + + Represents the pivot table style type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents Group Range in a PivotField. + + + + + Specifies a boolean value that indicates whether the application will use the source data to set the beginning range value. + + + + + Specifies a boolean value that indicates whether the application will use the source data to set the end range value. + + + + + Represents the start object for the group range. + + + + + Represents the end object for the group range. + + + + + Represents the interval object for the group range. + + + + + Represents the group type for the group range. + rangeofvalue Seconds Minutes Hours Days Months Quarters Years + + + + + Contains all classes of Table(List Object). + + + + + Represents a column in a list. + + + + + Gets and sets the name of the column. + + + If sets the name of the column, the according cell' value will be changed too. + + + + + Gets and sets the type of calculation in the Totals row of the list column. + + + + + Gets the range of this list column. + + + + + Gets and sets the formula of the list column. + + + + + Gets the formula of this list column. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The formula of this list column. + + + + Sets the formula for this list column. + + the formula for this list column. + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + + + + Represents A collection of all the objects in the specified ListObject object. + + + + + Gets the ListColumn by the index. + + The index. + the ListColumn object. + + + + Gets the ListColumn by the name. + + The name of the ListColumn + The ListColumn object. + + + + Represents a list object on a worksheet. + The ListObject object is a member of the ListObjects collection. + The ListObjects collection contains all the list objects on a worksheet. + + + + + [C#] + + + Workbook workbook = new Workbook(); + Cells cells = workbook.Worksheets[0].Cells; + for (int i = 0; i <5; i++) + { + cells[0,i].PutValue(CellsHelper.ColumnIndexToName(i)); + } + for (int row = 1; row <10; row++) + { + for (int column = 0; column <5; column++) + { + cells[row, column].PutValue(row * column); + } + } + ListObjectCollection tables = workbook.Worksheets[0].ListObjects; + int index = tables.Add(0, 0, 9, 4, true); + ListObject table = tables[0]; + table.ShowTotals = true; + table.ListColumns[4].TotalsCalculation = Aspose.Cells.TotalsCalculation.Sum; + workbook.Save(@"C:\Book1.xlsx"); + + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + Dim cells As Cells = workbook.Worksheets(0).Cells + For i As Int32 = 0 To 4 + cells(0, i).PutValue(CellsHelper.ColumnIndexToName(i)) + Next + For row As Int32 = 1 To 9 + For column As Int32 = 0 To 4 + cells(row, column).PutValue(row * column) + Next + Next + Dim tables As ListObjectCollection = workbook.Worksheets(0).ListObjects + Dim index As Int32 = tables.Add(0, 0, 9, 4, True) + Dim table As ListObject = tables(0) + table.ShowTotals = True + table.ListColumns(4).TotalsCalculation = Aspose.Cells.TotalsCalculation.Sum + workbook.Save("C:\Book1.xlsx") + + + + + + Gets the start row of the range. + + + + + Gets the start column of the range. + + + + + Gets the end row of the range. + + + + + Gets the end column of the range. + + + + + Gets ListColumns of the ListObject. + + + + + Resize the range of the list object. + + The start row index of the new range. + The start column index of the new range. + The end row index of the new range. + The end column index of the new range. + Whether the ListObject has headers. + + + + Put the value to the cell. + + The row offset. + The column offset. + The cell value. + + + + Gets and sets whether this ListObject show header row. + + + + + Gets and sets whether this ListObject show total row. + + + + + Gets the data range of the ListObject. + + + + + Updates all list columns' name from the worksheet. + + + The value of the cells in the header row of the table must be same as the name of the ListColumn; + Cell.PutValue do not auto modify the name of the ListColumn for performance. + + + + + Gets the linked QueryTable. + + + + + Gets the data source type of the table. + + + + + Filter the table. + + + + + Gets auto filter. + + + + + Gets and sets the display name. + + + + + Gets and sets the comment of the table. + + + + + Indicates whether the first column in the table should have the style applied. + + + + + Indicates whether the last column in the table should have the style applied. + + + + + Indicates whether row stripe formatting is applied. + + + + + Indicates whether column stripe formatting is applied. + + + + + Apply the table style to the range. + + + + + Convert the table to range. + + + + + Convert the table to range. + + the options when converting table to range. + + + + Gets and the built-in table style. + + + + + Gets and sets the table style name. + + + + + Gets an used for this list. + + + + + Gets and sets the alternative text. + + + + + Gets and sets the alternative description. + + + + + Represents a collection of objects in the worksheet. + + + + + Gets the ListObject by index. + + The index. + The ListObject + + + + Gets the ListObject by specified name. + + ListObject name. + The ListObject + + + + Adds a ListObject to the worksheet. + + The start row of the list range. + The start row of the list range. + The start row of the list range. + The start row of the list range. + Whether the range has headers. + The index of the new ListObject + + + + Adds a ListObject to the worksheet. + + The start cell of the list range. + The end cell of the list range. + Whether the range has headers. + The index of the new ListObject + + + + Update all column name of the tables. + + + + + Represents the table's data source type. + + + + + Excel Worksheet Table + + + + + Read-write SharePoint linked List + + + + + XML mapper Table + + + + + Query Table + + + + + Represents the table style. + + + + + [C#] + + Workbook workbook = new Workbook(); + Style firstColumnStyle = workbook.CreateStyle(); + firstColumnStyle.Pattern = BackgroundType.Solid; + firstColumnStyle.BackgroundColor = System.Drawing.Color.Red; + + Style lastColumnStyle = workbook.CreateStyle(); + lastColumnStyle.Font.IsBold = true; + lastColumnStyle.Pattern = BackgroundType.Solid; + lastColumnStyle.BackgroundColor = System.Drawing.Color.Red; + string tableStyleName = "Custom1"; + TableStyleCollection tableStyles = workbook.Worksheets.TableStyles; + int index1 = tableStyles.AddTableStyle(tableStyleName); + TableStyle tableStyle = tableStyles[index1]; + TableStyleElementCollection elements = tableStyle.TableStyleElements; + index1 = elements.Add(TableStyleElementType.FirstColumn); + TableStyleElement element = elements[index1]; + element.SetElementStyle(firstColumnStyle); + index1 = elements.Add(TableStyleElementType.LastColumn); + element = elements[index1]; + element.SetElementStyle(lastColumnStyle); + Cells cells = workbook.Worksheets[0].Cells; + for (int i = 0; i <5; i++) + { + cells[0, i].PutValue(CellsHelper.ColumnIndexToName(i)); + } + for (int row = 1; row <10; row++) + { + for (int column = 0; column <5; column++) + { + cells[row, column].PutValue(row * column); + } + } + ListObjectCollection tables = workbook.Worksheets[0].ListObjects; + int index = tables.Add(0, 0, 9, 4, true); + ListObject table = tables[0]; + table.ShowTableStyleFirstColumn = true; + table.ShowTableStyleLastColumn = true; + table.TableStyleName = tableStyleName; + workbook.Save(@"C:\Book1.xlsx"); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + Dim firstColumnStyle As Style = workbook.CreateStyle() + firstColumnStyle.Pattern = BackgroundType.Solid + firstColumnStyle.BackgroundColor = System.Drawing.Color.Red + Dim lastColumnStyle As Style = workbook.CreateStyle() + + lastColumnStyle.Font.IsBold = True + lastColumnStyle.Pattern = BackgroundType.Solid + lastColumnStyle.BackgroundColor = System.Drawing.Color.Red + Dim tableStyleName As String = "Custom1" + + Dim tableStyles As TableStyleCollection = workbook.Worksheets.TableStyles + Dim index1 As Int32 = tableStyles.AddTableStyle(tableStyleName) + Dim tableStyle As TableStyle = tableStyles(index1) + Dim elements As TableStyleElementCollection = tableStyle.TableStyleElements + index1 = elements.Add(TableStyleElementType.FirstColumn) + Dim element As TableStyleElement = elements(index1) + element.SetElementStyle(firstColumnStyle) + index1 = elements.Add(TableStyleElementType.LastColumn) + element = elements(index1) + element.SetElementStyle(lastColumnStyle) + Dim cells As Cells = workbook.Worksheets(0).Cells + For i As Int32 = 0 To 4 + cells(0, i).PutValue(CellsHelper.ColumnIndexToName(i)) + Next + For row As Int32 = 1 To 9 + For column As Int32 = 0 To 4 + cells(row, column).PutValue(row * column) + Next + Next + Dim tables As ListObjectCollection = workbook.Worksheets(0).ListObjects + Dim index As Int32 = tables.Add(0, 0, 9, 4, True) + Dim table As ListObject = tables(0) + table.ShowTableStyleFirstColumn = True + table.ShowTableStyleLastColumn = True + table.TableStyleName = tableStyleName + workbook.Save("C:\Book1.xlsx") + + + + + + Gets the name of table style. + + + + + Gets all elements of the table style. + + + + + Represents all custom table styles. + + + + + Adds a custom table style. + + The table style name. + The index of the table style. + + + + Adds a custom pivot table style. + + The pivot table style name. + The index of the pivot table style. + + + + Gets the table style by the index. + + The position of the table style in the list. + The table style object. + + + + Gets the table style by the name. + + The table style name. + The table style object. + + + + Gets the builtin table style + + The builtin table style type. + + + + + + Represents the element of the table style. + + + + + Number of rows or columns in a single band of striping. + Applies only when type is firstRowStripe, secondRowStripe, firstColumnStripe, or secondColumnStripe. + + + + + Gets the element type. + + + + + Gets the element style. + + Returns the object. + + + + Sets the element style. + + The element style. + + + + Represents all elements of the table style. + + + + + Gets an element of the table style by the index. + + The index. + Returns object + + + + Gets the element of the table style by the + The element type. + Returns object + + + + Adds an element. + + The type of the element + Returns the index of the element in the list. + + + + Represents the Table or PivotTable style element type. + + + + + Table style element that applies to PivotTable's blank rows. + + + + + Table style element that applies to table's first column. + + + + + Table style element that applies to table's first column stripes. + + + + + Table style element that applies to PivotTable's first column subheading. + + + + + Table style element that applies to table's first header row cell. + + + + + Table style element that applies to table's first row stripes. + + + + + Table style element that applies to PivotTable's first row subheading. + + + + + Table style element that applies to PivotTable's first subtotal column. + + + + + Table style element that applies to pivot table's first subtotal row. + + + + + Table style element that applies to pivot table's grand total column. + + + + + Table style element that applies to pivot table's grand total row. + + + + + Table style element that applies to table's first total row cell. + + + + + Table style element that applies to table's header row. + + + + + Table style element that applies to table's last column. + + + + + Table style element that applies to table's last header row cell. + + + + + Table style element that applies to table's last total row cell. + + + + + Table style element that applies to pivot table's page field labels. + + + + + Table style element that applies to pivot table's page field values. + + + + + Table style element that applies to table's second column stripes. + + + + + Table style element that applies to pivot table's second column subheading. + + + + + Table style element that applies to table's second row stripes. + + + + + Table style element that applies to pivot table's second row subheading. + + + + + Table style element that applies to PivotTable's second subtotal column. + + + + + Table style element that applies to PivotTable's second subtotal row. + + + + + Table style element that applies to PivotTable's third column subheading. + + + + + Table style element that applies to PivotTable's third row subheading. + + + + + Table style element that applies to pivot table's third subtotal column. + + + + + Table style element that applies to PivotTable's third subtotal row. + + + + + Table style element that applies to table's total row. + + + + + Table style element that applies to table's entire content. + + + + + Represents the built-in table style type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents the options when converting table to range. + + + + + Gets and sets the last row index of the table. + + + + + Determines the type of calculation in the Totals row of the list column. + + + + + Represents Sum totals calculation. + + + + + Represents Count totals calculation. + + + + + Represents Average totals calculation. + + + + + Represents Max totals calculation. + + + + + Represents Min totals calculation. + + + + + Represents Var totals calculation. + + + + + Represents Count Nums totals calculation. + + + + + Represents StdDev totals calculation. + + + + + Represents No totals calculation. + + + + + Represents custom calculation. + + + + + Contains all classes of VBA project. + + + + + Represents module that is contained in VBA project. + + + + + Gets and sets the name of Module. + + + + + Gets the type of module. + + + + + Gets and sets the codes of module. + + + + + Represents the list of + + + + + + + + + + + + Represents the data of Designer. + + + We do not support to parse them. Just only for copying. + + + + + Adds module for a worksheet. + + The worksheet + + + + + + Adds module. + + The type of module. + The name of module. + + + + + + Gets in the list by the index. + + The index. + + + + + + Removes module for a worksheet. + + The worksheet + + + + + + Remove the module by the name + + + + + + + Gets in the list by the name. + + The name of module. + + + + + + Represents the type of VBA module. + + + + + Represents a procedural module. + + + + + Represents a document module. + + + + + Represents a class module. + + + + + Represents a designer module. + + + + + Represents the VBA project. + + + + + Sign this VBA project by a DigitalSignature + + DigitalSignature + + + + Indicates whether the signature of VBA project is valid or not. + + + + + Gets certificate raw data if this VBA project is signed. + + + + + Gets and sets the name of the VBA project. + + + + + Indicates whether VBAcode is signed or not. + + + + + Protects or unprotects this VBA project. + + indicates whether locks project for viewing. + + If the value is null, unprotects this VBA project, otherwise projects the this VBA project. + + + If islockedForViewing is true, the password could not be null. + + + + + Indicates whether this VBA project is protected. + + + + + Indicates whether this VBA project is locked for viewing. + + + + + Copy VBA project from other file. + + + + + + + Gets all objects. + + + + + Gets all references of VBA project. + + + + + Validates protection password. + + the password + Whether password is the protection password of this VBA project + + + + Represents the reference of VBA project. + + + + + + + + + + + Gets the type of this reference. + + + + + Gets and sets the name of the reference. + + + + + Gets and sets the Libid of the reference. + + + + + Gets and sets the twiddled Libid of the reference. + + + Only for control reference. + + + + + Gets and sets the extended Libid of the reference. + + + Only for control reference. + + + + + Gets and sets the referenced VBA project's identifier with an relative path. + + + Only for project reference. + + + + + Represents all references of VBA project. + + + + + Get the reference in the list by the index. + + The index. + + + + + + Add a reference to an Automation type library. + + The name of reference. + The identifier of an Automation type library. + + + + + + Add a reference to a twiddled type library and its extended type library. + + The name of reference. + The identifier of an Automation type library. + The identifier of a twiddled type library + The identifier of an extended type library + + + + + + Adds a reference to an external VBA project. + + The name of reference. + The referenced VBA project's identifier with an absolute path. + The referenced VBA project's identifier with an relative path. + + + + + + Copies references from other VBA project. + + The source references. + + + + Represents the type of VBA project reference. + + + + + Specifies a reference to an Automation type library. + + + + + Specifies a reference to a twiddled type library and its extended type library. + + + + + Specifies a reference to an external VBA project. + + + + + Enumerates page layout alignment types. + + + + + Represents bottom page layout alignment. + + + + + Represents center page layout alignment. + + + + + Represents left page layout alignment. + + + + + Represents right page layout alignment. + + + + + Represents top page layout alignment. + + + + + Represents the command of header/footer + + + + + Gets the header/footer' command type . + + + + + Gets the font of the command's value. + + + Useless for HeaderFooterCommandType.Picture. + + + + + Gets the text of the command. + + + Only valid for HeaderFooterCommandType.Text. + + + + + Represents the command type of header and footer. + + + + + The text. + + + + + Current page number + + + + + Page count + + + + + Current date + + + + + Current time + + + + + Sheet name + + + + + File name without path + + + + + File path without file name + + + + + Picture + + + + + Encapsulates the object that represents a horizontal page break. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[0]; + + //Add a page break at cell Y30 + int Index = worksheet.HorizontalPageBreaks.Add("Y30"); + + //get the newly added horizontal page break + HorizontalPageBreak hPageBreak = worksheet.HorizontalPageBreaks[Index]; + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Add a page break at cell Y30 + Dim Index As Integer = worksheet.HorizontalPageBreaks.Add("Y30") + + 'get the newly added horizontal page break + Dim hPageBreak As HorizontalPageBreak = worksheet.HorizontalPageBreaks(Index) + + + + + + Gets the start column index of this horizontal page break. + + + + + Gets the end column index of this horizontal page break. + + + + + Gets the zero based row index. + + + + + Encapsulates a collection of objects. + + + + [C#] + //Add a pagebreak at G5 + excel.Worksheets[0].HorizontalPageBreaks.Add("G5"); + excel.Worksheets[0].VerticalPageBreaks.Add("G5"); + + [VB] + 'Add a pagebreak at G5 + excel.Worksheets(0).HorizontalPageBreaks.Add("G5") + excel.Worksheets(0).VerticalPageBreaks.Add("G5") + + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element with the specified cell name. + + Cell name. + The element with the specified cell name. + + + + Adds a horizontal page break to the collection. + + Row index, zero based. + Start column index, zero based. + End column index, zero based. + + object index. + This method is used to add a horizontal pagebreak within a print area. + + + + Adds a horizontal page break to the collection. + + Cell row index, zero based. + + object index. + Page break is added in the top left of the cell. + Please set a horizontal page break and a vertical page break concurrently. + + + + Adds a horizontal page break to the collection. + + Cell row index, zero based. + Cell column index, zero based. + + object index. + Page break is added in the top left of the cell. + Please set a horizontal page break and a vertical page break concurrently. + + + + Adds a horizontal page break to the collection. + + Cell name. + + object index. + Page break is added in the top left of the cell. + Please set a horizontal page break and a vertical page break concurrently. + + + + Removes the HPageBreak element at a specified name. + + Element index, zero based. + + + + Represents print orientation constants. + + + + + Landscape orientation + + + + + Portrait orientation + + + + + Encapsulates the object that represents the page setup description. + The PageSetup object contains all page setup options. + + + + [C#] + sheet.PageSetup.PrintArea = "D1:K13"; + sheet.PageSetup.PrintTitleRows = "$5:$7"; + sheet.PageSetup.PrintTitleColumns = "$A:$B"; + + [Visual Basic] + sheet.PageSetup.PrintArea = "D1:K13" + sheet.PageSetup.PrintTitleRows = "$5:$7" + sheet.PageSetup.PrintTitleColumns = "$A:$B" + + + + + + Gets the background of ODS. + + + + + Copies the setting of the page setup. + + The source. + The copy options. + + + + Represents the range to be printed. + + + + + Represents the columns that contain the cells to be repeated on the left side of each page. + + + + [C#] + + cells.PageSetup.PrintTitleColumns = "$A:$A"; + + [Visula Basic] + + cells.PageSetup.PrintTitleColumns = "$A:$A" + + + + + + Represents the rows that contain the cells to be repeated at the top of each page. + + + + [C#] + + cells.PageSetup.PrintTitleRows = "$1:$1"; + + [Visula Basic] + + cells.PageSetup.PrintTitleRows = "$1:$1" + + + + + + Represents if elements of the document will be printed in black and white. + + + + + Represent if the sheet is printed centered horizontally. + + + + + Represent if the sheet is printed centered vertically. + + + + + Represents if the sheet will be printed without graphics. + + + + + Represents the distance from the bottom of the page to the footer, in unit of centimeters. + + + + + Represents the distance from the bottom of the page to the footer, in unit of inches. + + + + + Represents the distance from the top of the page to the header, in unit of centimeters. + + + + + Represents the distance from the top of the page to the header, in unit of inches. + + + + + Gets and sets the settings of the default printer. + + + + + Represents the size of the left margin, in unit of centimeters. + + + + + Represents the size of the left margin, in unit of inches. + + + + + Represents the size of the right margin, in unit of centimeters. + + + + + Represents the size of the right margin, in unit of inches. + + + + + Represents the size of the top margin, in unit of centimeters. + + + + + Represents the size of the top margin, in unit of inches. + + + + + Represents the size of the bottom margin, in unit of centimeters. + + + + + Represents the size of the bottom margin, in unit of inches. + + + + + Represents the first page number that will be used when this sheet is printed. + + + + + Sets the number of pages the worksheet will be scaled to when it's printed. + + Pages wide. + Pages tall. + + + + Represents the number of pages tall the worksheet will be scaled to when it's printed. + The default value is 1. + + + You have to set FitToPagesWide as zero if you want to fit all rows on one page. + + + + + Represents the number of pages wide the worksheet will be scaled to when it's printed. + The default value is 1. + + + You have to set FitToPagesTall as zero if you want to fit all columns on one page. + + + + + If this property is False, the FitToPagesWide and FitToPagesTall properties control how the worksheet is scaled. + + + + + Represents the order that Microsoft Excel uses to number pages when printing a large worksheet. + + + + + Indicates whether the paper size is automatic. + + + + + Represents the size of the paper. + + + + + Gets the width of the paper in unit of inches, considered page orientation. + + + + + Gets the height of the paper in unit of inches , considered page orientation. + + + + + Sets the custom paper size, in unit of inches. + + The width of the paper. + The height of the paper. + + + + Represents page print orientation. + + + + + Represents the way comments are printed with the sheet. + + + + + Specifies the type of print error displayed. + + + + + Represents if row and column headings are printed with this page. + + + + + Represents if cell gridlines are printed on the page. + + + + + Represents the scaling factor in percent. It should be between 10 and 400. + + + + + Indicates whether the first the page number is automatically assigned. + + + + + Represents the print quality. + + + + + Get and sets number of copies to print. + + + + + Clears header and footer setting. + + + + + Gets a script formatting the header of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ +
+ + + Gets all commands of header or footer. + + The header/footer script + Returns all commands of header or footer. + + + + Gets a script formatting the footer of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ +
+ + + Sets a script formatting the header of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Header format script. + +

Script commands:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Command + ¡¡ + + Description + ¡¡
&PCurrent page number¡¡
&NPage count¡¡
&DCurrent date¡¡
&TCurrent time
&ASheet name
&FFile name without path
&"<FontName>"Font name, for example: &"Arial"
&"<FontName>, <FontStyle>"Font name and font style, for example: &"Arial,Bold"
&<FontSize>Font size. If this command is followed by a plain number to be printed in the header, it will be separated from the font height with a space character.
&"<K"Font color, for example(RED): &FF0000
&GImage script
+ For example: "&Arial,Bold&8Header Note" +
+
+ + + Sets a script formatting the footer of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ dddd + Footer format script.

Script commands:

Command¡¡Description¡¡
&PCurrent page number¡¡
&NPage count¡¡
&DCurrent date¡¡
&TCurrent time
&ASheet name
&FFile name without path
&"<FontName>"Font name, for example: &"Arial"
&"<FontName>, <FontStyle>"Font name and font style, for example: &"Arial,Bold"
&<FontSize>Font size. If this command is followed by a plain number to be printed in the header, it will be separated from the font height with a space character.
&GImage script
+ For example: "&Arial,Bold&8Footer Note" +
+ + + Sets a script formatting the even page header of an Excel file. + Only effect in Excel 2007 when IsHFDiffOddEven is true. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Header format script. +
+ + + Gets a script formatting the even header of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ +
+ + + Sets a script formatting the even page footer of an Excel file. + Only effect in Excel 2007 when IsHFDiffOddEven is true. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Footer format script. +
+ + + Gets a script formatting the even footer of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ +
+ + + Sets a script formatting the first page header of an Excel file. + Only effect in Excel 2007 when IsHFDiffFirst is true. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Header format script. +
+ + + Gets a script formatting the first page header of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ +
+ + + Sets a script formatting the first page footer of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Footer format script. +
+ + + Gets a script formatting the first page footer of an Excel file. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ +
+ + + True means that the header/footer of the odd pages is different with odd pages. + + + + + True means that the header/footer of the first page is different with other pages. + + + + + Indicates whether header and footer are scaled with document scaling. + Only applies for Excel 2007. + + + + + Indicates whether header and footer margins are aligned with the page margins. + If this property is true, the left header and footer will be aligned with the left margin, + and the right header and footer will be aligned with the right margin. + This option is enabled by default. + + + + + Sets an image in the header of a worksheet. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Image data. + Returns object. +
+ + + Sets an image in the footer of a worksheet. + + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Image data. + Returns object. +
+ + + Sets an image in the header/footer of a worksheet. + + Indicates whether setting the picture of first page header/footer. + Indicates whether setting the picture of even page header/footer. + Indicates whether setting the picture of header/footer. + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Image data. + Returns object. +
+ + + Gets the object of the header / footer. + + Indicates whether it is in the header or footer. + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Returns object. + Returns null if there is no picture. +
+ + + Gets the object of the header / footer. + + Indicates whether getting the picture of first page header/footer. + Indicates whether getting the picture of even page header/footer. + Indicates whether getting the picture of header/footer. + +

0:Left Section.

+

1:Center Section

+

2:Right Section

+ + Returns object. +
+ + + Represents paper size constants. + + + + + Letter (8-1/2 in. x 11 in.) + + + + + Letter Small (8-1/2 in. x 11 in.) + + + + + Tabloid (11 in. x 17 in.) + + + + + Ledger (17 in. x 11 in.) + + + + + Legal (8-1/2 in. x 14 in.) + + + + + Statement (5-1/2 in. x 8-1/2 in.) + + + + + Executive (7-1/4 in. x 10-1/2 in.) + + + + + A3 (297 mm x 420 mm) + + + + + A4 (210 mm x 297 mm) + + + + + A4 Small (210 mm x 297 mm) + + + + + A5 (148 mm x 210 mm) + + + + + JIS B4 (257 mm x 364 mm) + + + + + JIS B5 (182 mm x 257 mm) + + + + + Folio (8-1/2 in. x 13 in.) + + + + + Quarto (215 mm x 275 mm) + + + + + 10 in. x 14 in. + + + + + 11 in. x 17 in. + + + + + Note (8-1/2 in. x 11 in.) + + + + + Envelope #9 (3-7/8 in. x 8-7/8 in.) + + + + + Envelope #10 (4-1/8 in. x 9-1/2 in.) + + + + + Envelope #11 (4-1/2 in. x 10-3/8 in.) + + + + + Envelope #12 (4-1/2 in. x 11 in.) + + + + + Envelope #14 (5 in. x 11-1/2 in.) + + + + + C size sheet + + + + + D size sheet + + + + + E size sheet + + + + + Envelope DL (110 mm x 220 mm) + + + + + Envelope C5 (162 mm x 229 mm) + + + + + Envelope C3 (324 mm x 458 mm) + + + + + Envelope C4 (229 mm x 324 mm) + + + + + Envelope C6 (114 mm x 162 mm) + + + + + Envelope C65 (114 mm x 229 mm) + + + + + Envelope B4 (250 mm x 353 mm) + + + + + Envelope B5 (176 mm x 250 mm) + + + + + Envelope B6 (176 mm x 125 mm) + + + + + Envelope Italy (110 mm x 230 mm) + + + + + Envelope Monarch (3-7/8 in. x 7-1/2 in.) + + + + + Envelope (3-5/8 in. x 6-1/2 in.) + + + + + U.S. Standard Fanfold (14-7/8 in. x 11 in.) + + + + + German Standard Fanfold (8-1/2 in. x 12 in.) + + + + + German Legal Fanfold (8-1/2 in. x 13 in.) + + + + + B4 (ISO) 250 x 353 mm + + + + + Japanese Postcard (100mm ¡Á 148mm) + + + + + 9? ¡Á 11? + + + + + 10? ¡Á 11? + + + + + 15? ¡Á 11? + + + + + Envelope Invite(220mm ¡Á 220mm) + + + + + US Letter Extra 9 \275 x 12 in + + + + + US Legal Extra 9 \275 x 15 in + + + + + US Tabloid Extra 11.69 x 18 in + + + + + A4 Extra 9.27 x 12.69 in + + + + + Letter Transverse 8 \275 x 11 in + + + + + A4 Transverse 210 x 297 mm + + + + + Letter Extra Transverse 9\275 x 12 in + + + + + SuperA/SuperA/A4 227 x 356 mm + + + + + SuperB/SuperB/A3 305 x 487 mm + + + + + US Letter Plus 8.5 x 12.69 in + + + + + A4 Plus 210 x 330 mm + + + + + A5 Transverse 148 x 210 mm + + + + + B5 (JIS) Transverse 182 x 257 mm + + + + + A3 Extra 322 x 445 mm + + + + + A5 Extra 174 x 235 mm + + + + + B5 (ISO) Extra 201 x 276 mm + + + + + A2 420 x 594 mm + + + + + A3 Transverse 297 x 420 mm + + + + + A3 Extra Transverse 322 x 445 mm + + + + + Japanese Double Postcard 200 x 148 mm + + + + + A6 105 x 148 mm + + + + + Japanese Envelope Kaku #2 + + + + + Japanese Envelope Kaku #3 + + + + + Japanese Envelope Chou #3 + + + + + Japanese Envelope Chou #4 + + + + + 11in ¡Á 8.5in + + + + + 420mm ¡Á 297mm + + + + + 297mm ¡Á 210mm + + + + + 210mm ¡Á 148mm + + + + + B4 (JIS) Rotated 364 x 257 mm + + + + + B5 (JIS) Rotated 257 x 182 mm + + + + + Japanese Postcard Rotated 148 x 100 mm + + + + + Double Japanese Postcard Rotated 148 x 200 mm + + + + + A6 Rotated 148 x 105 mm + + + + + Japanese Envelope Kaku #2 Rotated + + + + + Japanese Envelope Kaku #3 Rotated + + + + + Japanese Envelope Chou #3 Rotated + + + + + Japanese Envelope Chou #4 Rotated + + + + + B6 (JIS) 128 x 182 mm + + + + + B6 (JIS) Rotated 182 x 128 mm + + + + + 12 x 11 in + + + + + Japanese Envelope You #4 + + + + + Japanese Envelope You #4 Rotated + + + + + PRC 16K 146 x 215 mm + + + + + PRC 32K 97 x 151 mm + + + + + PRC 32K(Big) 97 x 151 mm + + + + + PRC Envelope #1 102 x 165 mm + + + + + PRC Envelope #2 102 x 176 mm + + + + + PRC Envelope #3 125 x 176 mm + + + + + PRC Envelope #4 110 x 208 mm + + + + + PRC Envelope #5 110 x 220 mm + + + + + PRC Envelope #6 120 x 230 mm + + + + + PRC Envelope #7 160 x 230 mm + + + + + PRC Envelope #8 120 x 309 mm + + + + + PRC Envelope #9 229 x 324 mm + + + + + PRC Envelope #10 324 x 458 mm + + + + + PRC 16K Rotated + + + + + PRC 32K Rotated + + + + + PRC 32K(Big) Rotated + + + + + PRC Envelope #1 Rotated 165 x 102 mm + + + + + PRC Envelope #2 Rotated 176 x 102 mm + + + + + PRC Envelope #3 Rotated 176 x 125 mm + + + + + PRC Envelope #4 Rotated 208 x 110 mm + + + + + PRC Envelope #5 Rotated 220 x 110 mm + + + + + PRC Envelope #6 Rotated 230 x 120 mm + + + + + PRC Envelope #7 Rotated 230 x 160 mm + + + + + PRC Envelope #8 Rotated 309 x 120 mm + + + + + PRC Envelope #9 Rotated 324 x 229 mm + + + + + PRC Envelope #10 Rotated 458 x 324 mm + + + + + usual B3(13.9 x 19.7 in) + + + + + Business Card(90mm x 55 mm) + + + + + Thermal(3 x 11 in) + + + + + Represents the custom paper size. + + + + + Represents the way comments are printed with the sheet. + + + + + Represents to print comments as displayed on sheet. + + + + + Represents not to print comments. + + + + + Represents to print comments at end of sheet. + + + + + Represents print errors constants. + + + + + Represents not to print errors. + + + + + Represents to print errors as "--". + + + + + Represents to print errors as displayed. + + + + + Represents to print errors as "#N/A". + + + + + Represent print order constants. + + + + + Down, then over + + + + + Over, then down + + + + + Represents the printed chart size. + + + + + Use full page. + + + + + Scale to fit page. + + + + + Custom. + + + + + Encapsulates the object that represents a vertical page break. + + + + [C#] + //Add a pagebreak at G5 + excel.Worksheets[0].HorizontalPageBreaks.Add("G5"); + excel.Worksheets[0].VerticalPageBreaks.Add("G5"); + + [VB] + 'Add a pagebreak at G5 + excel.Worksheets(0).HorizontalPageBreaks.Add("G5") + excel.Worksheets(0).VerticalPageBreaks.Add("G5") + + + + + + Gets the start row index of the vertical page break. + + + + + Gets the end row index of the vertical page break. + + + + + Gets the column index of the vertical page break. + + + + + Encapsulates a collection of objects. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element with the specified cell name. + + Cell name. + The element with the specified cell name. + + + + Adds a vertical page break to the collection. + + Start row index, zero based. + End row index, zero based. + Column index, zero based. + + object index. + This method is used to add a vertical pagebreak within a print area. + + + + Adds a vertical page break to the collection. + + Cell column index, zero based. + + object index. + Page break is added in the top left of the cell. + Please set a horizontal page break and a vertical page break concurrently. + + + + Adds a vertical page break to the collection. + + Cell row index, zero based. + Cell column index, zero based. + + object index. + Page break is added in the top left of the cell. + Please set a horizontal page break and a vertical page break concurrently. + + + + Adds a vertical page break to the collection. + + Cell name. + + object index. + Page break is added in the top left of the cell. + Please set a horizontal page break and a vertical page break concurrently. + + + + Removes the VPageBreak element at a specified name. + + Element index, zero based. + + + + A specified range to be allowed to edit when the sheet protection is ON. + + + + + Gets the Range title. This is used as a descriptor, not as a named range definition. + + + + + Gets the object represents the cell area to be protected. + + + + + Gets all referred areas. + + Returns all referred areas. + + + + Adds a referred area to this + + The start row. + The start column. + The end row. + The end column. + + + + Represents the password to protect the range. + + + + + The security descriptor defines user accounts who may edit this range without providing a password to access the range. + + + + + Encapsulates a collection of objects. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Adds a item to the collection. + + Range title. This is used as a descriptor, not as a named range definition. + Start row index of the range. + Start column index of the range. + End row index of the range. + End column index of the range. + object index. + + + + Represents the various types of protection options available for a worksheet. + Only used in ExcelXP and above version. + + + + + [C#] + + //Allowing users to select locked cells of the worksheet + worksheet.Protection.AllowSelectingLockedCell = true; + //Allowing users to select unlocked cells of the worksheet + worksheet.Protection.AllowSelectingUnlockedCell = true; + + [Visual Basic] + + 'Allowing users to select locked cells of the worksheet + worksheet.Protection.AllowSelectingLockedCell = True + 'Allowing users to select unlocked cells of the worksheet + worksheet.Protection.AllowSelectingUnlockedCell = True + + + + + + Copy protection info. + + + + + + + Represents if the deletion of columns is allowed on a protected worksheet. + + The columns containing the cells to be deleted must be unlocked when the sheet is protected, + and "Select unlocked cells" option must be enabled. + + + + Represents if the deletion of columns is allowed on a protected worksheet. + + The columns containing the cells to be deleted must be unlocked when the sheet is protected, + and "Select unlocked cells" option must be enabled. + NOTE: This member is now obsolete. Instead, + please use Protection.AllowDeletingColumn property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the deletion of rows is allowed on a protected worksheet. + + The rows containing the cells to be deleted must be unlocked when the sheet is protected, + and "Select unlocked cells" option must be enabled. + + + + Represents if the deletion of rows is allowed on a protected worksheet. + + The rows containing the cells to be deleted must be unlocked when the sheet is protected, + and "Select unlocked cells" option must be enabled. + NOTE: This member is now obsolete. Instead, + please use Protection.AllowDeletingRow property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the user is allowed to make use of an AutoFilter that was created before the sheet was protected. + + + + + Represents if the user is allowed to make use of an AutoFilter that was created before the sheet was protected. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowFiltering property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the formatting of cells is allowed on a protected worksheet. + + + + + Represents if the formatting of cells is allowed on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowFormattingCell property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the formatting of columns is allowed on a protected worksheet + + + + + Represents if the formatting of columns is allowed on a protected worksheet + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowFormattingColumn property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the formatting of rows is allowed on a protected worksheet + + + + + Represents if the formatting of rows is allowed on a protected worksheet + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowFormattingRow property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the insertion of columns is allowed on a protected worksheet + + + + + Represents if the insertion of columns is allowed on a protected worksheet + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowInsertingColumn property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the insertion of hyperlinks is allowed on a protected worksheet + + + + + Represents if the insertion of hyperlinks is allowed on a protected worksheet + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowInsertingHyperlink property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the insertion of rows is allowed on a protected worksheet + + + + + Represents if the insertion of rows is allowed on a protected worksheet + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowInsertingRow property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the sorting option is allowed on a protected worksheet. + + + + + Represents if the sorting option is allowed on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowSorting property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the user is allowed to manipulate pivot tables on a protected worksheet. + + + + + Represents if the user is allowed to manipulate pivot tables on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowUsingPivotTable property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the user is allowed to edit contents of locked cells on a protected worksheet. + + + + + Represents if the user is allowed to edit contents of locked cells on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowEditingContent property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the user is allowed to manipulate drawing objects on a protected worksheet. + + + + + Represents if the user is allowed to manipulate drawing objects on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowEditingObject property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the user is allowed to edit scenarios on a protected worksheet. + + + + + Represents if the user is allowed to edit scenarios on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowEditingScenario property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents the password to protect the worksheet. + + + If password is set to null or blank string, you can unprotect the worksheet or workbook without using a password. Otherwise, you must specify the password to unprotect the worksheet or workbook. + + + + + Gets the hash of current password. + + + + + Indicates whether the worksheets is protected with password. + + + + + Verifies password. + + The password. + + + + + + Represents if the user is allowed to select locked cells on a protected worksheet. + + + + + Represents if the user is allowed to select locked cells on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowSelectingLockedCell property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents if the user is allowed to select unlocked cells on a protected worksheet. + + + + + Represents if the user is allowed to select unlocked cells on a protected worksheet. + + NOTE: This member is now obsolete. Instead, + please use Protection.AllowSelectingUnlockedCell property. + This property will be removed 12 months later since June 2010. + Aspose apologizes for any inconvenience you may have experienced. + + + + Represents workbook/worksheet protection type. + + + + + Represents to protect all. + + + + + Represents to protect contents, used in Worksheet protection. + + + + + Represents to protect objects, used in Worksheet protection. + + + + + Represents to protect scenarios, used in Worksheet protection. + + + + + Represents to protect structure, used in Workbook protection. + + + + + Represents to protect window, used in Workbook protection. + + + + + Represents no protection. Only for Reading property. + + + + + Specifies write protection settings for a workbook. + + + + + Gets and sets the author. + + + + + Indicates if the Read Only Recommended option is selected. + + + + + Indicates whether this workbook is write protected. + + + + + Sets the protected password to modify the file. + + + + + Returns true if the specified password is the same as the write-protection password the file was protected with. + + The specified password. + + + + + + Represents mashup data. + + + + + Gets all power query formulas. + + + + + Gets all parameters of power query formulas. + + + + + Represents the definition of power query formula. + + + + + Gets the definition of the power query formula. + + + + + Gets and sets the name of the power query formula. + + + + + Gets all items of power query formula. + + + + + Represents all power query formulas in the mashup data. + + + + + Gets by the index in the list. + + The index. + + + + + + Gets by the name of the power query formula. + + The name of the item. + + + + + + Represents the function of power query. + + + + + Gets and sets the definition of function. + + + + + Represents the item of the power query formula. + + + + + Gets the name of the item. + + + + + Gets the value of the item. + + + + + Represents all item of the power query formula. + + + + + Gets by the index in the list. + + The index. + + + + + + Gets by the name of the item. + + The name of the item. + + + + + + Represents the parameter of power query formula. + + + + + Gets the name of parameter. + + + + + Gets the value of parameter. + + + + + Gets the definition of the parameter. + + + + + Represents the + + + + + Gets by the index in the list. + + The index. + + + + + + Gets by the name of the item. + + The name of the item. + + + + + + Represents QueryTable information. + + + + + Gets the connection id of the query table. + + + + + Gets the relate external connection. + + + + + Gets the name of querytable. + + + + + Gets the range of the result. + + + + + + + Returns or sets the PreserveFormatting of the object. + + + + + Returns or sets the AdjustColumnWidth of the object. + + + + + A collection of objects that represent QueryTable collection information. + + + + + Gets the querytable by the specific index. + + The index. + The querytable + + + + Encapsulates the object that represents a range of cells within a spreadsheet. + + + + + Gets all hyperlink in the range. + + + + + Gets the enumerator for cells in this Range. + + The cells enumerator + When traversing elements by the returned Enumerator, the cells collection + should not be modified(such as operations that will cause new Cell/Row be instantiated or existing Cell/Row be deleted). + Otherwise the enumerator may not be able to traverse all cells correctly(some elements may be traversed repeatedly or skipped). + + + + Indicates whether the range is intersect. + + The range. + Whether the range is intersect. + If the two ranges area not in the same worksheet ,return false. + + + + Returns a Range object that represents the rectangular intersection of two ranges. + + The intersecting range. + a Range object + If the two ranges are not intersected, returns null. + + + + Returns the union of two ranges. + + The range + The union of two ranges. + + + + + Gets the count of rows in the range. + + + + + Gets the count of columns in the range. + + + + + Gets all cell count in the range. + + NOTE: This property is now obsolete. + Instead, please use RowCount and ColumnCount to get total cells count. + This property will be removed 12 months later since February 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or sets the name of the range. + + Named range is supported. For example, +

range.Name = "Sheet1!MyRange";

+
+ + + Gets the range's refers to. + + + + + Gets address of the range. + + + + + Gets the index of the first row of the range. + + + + + Gets the index of the first column of the range. + + + + + Combines a range of cells into a single cell. + + + Reference the merged cell via the address of the upper-left cell in the range. + + + + + Unmerges merged cells of this range. + + + + + Puts a value into the range, if appropriate the value will be converted to other data type and cell's number format will be reset. + + Input value + True: converted to other data type if appropriate. + True: set the number format to cell's style when converting to other data type + + + + Gets and sets the value of the range. + + + If the range contains multiple cells, return a two-dimension object. + If applies object array to the range, it should be a two-dimension object. + + + + + Applies formats for a whole range. + + The style object which will be applied. + Flags which indicates applied formatting properties. + Each cell in this range will contains a object. + So this is a memory-consuming method. Please use it carefully. + + + + Sets the style of the range. + + The Style object. + + + + Sets the outline borders around a range of cells with same border style and color. + + Border style. + Border color. + + + + Sets out line borders around a range of cells. + + Border styles. + Border colors. + + Both the length of borderStyles and borderStyles must be 4. + The order of borderStyles and borderStyles must be top,bottom,left,right + + + + + Sets outline border around a range of cells. + + Border edge. + Border style. + Border color. + + + + Sets or gets the column width of this range + + + + + Sets or gets the height of rows in this range + + + + + Move the current range to the dest range. + + The start row of the dest range. + The start column of the dest range. + + + + Copies cell data (including formulas) from a source range. + + Source object. + + + + Copies cell value from a source range. + + Source object. + + + + Copies style settings from a source range. + + Source object. + + + + Copying the range with paste special options. + + The source range. + The paste special options. + + + + Copies data (including formulas), formatting, drawing objects etc. from a source range. + + Source object. + + + + Gets object in this range. + + Row offset in this range, zero based. + Column offset in this range, zero based. + + object. + + + + Gets object or null in this range. + + Row offset in this range, zero based. + Column offset in this range, zero based. + + object. + + + + Gets range by offset. + + Row offset in this range, zero based. + Column offset in this range, zero based. + + + + + + Gets a Range object that represents the entire column (or columns) that contains the specified range. + + + + + Gets a Range object that represents the entire row (or rows) that contains the specified range. + + + + + Gets the object which contains this range. + + + + + Returns a string represents the current Range object. + + + + + + + Exports data in this range to a object. + + Exported object. + + + + Exports data in this range to a object. + + The options of exporting range to datatable. + Exported object. + + + + Exports data in this range to a object. + + Exported object. + All data in the collection are converted to strings. + + + + Encapsulates a collection of objects. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Adds a item to the collection. + + Range object + + + + + + Represents a referred area by the formula. + + + + + Indicates whether this is an external link. + + + + + Get the external file name if this is an external reference. + + + + + Indicates which sheet this reference is in. + + + + + Indicates whether this is an area. + + + If this is not an area, only StartRow and StartColumn effect. + + + + + The end column of the area. + + + + + The start column of the area. + + + + + The end row of the area. + + + + + The start row of the area. + + + + + Gets cell values in this area. + + If this area is invalid, "#REF!" will be returned; + If this area is one single cell, then return the cell value object; + Otherwise return one 2D array for all values in this area. + + + + Gets cell values in this area. + + In this range, if there are some formulas that have not been calculated, + this flag denotes whether those formulas should be calculated recursively + If this area is invalid, "#REF!" will be returned; + If this area is one single cell, then return the cell value object; + Otherwise return one 2D array for all values in this area. + + + + Gets cell value with given offset from the top-left of this area. + + row offset from the start row of this area + column offset from the start row of this area + "#REF!" if this area is invalid; + "#N/A" if given offset out of this area; + Otherwise return the cell value at given position. + + + + Gets cell value with given offset from the top-left of this area. + + row offset from the start row of this area + column offset from the start row of this area + Whether calculate it recursively if the specified reference is formula + "#REF!" if this area is invalid; + "#N/A" if given offset out of this area; + Otherwise return the cell value at given position. + + + + Returns the simple string representation of this area. + + + + + + + Represents all referred cells and areas. + + + + + + + + + + + + + Renames strategy when columns contains the duplicate names. + + + + + Throws exception. + + + + + Named with digit. + + + + + Named with letter. + + + + + Represents how to loading the linked resource. + + + + + Loads this resource as usual. + + + + + Skips loading of this resource. + + + + + Use stream provided by user + + + + + Represents the revision. + + + + + Represents the type of revision. + + + + + Gets the worksheet. + + + + + Gets the number of this revision. + + + Zero means this revision does not contains id. + + + + + Represents the type of revision action. + + + + + Add revision. + + + + + Delete revision. + + + + + Column delete revision. + + + + + Row delete revision. + + + + + Column insert revision. + + + + + Row insert revision. + + + + + represents a revision record of information about a formatting change. + + + + + Gets the type of the revision. + + + + + Gets the location where the formatting was applied. + + + + + Represents the revision that changing cells. + + + + + Represents the type of revision. + + + + + Gets the name of the cell. + + + + + Gets the row index of the cell. + + + + + Gets the column index of the cell. + + + + + Indicates whether this cell is new formatted. + + + + + Indicates whether this cell is old formatted. + + + + + Gets the old formula. + + + + + Gets old value of the cell. + + + + + Gets new value of the cell. + + + + + Gets the old formula. + + + + + Gets the new style of the cell. + + + + + Gets the old style of the cell. + + + + + Represents a revision record of a cell comment change. + + + + + Gets the type of revision. + + + + + Gets the row index of the which contains a comment. + + + + + Gets the column index of the which contains a comment. + + + + + Gets the name of the cell. + + + + + Gets the action type of the revision. + + + + + Indicates whether it's an old comment. + + + + + Gets Length of the comment text added in this revision. + + + + + Gets Length of the comment before this revision was made. + + + + + Represents a revision record on a cell(s) that moved. + + + + + Represents the type of revision. + + + + + Gets the source area. + + + + + Gets the destination area. + + + + + Gets the source worksheet. + + + + + Represents all revision logs. + + + + + Gets by the index. + + + + + + + + + Represents a revision record of adding or removing a custom view to the workbook + + + + + Gets the type of revision. + + + + + Gets the type of action. + + + + + Gets the globally unique identifier of the custom view. + + + + + Represents a revision record of a defined name change. + + + + + Represents the type of revision. + + + + + Gets the text of the defined name. + + + + + Gets the old formula. + + + + + Gets the formula. + + + + + represents a revision record of information about a formatting change. + + + + + Gets the type of revision. + + + + + The range to which this formatting was applied. + + + + + Gets the applied style. + + + + + Represents a revision record of a row/column insert/delete action. + + + + + Represents the type of revision. + + + + + Gets the inserting/deleting range. + + + + + Gets the action type of this revision. + + + + + Gets revision list by this operation. + + + + + Represents a revision record of a sheet that was inserted. + + + + + Gets the type of revision. + + + + + Gets the action type of the revision. + + + + + Gets the name of the worksheet. + + + + + Gets the zero based position of the new sheet in the sheet tab bar. + + + + + Represents the revision log. + + + + + Gets all revisions in this log. + + + + + Represents all revision logs. + + + + + Gets and sets the number of days the spreadsheet application will keep the change history for this workbook. + + + + + Gets by index. + + The index. + Returns object. + + + + Represents a revision record which indicates that there was a merge conflict. + + + + + Gets the type of revision. + + + + + Represents a revision of a query table field change. + + + + + Represents the type of the revision. + + + + + Gets the location of the affected query table. + + + + + Gets ID of the specific query table field that was removed. + + + + + Represents a revision of renaming sheet. + + + + + Represents the type of the revision. + + + + + Gets the old name of the worksheet. + + + + + Gets the new name of the worksheet. + + + + + Represents the revision type. + + + + + Custom view. + + + + + Defined name. + + + + + Cells change. + + + + + Auto format. + + + + + Merge conflict. + + + + + Comment. + + + + + Format. + + + + + Insert worksheet. + + + + + Move cells. + + + + + Undo. + + + + + Query table. + + + + + Inserting or deleting. + + + + + Rename worksheet. + + + + + Unknown. + + + + + Represents a single row in a worksheet. + + + + + Get the cell by specific index in the list. + + The position. + The Cell object. + NOTE: This member is now obsolete. + Instead, please use Row.GetEnumerator() method to iterate all cells in this row. + This property will be removed 12 months later since February 2015. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates whether the row contains any data + + + + + Gets the cell. + + The column index + + + + + + Gets the cells enumerator + + The cells enumerator + + + + Gets the cell or null in the specific index. + + The column index + Returns the cell object if the cell exists. + Or returns null if the cell object does not exist. + + + + Gets and sets the row height in unit of Points. + + + + + Indicates whether the row is hidden. + + + + + Gets the index of this row. + + + + + Gets the group level of the row. + + + + + Indicates that row height and default font height matches. + + + + + Represents the style of this row. + + You have to call Row.ApplyStyle() method to save your changing with the row style, + otherwise it will not effect. + + + + + Copy settings of row, such as style, height, visibility, ...etc. + + the source row whose settings will be copied to this one + whether check and gather style. + Only takes effect and be needed when two row objects belong to different workbook and the styles of two workbooks are different. + + + + Gets the first cell object in the row. + + + + + Gets the first non-blank cell in the row. + + + + + Gets the last cell object in the row. + + + + + Gets the last non-blank cell in the row. + + + + + Applies formats for a whole row. + + The style object which will be applied. + Flags which indicates applied formatting properties. + + + + Checks whether this object refers to the same row with another. + + another object + true if two objects refers to the same row. + + + + Checks whether this object refers to the same row with another row object. + + another row object + true if two row objects refers to the same row. + + + + Collects the objects that represent the individual rows in a worksheet. + + + + + Gets the number of rows in this collection. + + + + + Gets an enumerator that iterates through this collection + + enumerator + + + + Gets the row object by the position in the list. + + The position. + The Row object at given position. + + + + Gets a object by given row index. The Row object of given row index will be instantiated if it does not exist before. + + + + + Clear all rows and cells. + + + + + Remove the row at the specified index + + zero-based row index + + + + Represents the options of saving dif file. + + + + + Creates the options for saving DIF file. + + + + + Represents options of saving .docx file. + + + + + Represents options of saving .docx file. + + + + + Represents options of saving .docx file. + + + If True, the workbook will be converted into some pictures of .docx file. + If False, the workbook will be converted into some tables of .docx file. + + + + Represents the options for exporting html data. + + + + + Export file to html which only contains table part. + + + + + Export all the data to html. + + + + + Represents the type of target attribute in HTML tag. + + + + + Opens the linked document in a new window or tab + + + + + Opens the linked document in the parent frame + + + + + Opens the linked document in the same frame as it was clicked (this is default) + + + + + Opens the linked document in the full body of the window + + + + + Represents the options for saving html file. + + + + + Creates options for saving html file. + + + + + Creates options for saving htm file. + + The saving file format. + + + + The title of the html page. + Only for saving to html stream. + + + + + The directory that the attached files will be saved to. + Only for saving to html stream. + + + + + Specify the Url prefix of attached files such as image in the html file. + Only for saving to html stream. + + + + + Specify the default font name for exporting html, the default font will be used when the font of style is not existing, + If this property is null, Aspose.Cells will use universal font which have the same family with the original font, + the default value is null. + + + + + Indicates if exporting comments when saving file to html, the default value is false. + + + + + Indicates if disable Downlevel-revealed conditional comments when exporting file to html, the default value is false. + + + + + Indicates whether exporting image files to temp directory. + Only for saving to html stream. + + + + + Indicates whether using scalable unit to describe the image width + when using scalable unit to describe the column width. + The default value is true. + + + + + Indicates whether using scalable unit to describe the column width when exporting file to html. + The default value is false. + + + + + Indicates whether exporting the single tab when the file only has one worksheet. + The default value is false. + + + + + Specifies whether images are saved in Base64 format to HTML, MHTML or EPUB. + + + When this property is set to true image data is exported directly on the + img elements and separate files are not created. + + + + + Indicates if exporting the whole workbook to html file. + + + + + Indicates if only exporting the print area to html file. The default value is false. + + + + + Gets or Sets the exporting CellArea of current active Worksheet. + If you set this attribute, the print area of current active Worksheet will be omitted. + Only the specified area will be exported when saving the file to html. + + + + + Parse html tag in cell,like
,as cell value,or as html tag,default is true +
+
+ + + Indicates if a cross-cell string will be displayed in the same way as MS Excel when saving an Excel file in html format. + By default the value is Default, so, for cross-cell strings, there is little difference between the html files created by Aspose.Cells and MS Excel. + But the performance for creating large html files,setting the value to Cross would be several times faster than setting it to Default or Fit2Cell. + + + + + Hidden column(the width of this column is 0) in excel,before save this into html format, + if HtmlHiddenColDisplayType is "Remove",the hidden column would not been output, + if the value is "Hidden", the column would been output,but was hidden,the default value is "Hidden" + + + + + Hidden row(the height of this row is 0) in excel,before save this into html format, + if HtmlHiddenRowDisplayType is "Remove",the hidden row would not been output, + if the value is "Hidden", the row would been output,but was hidden,the default value is "Hidden" + + + + + If not set,use Encoding.UTF8 as default enconding type. + + + + + Gets or sets the ExportObjectListener for exporting objects. + + + NOTE: This property is now obsolete. Instead, + please use HtmlSaveOptions.IStreamProvider property. + This property will be removed 12 months later since August 2015. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or sets the IFilePathProvider for exporting Worksheet to html separately. + + + + + Gets or sets the IStreamProvider for exporting objects. + + + + + Get the ImageOrPrintOptions object before exporting + + + + + Indicating if exporting the hidden worksheet content.The default value is true. + + + + + Indicating if html or mht file is presentation preference.The default value is false.if you want to get + more beautiful presentation,please set the value to true. + + + + + Gets and sets the prefix of the css name,the default value is "". + + + + + Gets and sets the prefix of the type css name such as tr,col,td and so on, they are contained in the table element + which has the specific TableCssId attribute. The default value is "". + + + + + Indicating whether using full path link in sheet00x.htm,filelist.xml and tabstrip.htm. + The default value is false. + + + + + Indicating whether export the worksheet css separately.The default value is false. + + + + + Indicating whether exporting the similar border style when the border style is not supported by browsers. + If you want to import the html or mht file to excel, please keep the default value. + The default value is false. + + + + + Indicates whether merging empty TD element forcely when exporting file to html. + The size of html file will be reduced significantly after setting value to true. The default value is false. + If you want to import the html file to excel or export perfect grid lines when saving file to html, + please keep the default value. + + + + + Indicates whether exporting excel coordinate of nonblank cells when saving file to html. The default value is false. + If you want to import the output html to excel, please keep the default value. + + + + + Indicates whether exporting extra headings when the length of text is longer than max display column. + The default value is false. If you want to import the html file to excel, please keep the default value. + + + + + Indicates whether exporting headings when saving file to html.The default value is false. + If you want to import the html file to excel, please keep the default value. + + + + + Indicates whether exporting formula when saving file to html. The default value is true. + If you want to import the output html to excel, please keep the default value. + + + + + Indicates whether adding tooltip text when the data can't be fully displayed. + The default value is false. + + + + + Indicating whether exporting the gridlines.The default value is false. + + + + + Indicating whether exporting bogus bottom row data. The default value is true.If you want to import the html or mht file + to excel, please keep the default value. + + + + + Indicating whether excluding unused styles.The default value is false.If you want to import + the html or mht file to excel, please keep the default value. + + + + + Indicating whether exporting document properties.The default value is true.If you want to import + the html or mht file to excel, please keep the default value. + + + + + Indicating whether exporting worksheet properties.The default value is true.If you want to import + the html or mht file to excel, please keep the default value. + + + + + Indicating whether exporting workbook properties.The default value is true.If you want to import + the html or mht file to excel, please keep the default value. + + + + + Indicating whether exporting frame scripts and document properties. The default value is true.If you want to import the html or mht file + to excel, please keep the default value. + + + + + Indicating the rule of exporting html file data.The default value is All. + + + + + Indicating the type of target attribute in <a> link,The default value is HtmlLinkTargetType.Parent. + + + + + Represents image save options + + + + + Creates the options for saving image file. + + + + + Creates the options for saving image file. + + The file format. + It must be tiff or svg. + + + + Additional image creation options + + + + + Represents the save options for markdown. + + + + + Creates options for saving markdown document + + + + + Gets and sets the default encoding. + + + + + Gets and sets the format strategy when exporting the cell value as string. + + + + + The Data provider to provide cells data for saving workbook in light mode. + + + + + Gets and sets the line separator. + + + + + Represents the options of saving ods file. + + + + + Creates the options of saving ods file. + + + + + Creates the options of saving ods file. + + + + + + + Gets and sets the generator of the ods file. + + + + + Indicates whether the ods file should be saved as ODF format version 1.1. Default is false. + + + + + Allows to specify which OOXML specification will be used when saving in the Xlsx format. + + + + + ECMA-376 1st Edition, 2006. + + + + + ISO/IEC 29500:2008 Strict compliance level. + + + + + The Ooxml compression type + + + + + The fastest but least effective compression. + + + + + A little slower, but better, than level 1. + + + + + A little slower, but better, than level 2. + + + + + A little slower, but better, than level 3. + + + + + A little slower than level 4, but with better compression. + + + + + A good balance of speed and compression efficiency. + + + + + Pretty good compression! + + + + + Better compression than Level7! + + + + + The "best" compression, where best means greatest reduction in size of the input data stream. + This is also the slowest compression. + + + + + Represents the options of saving office open xml file. + + + + + Creates the options for saving office open xml file. + + + + + Creates the options for saving office open xml file. + + The file format. + It must be xlsx,xltx,xlsm,xltm. + + + + Indicates if export cell name to Excel2007 .xlsx (.xlsm, .xltx, .xltm) file. + If the output file may be accessed by SQL Server DTS, this value must be true. + Setting the value to false will highly increase the performance and reduce the file size when creating large file. + Default value is true. + + + + + The Data provider to provide cells data for saving workbook in light mode. + + + + + Indicates whether update scaling factor before saving the file + if the PageSetup.FitToPagesWide and PageSetup.FitToPagesTall properties control how the worksheet is scaled. + + + The default value is false for performance. + + + + + + Always use ZIP64 extensions when writing zip archives, even when unnecessary. + + + + + Indicates whether embedding Ooxml files of OleObject as ole object. + + + Only for OleObject. + + + + + Gets and sets the compression type for ooxml file. + + The default value is OoxmlCompressionType.Level2. + + + + Represents the options for saving pdf file. + + + + + Creates the options for saving pdf file. + + + + + Creates the options for saving pdf file. + + The save format.It must be pdf. + NOTE: This constructor is now obsolete. + Instead, please use PdfSaveOptions() constructor. + This property will be removed 12 months later since January 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates which pages will not be printed. + + + + + True to embed true type fonts. + Affects only ASCII characters 32-127. + Fonts for character codes greater than 127 are always embedded. + Fonts are always embedded for PDF/A-1a, PDF/A-1b standard. + Default is true. + + + + + Gets and sets the PdfBookmarkEntry object. + + + + + Workbook converts to pdf will according to PdfCompliance in this property. + + + + + When characters in the Excel are unicode and not be set with correct font in cell style, + They may appear as block in pdf,image. + Set the DefaultFont such as MingLiu or MS Gothic to show these characters. + If this property is not set, Aspose.Cells will use system default font to show these unicode characters. + + + + + When characters in the Excel are unicode and not be set with correct font in cell style, + They may appear as block in pdf,image. + Set this to true to try to use workbook's default font to show these characters first. + + + Default is true. + + + + + Set this options, when security is need in xls2pdf result. + + + + + If OnePagePerSheet is true , all content of one sheet will output to only one page in result. + The paper size of pagesetup will be invalid, and the other settings of pagesetup + will still take effect. + + + + + If AllColumnsInOnePagePerSheet is true , all column content of one sheet will output to only one page in result. + The width of paper size of pagesetup will be ignored, and the other settings of pagesetup + will still take effect. + + + + + Represents the image type when converting the chart and shape . + + + + + Indicates whether calculate formulas before saving pdf file. + + + The default value is false. + + + + + Indicate the compression algorithm + + + + + Gets or sets the IStreamProvider for exporting objects. + + NOTE: This member is now obsolete. Instead, + please use Border property. + This property will be removed 12 months later since January 2018. + Aspose apologizes for any inconvenience you may have experienced. + + + + Indicates whether check font compatibility for every character in text. + + + The default value is true. + Disable this property may give better performance. + But when the default or specified font of text/character cannot be used to render it, + unreadable characters(such as block) maybe occur in the generated pdf. + For such situation user should keep this property as true so that + alternative font can be searched and used to render the text instead; + + + + + Sets desired PPI(pixels per inch) of resample images and jpeg quality + All images will be converted to JPEG with the specified quality setting, + and images that are greater than the specified PPI (pixels per inch) will be resampled. + + Desired pixels per inch. 220 high quality. 150 screen quality. 96 email quality. + 0 - 100% JPEG quality. + + + + Gets or sets the 0-based index of the first page to save. + + + Default is 0. + + + + + Gets or sets the number of pages to save. + + + Default is System.Int32.MaxValue which means all pages will be rendered.. + + + + + Gets and sets the time of generating the pdf document. + + + if it is not be set, it will be the time of generating the pdf. + + + + + Gets and sets pdf optimization type. + + + Default value is + + + + Indicates whether only substitute the font of character when the cell font is not compatibility for it. + + + Default is false. We will try default font of Workbook and PdfSaveOption/system for cell font first. + + + + + Gets or sets gridline type. + + + Default is Dotted type. + + + + + Gets or sets displaying text type when the text width is larger than cell width. + + + + + Indicates if you need to hide the error while rendering. + The error can be error in shape, image, chart rendering, etc. + + + + + Indicates whether to output a blank page when there is nothing to print. + + + Default is true. + + + + + Implements this interface to get DrawObject and Bound when rendering. + + + + + Gets or sets a value determining the way are exported to PDF file. Default value is None. + + + + + Gets or sets a value determining whether or not to export document structure. + + + + + Control/Indicate progress of page saving process. + + + + + Setting for rendering Emf metafile. + + + EMF metafiles identified as "EMF+ Dual" can contain both EMF+ records and EMF records. + Either type of record can be used to render the image, only EMF+ records, or only EMF records. + When is set, then EMF+ records will be parsed while rendering to pdf, otherwise only EMF records will be parsed. + Default value is . + + + + + Indicate whether the window's title bar should display the document title. + + + If false, the title bar should instead display the name of the PDF file. + Default value is false. + + + + + Gets or sets default edit language. + + + It may display/render different layouts for text paragraph when different edit languages is set. + Default is . + + + + + Gets or sets embedded font encoding in pdf. + + + Default value is + + + + Represents the pptx save options. + + + + + Represents the pptx save options. + + + + + Represents the format in which the workbook is saved. + + + + + Comma-Separated Values(CSV) text file. + + + + + Comma-Separated Values(CSV) text file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an xlsx file. + + + + + Represents an xlsm file which enable macros. + + + + + Represents an xltx file. + + + + + Represents an xltm file which enable macros. + + + + + Represents an xltm file which enable addin macros. + + + + + Tab-Separated Values(TSV) text file. + + + + + Tab-Separated Values(TSV) text file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a tab delimited text file, same with . + + + + + Represents a html file. + + + + + Represents a mhtml file. + + + + + Open Document Sheet(ODS) file. + + + + + Open Document Sheet(ODS) file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents an Excel97-2003 xls file. + + + + + Represents an Excel 2003 xml file. + + + + + Represents an xlsb file. + + + + + If saving the file to the disk,the file format accords to the extension of the file name. + If saving the file to the stream, the file format is xlsx. + + + + + Represents unrecognized format, cannot be saved. + + + + + Represents a Pdf file. + + + + + XPS (XML Paper Specification) format. + + + + + XPS (XML Paper Specification) format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents a TIFF file. + + + + + Represents a TIFF file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + SVG file. + + + + + SVG file. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Data Interchange Format. + + + + + Represents a numbers file. + + + + + Represents markdown document. + + + + + Represents OpenDocument Flat XML Spreadsheet (.fods) file format. + + + + + Represents OpenDocument Flat XML Spreadsheet (.fods) file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents StarOffice Calc Spreadsheet (.sxc) file format. + + + + + Represents StarOffice Calc Spreadsheet (.sxc) file format. + NOTE: This member is now obsolete. Instead, + please use property. + This property will be removed 6 months later since April 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Represents .pptx file. + + + + + Represents .docx file. + + + + + Represents all save options + + + + + Gets the save file format. + + + + + Make the workbook empty after saving the file. + + + + + The cached file folder is used to store some large data. + + + + + Indicates whether validate merged cells before saving the file. + + + The default value is false. + + + + + Indicates whether merge the areas of conditional formatting and validation before saving the file. + + + The default value is false. + + + + + If true and the directory does not exist, the directory will be automatically created before saving the file. + + + The default value is false. + + + + + Indicates whether sorting defined names before saving file. + + + + + Indicates whether sorting external defined names before saving file. + + + + + Indicates whether refreshing chart cache data + + + + + The physical folder where images will be saved when exporting a workbook to Aspose.Pdf XML format. + Default is an empty string. + + + + + Gets or sets warning callback. + + + + + Indicates whether updating smart art setting. + The default value is false. + + + Only effects after calling Shape.GetResultOfSmartArt() method and the cached shapes exist in the template file. + + + + + Represents the options for saving Excel 2003 spreadml file. + + + + + Creates the options for saving Excel 2003 spreadml file. + + + + + Creates the options for saving Excel 2003 spreadml file. + + The save format. + NOTE: This constructor is now obsolete. + Instead, please use SpreadsheetML2003SaveOptions() constructor. + This property will be removed 12 months later since January 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + Causes child elements to be indented. + + + The default value is true. + If the value is false, it will reduce the size of the xml file + + + + + Limit as xls, the max row index is 65535 and the max column index is 255. + + + + + The default value is false, it means that column index will be ignored if the cell is contiguous to the previous cell. + + + + + Represents Svg save options + + + + + Creates the options for saving svg file. + + + + + Creates the options for saving svg file. + + The file format. + It must be svg. + + + + Gets and sets which worksheet should be exported. + If the value is -1, the active worksheet will be exported. + + + + + Represents the save options for csv/tab delimited/other text format. + + + + + Creates text file save options. + + + + + Creates text file save options. + + The save format of the text file. + + + + Gets and sets char Delimiter of text file. + + + + + Gets and sets the a string value as separator. + + + + + Gets and sets the default encoding. + + + + + Indicates whether always adding '"' for each field. + If true then all values will be quoted; + If false then values will only be quoted when needed(for example, + when values contain special characters such as '"' , '\n' or separator character). + Default is false. + + + NOTE: This member is now obsolete. Instead, + please use QuoteType property instead. + This property will be removed 12 months later since August 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or sets how to quote values in the exported text file. + + + + + Gets and sets the format strategy when exporting the cell value as string. + + + + + The Data provider to provide cells data for saving workbook in light mode. + + + + + Indicates whether leading blank rows and columns should be trimmed like what ms excel does. + Default is true. + + When saving with LightCells mode, this option takes no effect. + User should control the output range by the implementation of + or by speicifing + + + + Indicates whether separators should be output for blank row. + Default value is false so by default the content for blank row will be empty. + + + + + The range of cells to be exported. + + If the exported area has been specified, + will takes no effect. + + + + + Indicates whether the single quote sign should be exported as part of the value of one cell + when is true for it. Default is false. + + + + + Indicates whether exporting all sheets to the text file. + If it is false, only export the activesheet, just like MS Excel. + + + The defult value is false. + + + + + Specifies the type of using quotation marks for values in text format files. + + + + + All values that contain special characters such as quotation mark, separator character will be quoted. + Same with the behavior of ms excel for exporting text file. + + + + + All values will be quoted always. + + + + + Only quote values when needed. Such as, if one value contains quotation mark but the quotation mark is not at the begin of this value, this value will not be quoted. + + + + + All values will not be quoted. The exported text file with this type may not be read back correctly because the needed quotation marks being absent. + + + + + Represents the options for saving xlsb file. + + + + + Creates xlsb file save options. + + + + + Creates xlsb file save options. + + The save format . It must be xlsb. + NOTE: This constructor is now obsolete. + Instead, please use XlsbSaveOptions() constructor. + This property will be removed 12 months later since January 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets the compression type for ooxml file. + + The default value is OoxmlCompressionType.Level6. + + + + Indicates whether exporting all column indexes for cells. + + + The default value is true. + + + + + Represents the save options for the Excel 97-2003 file format: xls and xlt. + + + + + Creates options for saving Excel 97-2003 xls/xlt file. + + + + + Creates options for saving Excel 97-2003 xls/xlt file. + + The file format. It must be xls/xlt. + NOTE: This constructor is now obsolete. + Instead, please use XlsSaveOptions() constructor. + This property will be removed 12 months later since January 2021. + Aspose apologizes for any inconvenience you may have experienced. + + + + The Data provider to provide cells data for saving workbook in light mode. + + + + + Indicates whether saving a template file. + + + + + Indicates whether matching font color because there are 56 colors in the standard color palette. + + + + + Represents the additional options when saving the file as the Xps. + + + + + Creates options for saving xps file. + + + + + Creates options for saving xps file. + + The save format, it must be xps format. + + + + If OnePagePerSheet is true , all content of one sheet will output to only one page in result. + The paper size of pagesetup will be invalid, and the other settings of pagesetup + will still take effect. + + + + + Gets or sets the 0-based index of the first page to save. + + + Default is 0. + + + + + Gets or sets the number of pages to save. + + + Default is System.Int32.MaxValue which means all pages will be rendered.. + + + + + Represents an individual scenario. + + + + + Gets and sets the comment of scenario. + + + + + Gets and sets the name of scenario. + + + + + Gets name of user who last changed the scenario. + + + + + Indicates whether scenario is hidden. + + + + + Indicates whether scenario is locked for editing when the sheet is protected. + + + + + Gets the input cells of scenario. + + + + + Represents the list of scenarios. + + + + + Gets and sets which scenario is selected. + + + + + Indicates which scenario was last selected by the user to be run/shown. + + + + + Gets the object by the index. + + The specific index in the list. + + + + + + Adds a scenario. + + The name of scenario. + The index in the list of scenarios. + + + + Represents input cell for the scenario. + + + + + Gets and sets the row index of the input cell. + + + + + Gets and sets the column index of the input cell. + + + + + Gets and sets the input cell address. + + + + + Gets and sets value of the input cell. + + + + + Indicates whether input cell is deleted. + + + + + Represents the list of the scenario's input cells. + + + + + Gets by index in the list. + + The specific index in the list + The object + + + + Adds an input cell. + + The row index of input cell. + The column index of input cell. + The value of input cell. + + + + + + Represents a range of characters within the cell text. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Adding a new worksheet to the Excel object + workbook.Worksheets.Add(); + + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[0]; + + //Accessing the "A1" cell from the worksheet + Aspose.Cells.Cell cell = worksheet.Cells["A1"]; + + //Adding some value to the "A1" cell + cell.PutValue("Visit Aspose!"); + + //getting charactor + FontSetting charactor = cell.Characters(6, 7); + + //Setting the font of selected characters to bold + charactor.Font.IsBold = true; + + //Setting the font color of selected characters to blue + charactor.Font.Color = Color.Blue; + + //Saving the Excel file + workbook.Save("D:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Adding a new worksheet to the Excel object + workbook.Worksheets.Add() + + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Accessing the "A1" cell from the worksheet + Dim cell As Aspose.Cells.Cell = worksheet.Cells("A1") + + 'Adding some value to the "A1" cell + cell.PutValue("Visit Aspose!") + + 'getting charactor + Dim charactor As FontSetting = cell.Characters(6, 7) + + 'Setting the font of selected characters to bold + charactor.Font.IsBold = True + + 'Setting the font color of selected characters to blue + charactor.Font.Color = Color.Blue + + 'Saving the Excel file + workbook.Save("D:\book1.xls") + + + + + + + Gets the type of text node. + + + + + + + + + + + + + + + Gets the start index of the characters. + + + + + Gets the length of the characters. + + + + + Returns the font of this object. + + + + + Sets the preset WordArt style. + + The preset WordArt style. + Only for the text of shape/chart. + + + + Returns the text options. + + + + + Specifies the worksheet type. + + + + + Visual Basic module + + + + + + + + + Chart + + + + + BIFF4 Macro sheet + + + + + International Macro sheet + + + + + + + + + Dialog worksheet + + + + + Represent the shift options when deleting a range of cells. + + + + + Shift cells down. + + + + + Shift cells left. + + + + + Do not shift cells. + + + + + Shift cells right. + + + + + Shift cells up. + + + + + summary description of slicer cache + + + + + Returns or sets whether a slicer is participating in cross filtering with other slicers + that share the same slicer cache, and how cross filtering is displayed. Read/write + + + + + Returns whether the slicer associated with the specified slicer cache is based on an Non-OLAP data source. Read-only + + + + + Returns a SlicerCacheItem collection that contains the collection of all items in the slicer cache. Read-only + + + + + Returns the name of the slicer cache. + + + + + Returns the name of cache field + + + + + Represent the type of SlicerCacheCrossFilterType + + + + + The table style element of the slicer style for slicer items + with no data is not applied to slicer items with no data, and slicer items + with no data are not sorted separately in the list of slicer items in the slicer view + + + + + The table style element of the slicer style for slicer items with + no data is applied to slicer items with no data, and slicer items + with no data are sorted at the bottom in the list of slicer items in the slicer view + + + + + The table style element of the slicer style for slicer items with no data + is applied to slicer items with no data, and slicer items with no data + are not sorted separately in the list of slicer items in the slicer view. + + + + + Represent slicer data source item + + + + + Specifies whether the SlicerItem is selected or not. + + + + + Returns the label text for the slicer item. Read-only. + + + + + Represent the collection of SlicerCacheItem + + + + + Gets the SlicerCacheItem object by index. + + + + + Gets the count of the SlicerCacheItem. + + + + + Specify the sort type of SlicerCacheItem + + + + + Ascending sort type + + + + + Descending sort type + + + + + Specify the style of slicer view + + + + + built-in light style one + + + + + built-in light style two + + + + + built-in light style three + + + + + built-in light style four + + + + + built-in light style five + + + + + built-in light style six + + + + + built-in style other one + + + + + built-in style other two + + + + + built-in dark style one + + + + + built-in dark style tow + + + + + built-in dark style three + + + + + built-in dark style four + + + + + built-in dark style five + + + + + built-in dark style six + + + + + user-defined style, unsupported for now + + unsupported + + + + summary description of Slicer View + + + + + Adds PivotTable connection. + + The PivotTable object + + + + Removes PivotTable connection. + + The PivotTable object + + + + Specifies the title of the current Slicer object. + + + + + Returns or sets the descriptive (alternative) text string of the Slicer object. + + + + + Indicates whether the slicer object is printable. + + + + + Indicates whether the slicer shape is locked. + + + + + Represents the way the drawing object is attached to the cells below it. + The property controls the placement of an object on a worksheet. + + + + + Indicates whether locking aspect ratio. + + + + + Indicates whether the specified slicer can be moved or resized by using the user interface. + + + + + Refreshing the slicer.Meanwhile, Refreshing and Calculating relative PivotTables. + + + + + Returns the SlicerCache object associated with the slicer. Read-only. + + + + + Returns the Worksheet object that represents the sheet that contains the slicer. Read-only. + + + + + Specify the type of Built-in slicer style + the default type is SlicerStyleLight1 + + + + + Returns or sets the name of the specified slicer + + + + + Returns or sets the caption of the specified slicer. + + + + + Returns or sets whether the header that displays the slicer Caption is visible + the default value is true + + + + + Returns or sets the number of columns in the specified slicer. + + + + + Returns or sets the horizontal offset of slicer shape from its left column, in pixels. + + + + + Returns or sets the vertical offset of slicer shape from its top row, in pixels. + + + + + Returns or sets the width of the specified slicer, in points. + + + + + Returns or sets the width of the specified slicer, in pixels. + + + + + Returns or sets the height of the specified slicer, in points. + + + + + Returns or sets the height of the specified slicer, in pixels. + + + + + Gets or sets the width in unit of pixels for each column of the slicer.  + + + + + Returns or sets the width, in points, of each column in the slicer. + + + + + Returns or sets the height, in pixels, of each row in the specified slicer. + + + + + Returns or sets the height, in points, of each row in the specified slicer. + + + + + Specifies the collection of all the Slicer objects on the specified worksheet. + + + + + Gets the Slicer by index. + + + + + Gets the Slicer by slicer's name. + + + + + Remove the specified Slicer + + The Slicer object + + + + Deletes the Slicer at the specified index + + The position index in Slicer collection + + + + Add a new Slicer using PivotTable as data source + + PivotTable object + The cell in the upper-left corner of the Slicer range. + The name of PivotField in PivotTable.BaseFields + The new add Slicer index + + + + Add a new Slicer using PivotTable as data source + + PivotTable object + Row index of the cell in the upper-left corner of the Slicer range. + Column index of the cell in the upper-left corner of the Slicer range. + The name of PivotField in PivotTable.BaseFields + The new add Slicer index + + + + Add a new Slicer using PivotTable as data source + + PivotTable object + Row index of the cell in the upper-left corner of the Slicer range. + Column index of the cell in the upper-left corner of the Slicer range. + The index of PivotField in PivotTable.BaseFields + The new add Slicer index + + + + Add a new Slicer using PivotTable as data source + + PivotTable object + The cell in the upper-left corner of the Slicer range. + The index of PivotField in PivotTable.BaseFields + The new add Slicer index + + + + Add a new Slicer using PivotTable as data source + + PivotTable object + Row index of the cell in the upper-left corner of the Slicer range. + Column index of the cell in the upper-left corner of the Slicer range. + The PivotField in PivotTable.BaseFields + The new add Slicer index + + + + Add a new Slicer using PivotTable as data source + + PivotTable object + The cell in the upper-left corner of the Slicer range. + The PivotField in PivotTable.BaseFields + The new add Slicer index + + + + Add a new Slicer using ListObjet as data source + + ListObject object + The index of ListColumn in ListObject.ListColumns + The cell in the upper-left corner of the Slicer range. + The new add Slicer index + + + + Add a new Slicer using ListObjet as data source + + ListObject object + The ListColumn in ListObject.ListColumns + The cell in the upper-left corner of the Slicer range. + The new add Slicer index + + + + Add a new Slicer using ListObjet as data source + + ListObject object + The ListColumn in ListObject.ListColumns + Row index of the cell in the upper-left corner of the Slicer range. + Column index of the cell in the upper-left corner of the Slicer range. + The new add Slicer index + + + + Represents callback interface of processing smartmarker. + + + + + Callback for processing a smart marker. + + The sheet index. + The row index. + The column index. + The table name of smartmarker. + The table name of smartmarker. + + + + Encapsulates the object that represents a designer spreadsheet. + + + + + [C#] + + //Create a connection object, specify the provider info and set the data source. + OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=d:\\test\\Northwind.mdb"); + //Open the connection object. + con.Open(); + //Create a command object and specify the SQL query. + OleDbCommand cmd = new OleDbCommand("Select * from [Order Details]", con); + //Create a data adapter object. + OleDbDataAdapter da = new OleDbDataAdapter(); + //Specify the command. + da.SelectCommand = cmd; + //Create a dataset object. + DataSet ds = new DataSet(); + //Fill the dataset with the table records. + da.Fill(ds, "Order Details"); + //Create a datatable with respect to dataset table. + DataTable dt = ds.Tables["Order Details"]; + //Create WorkbookDesigner object. + WorkbookDesigner wd = new WorkbookDesigner(); + //Open the template file (which contains smart markers). + wd.Open("D:\\test\\SmartMarker_Designer.xls"); + //Set the datatable as the data source. + wd.SetDataSource(dt); + //Process the smart markers to fill the data into the worksheets. + wd.Process(true); + //Save the excel file. + wd.Workbook.Save("D:\\test\\outSmartMarker_Designer.xls"); + + [Visual Basic] + + 'Create a connection object, specify the provider info and set the data source. + Dim con As OleDbConnection = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=d:\test\Northwind.mdb") + 'Open the connection object. + con.Open() + 'Create a command object and specify the SQL query. + Dim cmd As OleDbCommand = New OleDbCommand("Select * from [Order Details]", con) + 'Create a data adapter object. + Dim da As OleDbDataAdapter = New OleDbDataAdapter() + 'Specify the command. + da.SelectCommand = cmd + 'Create a dataset object. + Dim ds As DataSet = New DataSet() + 'Fill the dataset with the table records. + da.Fill(ds, "Order Details") + 'Create a datatable with respect to dataset table. + Dim dt As DataTable = ds.Tables("Order Details") + 'Create WorkbookDesigner object. + Dim wd As WorkbookDesigner = New WorkbookDesigner() + 'Open the template file (which contains smart markers). + wd.Open("D:\test\SmartMarker_Designer.xls") + 'Set the datatable as the data source. + wd.SetDataSource(dt) + 'Process the smart markers to fill the data into the worksheets. + wd.Process(True) + 'Save the excel file. + wd.Workbook.Save("D:\test\outSmartMarker_Designer.xls") + + + + + + Gets and sets the object. + + + + + Indicates whether repeating formulas with subtotal row. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The template workbook file. + + + + + Clears all data sources. + + + + + Sets data source of a DataSet object. + + DataSet object + + + + Sets data source of a DataTable object. + + DataTable object + + + + Sets data source of a object. + + The name of the table. + DataTable object + + + + Sets data source of a DataView object and binds it to a data source name. + + Data source name. + DataView object. + + + + Sets data source of a DataView object. + + DataView object + + + + Sets data source of a IDataReader object. + + The data source map name. + IDataReader object + The number of the data rows. + If the smart marker does not contains "noadd", + we have to insert rows by the row count for performance issue and dynamic repeated formulas. + -1 means the param is useless. + + + + + Sets data binding to a variable. + + Variable name created using smart marker. + Source data. + + + + Sets data array binding to a variable. + + Variable name created using smart marker. + Source data array. + + + + If TRUE, Null will be inserted if the value is ""; + + + + + Indicates if references in other worksheets will be updated. + + + + + Indicates whether formulas should be calculated. + + + + + Gets and sets callback interface of processing smartmarker. + + + + + Indicates wether processing the smart marker line by line. + + + The default value is false. + If False, the template file must contain a range which is named as "_CellsSmartMarkers". + + + + + Processes the smart markers and populates the data source values. + + + + + Processes the smart markers and populates the data source values. + + True if the unrecognized smart marker is preserved. + + + + Processes the smart markers and populates the data source values. + + Worksheet index. + True if the unrecognized smart marker is preserved. + This method works on worksheet level. + + + + Returns a collection of smart markers in a spreadsheet. + + A collection of smart markers + A string array is created on every call. The array is sorted and duplicated values are removed. + + + + Summary description for DataSorter. + + + + + [C#] + + //Instantiate a new Workbook object. + Workbook workbook = new Workbook("C:\\Book1.xls"); + //Get the workbook datasorter object. + DataSorter sorter = workbook.DataSorter; + //Set the first order for datasorter object. + sorter.Order1 = Aspose.Cells.SortOrder.Descending; + //Define the first key. + sorter.Key1 = 0; + //Set the second order for datasorter object. + sorter.Order2 = Aspose.Cells.SortOrder.Ascending; + //Define the second key. + sorter.Key2 = 1; + //Create a cells area (range). + CellArea ca = new CellArea(); + //Specify the start row index. + ca.StartRow = 0; + //Specify the start column index. + ca.StartColumn = 0; + //Specify the last row index. + ca.EndRow = 13; + //Specify the last column index. + ca.EndColumn = 1; + //Sort data in the specified data range (A1:B14) + sorter.Sort(workbook.Worksheets[0].Cells, ca); + //Save the excel file. + workbook.Save("C:\\outBook.xls"); + + [Visual Basic] + + 'Instantiate a new Workbook object. + Dim workbook As Workbook = New Workbook("C:\Book1.xls") + 'Get the workbook datasorter object. + Dim sorter As DataSorter = workbook.DataSorter + 'Set the first order for datasorter object + sorter.Order1 = Aspose.Cells.SortOrder.Descending + 'Define the first key. + sorter.Key1 = 0 + 'Set the second order for datasorter object. + sorter.Order2 = Aspose.Cells.SortOrder.Ascending + 'Define the second key. + sorter.Key2 = 1 + 'Create a cells area (range). + Dim ca As CellArea = New CellArea + 'Specify the start row index. + ca.StartRow = 0 + 'Specify the start column index. + ca.StartColumn = 0 + 'Specify the last row index. + ca.EndRow = 13 + 'Specify the last column index. + ca.EndColumn = 1 + 'Sort the data in the specified data range (A1:B14) + sorter.Sort(workbook.Worksheets(0).Cells, ca) + 'Save the excel file. + workbook.Save("C:\outBook.xls") + + + + + + + Gets the key list of data sorter. + + + + + Clear all settings. + + + + + Represents whether the range has headers. + + + + + Adds sorted column index and sort order. + + The sorted column index(absolute position, column A is 0, B is 1, ...) + The sort order + + + + Adds sorted column index and sort order with custom sort list. + + The sorted column index(absolute position, column A is 0, B is 1, ...) + The sort order. + The custom sort list. + + + + Adds sorted column index and sort order with custom sort list. + + The sorted column index(absolute position, column A is 0, B is 1, ...) + The sorted value type. + The sort order. + The custom sort list. + + If type is SortOnType.CellColor or SortOnType.FontColor, the customList is Color. + + + + + Adds sorted column index and sort order with custom sort list. + + The sorted column index(absolute position, column A is 0, B is 1, ...) + The sort order. + The custom sort list. + + + + Represents first sorted column index(absolute position, column A is 0, B is 1, ...). + + + + + Represents sort order of the first key. + + + + + Represents second sorted column index(absolute position, column A is 0, B is 1, ...). + + + + + Represents sort order of the second key. + + + + + Represents third sorted column index(absolute position, column A is 0, B is 1, ...). + + + + + Represents sort order of the third key. + + + + + True means that sorting orientation is from left to right. + False means that sorting orientation is from top to bottom. + The default value is false. + + + + + Gets and sets whether case sensitive when comparing string. + + + + + Indicates whether sorting anything that looks like a number. + + + + + Sorts the data of the area. + + The cells contains the data area. + The start row of the area. + The start column of the area. + The end row of the area. + The end column of the area. + + + + Sort the data of the area. + + The cells contains the data area. + The area needed to sort + + + + Sort the data in the range. + + + + + Represents the key of the data sorter. + + + + + Indicates the order of sorting. + + + + + Gets the sorted column index(absolute position, column A is 0, B is 1, ...). + + + + + Represents the type of sorting. + + + + + Represents the icon set type. + + + Only effects when is SortOnType.Icon. + + + + + Represents the id of the icon set type. + + + Only effects when is SortOnType.Icon. + + + + + Gets the sorted color. + + + Only effects when is SortOnType.CellColor or SortOnType.FontColor. + + + + + Represents the key list of data sorter. + + + + + Gets and sets by index. + + The index. + + + + + + Sorted value type. + + + + + Sorts by cells' value. + + + + + Sorts by cells' color. + + + + + Sorts by cells' font color. + + + + + Sorts by conditional icon. + + + + + Represents sort order for the data range. + + + + + + + + + + + + + Enumerates cell background pattern types. + + + + + Represents diagonal crosshatch pattern. + + + + + Represents diagonal stripe pattern. + + + + + Represents 6.25% gray pattern + + + + + Represents 12.5% gray pattern + + + + + Represents 25% gray pattern. + + + + + Represents 50% gray pattern. + + + + + Represents 75% gray pattern. + + + + + Represents horizontal stripe pattern. + + + + + Represents no background. + + + + + Represents reverse diagonal stripe pattern. + + + + + Represents solid pattern. + + + + + Represents thick diagonal crosshatch pattern. + + + + + Represents thin diagonal crosshatch pattern. + + + + + Represents thin diagonal stripe pattern. + + + + + Represents thin horizontal crosshatch pattern. + + + + + Represents thin horizontal stripe pattern. + + + + + Represents thin reverse diagonal stripe pattern. + + + + + Represents thin vertical stripe pattern. + + + + + Represents vertical stripe pattern. + + + + + Encapsulates the object that represents the cell border. + + + + [C#] + + Style style = cell.GetStyle(); + //Set top border style and color + Border border = style.Borders[BorderType.TopBorder]; + border.LineStyle = CellBorderType.Medium; + border.Color = Color.Red; + cell.SetStyle(style); + + [Visual Basic] + + Dim style as Style = cell.GetStyle() + 'Set top border style and color + Dim border as Border = style.Borders(BorderType.TopBorder) + border.LineStyle = CellBorderType.Medium + border.Color = Color.Red + cell.SetStyle(style); + + + + + + Gets and sets the theme color of the border. + + + + + Gets or sets the of the border. + + + + + Gets and sets the color with a 32-bit ARGB value. + + + + + Gets or sets the cell border type. + + + + + Encapsulates a collection of objects. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Adding a new worksheet to the Excel object + workbook.Worksheets.Add(); + + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[0]; + + //Accessing the "A1" cell from the worksheet + Cell cell = worksheet.Cells["A1"]; + + //Adding some value to the "A1" cell + cell.PutValue("Visit Aspose!"); + + Style style = cell.GetStyle(); + + //Setting the line style of the top border + style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thick; + + //Setting the color of the top border + style.Borders[BorderType.TopBorder].Color = Color.Black; + + //Setting the line style of the bottom border + style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thick; + + //Setting the color of the bottom border + style.Borders[BorderType.BottomBorder].Color = Color.Black; + + //Setting the line style of the left border + style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thick; + + //Setting the color of the left border + style.Borders[BorderType.LeftBorder].Color = Color.Black; + + //Setting the line style of the right border + style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thick; + + //Setting the color of the right border + style.Borders[BorderType.RightBorder].Color = Color.Black; + + cell.SetStyle(style); + + //Saving the Excel file + workbook.Save("C:\\book1.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + + 'Adding a new worksheet to the Workbook object + workbook.Worksheets.Add() + + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Accessing the "A1" cell from the worksheet + Dim cell As Cell = worksheet.Cells("A1") + + 'Adding some value to the "A1" cell + cell.PutValue("Visit Aspose!") + + Dim style as Style = cell.GetStyle() + + 'Setting the line style of the top border + style.Borders(BorderType.TopBorder).LineStyle = CellBorderType.Thick + + 'Setting the color of the top border + style.Borders(BorderType.TopBorder).Color = Color.Black + + 'Setting the line style of the bottom border + style.Borders(BorderType.BottomBorder).LineStyle = CellBorderType.Thick + + 'Setting the color of the bottom border + style.Borders(BorderType.BottomBorder).Color = Color.Black + + 'Setting the line style of the left border + style.Borders(BorderType.LeftBorder).LineStyle = CellBorderType.Thick + + 'Setting the color of the left border + style.Borders(BorderType.LeftBorder).Color = Color.Black + + 'Setting the line style of the right border + style.Borders(BorderType.RightBorder).LineStyle = CellBorderType.Thick + + 'Setting the color of the right border + style.Borders(BorderType.RightBorder).Color = Color.Black + + cell.SetStyle(style) + + 'Saving the Excel file + workbook.Save("C:\book1.xls") + + + + + + Gets the element at the specified index. + + The border to be retrieved. + The element at the specified index. + + + + Sets the of all borders in the collection. + + Borders' . + + + + Sets the style of all borders of the collection. + + Borders' style + + + + Gets or sets the of Diagonal lines. + + + + + Gets or sets the style of Diagonal lines. + + + + + Enumerates the border line and diagonal line types. + + + + + Represents bottom border line. + + + + + Represents the diagonal line from top left to right bottom. + + + + + Represents the diagonal line from bottom left to right top. + + + + + Represents left border line. + + + + + Represents right border line exists. + + + + + Represents top border line. + + + + + Only for dynamic style,such as conditional formatting. + + + + + Only for dynamic style,such as conditional formatting. + + + + + Represents all built-in style type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enumerates a cell's border type. + + + + + Represents thin dash-dotted line. + + + + + Represents thin dash-dot-dotted line. + + + + + Represents dashed line. + + + + + Represents dotted line. + + + + + Represents double line. + + + + + Represents hair line. + + + + + Represents medium dash-dotted line. + + + + + Represents medium dash-dot-dotted line. + + + + + Represents medium dashed line. + + + + + Represents no line. + + + + + Represents medium line. + + + + + Represents slanted medium dash-dotted line. + + + + + Represents thick line. + + + + + Represents thin line. + + + + + Represents all types of color. + + + + + Gets and set the color which should apply to cell or shape. + + + The expression of the color of the cell and the shape is different. + For example: the theme color with same tint value will be not same in the cell and the shape. + + + + + The color type. + + + + + Gets the theme color. Only applies for theme color type. + + + + + Gets and sets the color index in the color palette. Only applies of indexed color. + + + + + Gets and sets the RGB color. + + + + + Gets and sets the color from a 32-bit ARGB value. + + + + + Gets and sets transparency as a value from 0.0 (opaque) through 1.0 (clear). + + + + + Set the tint of the shape color + + + + + + + Represents all color type + + + + + Automatic color. + + + + + It's automatic color,but the displayed color depends the setting of the OS System. + + + Not supported. + + + + + The RGB color. + + + + + The color index in the color palette. + + + + + The theme color. + + + + + Represents the master differential formatting records. + + + + + Gets the element at the specified index. + + The specified index. + + + + + + Encapsulates the font object used in a spreadsheet. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + + //Obtaining the reference of the newly added worksheet by passing its sheet index + Worksheet worksheet = workbook.Worksheets[0]; + + //Accessing the "A1" cell from the worksheet + Aspose.Cells.Cell cell = worksheet.Cells["A1"]; + + //Adding some value to the "A1" cell + cell.PutValue("Hello Aspose!"); + + Aspose.Cells.Font font = cell.Style.Font; + + //Setting the font name to "Times New Roman" + font.Name = "Times New Roman"; + + //Setting font size to 14 + font.Size = 14; + + //setting font color as Red + font.Color = System.Drawing.Color.Red; + + //Saving the Excel file + workbook.Save(@"d:\dest.xls"); + + [VB.NET] + + 'Instantiating a Workbook object + Dim workbook As New Workbook() + + 'Obtaining the reference of the newly added worksheet by passing its sheet index + Dim worksheet As Worksheet = workbook.Worksheets(0) + + 'Accessing the "A1" cell from the worksheet + Dim cell As Aspose.Cells.Cell = worksheet.Cells("A1") + + 'Adding some value to the "A1" cell + cell.PutValue("Hello Aspose!") + + Dim font As Aspose.Cells.Font = cell.Style.Font + + 'Setting the font name to "Times New Roman" + font.Name = "Times New Roman" + + 'Setting font size to 14 + font.Size = 14 + + 'setting font color as Red + font.Color = System.Drawing.Color.Red + + 'Saving the Excel file + workbook.Save("d:\dest.xls") + + + + + + Represent the character set. + + + + + Gets or sets a value indicating whether the font is italic. + + + + + Gets or sets a value indicating whether the font is bold. + + + + + Gets and sets the text caps type. + + + + + Gets the strike type of the text. + + + + + Gets or sets a value indicating whether the font is single strikeout. + + + + + Gets and sets the script offset,in unit of percentage + + + + + Gets or sets a value indicating whether the font is super script. + + + + + Gets or sets a value indicating whether the font is subscript. + + + + + Gets or sets the font underline type. + + + + + Gets or sets the name of the . + + + + [C#] + + Style style; + .......... + Font font = style.Font; + font.Name = "Times New Roman"; + + [Visual Basic] + + Dim style As Style + .......... + Dim font As Font = style.Font + font.Name = "Times New Roman" + + + + + + Gets and sets the double size of the font. + + + + + Gets or sets the size of the font. + + + + + Gets and sets the theme color. + + + If the font color is not a theme color, NULL will be returned. + + + + + Gets or sets the of the font. + + + + + Gets and sets the color with a 32-bit ARGB value. + + + + + Checks if two fonts are equals. + + Compared font object. + True if equal to the compared font object. + + + + Indicates whether the normalization of height that is to be applied to the text run. + + + + + Gets and sets the scheme type of the font. + + + + + Returns a string represents the current Cell object. + + + + + + + Represents the scheme type of the font. + + + + + None + + + + + Major scheme. + + + + + Minor scheme. + + + The font's name will be automatically changed with the language. + + + + + Enumerates the font underline types. + + + + + Represents no underline. + + + + + Represents single underline. + + + + + Represents double underline. + + + + + Represents single accounting underline. + + + + + Represents double accounting underline. + + + + + Represents Dashed Underline + + + + + Represents Thick Dash-Dot-Dot Underline + + + + + Represents Thick Dash-Dot Underline + + + + + Represents Thick Dashed Underline + + + + + Represents Long Dashed Underline + + + + + Represents Thick Long Dashed Underline + + + + + Represents Dash-Dot Underline + + + + + Represents Dash-Dot-Dot Underline + + + + + Represents Dotted Underline + + + + + Represents Thick Dotted Underline + + + + + Represents Thick Underline + + + + + Represents Wave Underline + + + + + Represents Double Wave Underline + + + + + Represents Heavy Wave Underline + + + + + Represents Underline Non-Space Characters Only + + + + + Represents category type of cell's number formatting. + + + + + General + + + + + Text + + + + + Number + + + + + Date or Date and Time + + + + + Time + + + + + Fraction + + + + + Scientific + + + + + Represents display style of excel document,such as font,color,alignment,border,etc. + + The Style object contains all style attributes (font, number format, alignment, and so on) as properties. + There are two methods to set a cell's style. + + [C#] + Cell cell = excel.Worksheets[0].Cells["A1"]; + Style style = cell.GetStyle(); + style.Font.Name = "Times New Roman"; + style.Font.Color = Color.Blue; + cell.SetStyle(style); + + + + Gets and sets the background theme color. + + + If the background color is not a theme color, NULL will be returned. + + + + + Gets and sets the foreground theme color. + + + If the foreground color is not a theme color, NULL will be returned. + + + + + Gets or sets the name of the style. + + + + + Gets or sets the cell background pattern type. + + + + + Sets the background color. + + The pattern. + The foreground color. + The background color. Only works when pattern is not BackgroundType.None and BackgroundType.Solid. + + + + Gets the of the style. + + + + + Initializes a new instance of the class. + + NOTE: This constructor is now obsolete. + Instead, please use CellsFactory.CreateStyle() method. + This property will be removed 6 months later since October 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets or sets a style's background color. + + If you want to set a cell's color, please use Style.ForegroundColor property. + Only if the cell style pattern is other than none or solid, this property will take effect. + + + + Gets and sets the background color with a 32-bit ARGB value. + + + + + Gets or sets a style's foreground color. + + It means no color setting if Color.Empty is returned. + + + + Gets and sets the foreground color with a 32-bit ARGB value. + + + + + Copies data from another style object + + Source Style object + + This method does not copy the name of the style. + If you want to copy the name, please call the following codes after copying style: + destStyle.Name = style.Name. + + + + Gets the parent style of this style. + + + + + Apply the named style to the styles of the cells which use this named style. + It works like clicking the "ok" button after you finished modifying the style. + Only applies for named style. + + + + + Checks whether the specified properties of the style have been modified. + Used for style of ConditionalFormattings to check whether the specified properties of this style should be used when applying the ConditionalFormattings on a cell. + + Style modified flags + true if the specified properties have been modified + + + + Determines whether two Style instances are equal. + + The Style object to compare with the current Style object. + true if the specified Object is equal to the current Object; otherwise, false. + + + + + Serves as a hash function for a Style object. + + A hash code for the current Object. + This method is only for internal use. + + + + Represents the indent level for the cell or range. Can only be an integer from 0 to 250. + + + If text horizontal alignment type is set to value other than left or right, indent level will + be reset to zero. + + + + + Gets a object. + + + + + Represents text rotation angle. + + +

0: Not rotated.

+

255: Top to Bottom.

+

-90: Downward.

+

90: Upward.

+ You can set 255 or value ranged from -90 to 90.
+
+ + + Gets or sets the vertical alignment type of the text in a cell. + + + + + Gets or sets the horizontal alignment type of the text in a cell. + + + + + Gets or sets a value indicating whether the text within a cell is wrapped. + + + + + Gets or sets the display format of numbers and dates. The formatting patterns are different for different regions. + + + For example, the formatting patterns represented by numbers for en_US region: +
ValueTypeFormat String
0GeneralGeneral
1Decimal0
2Decimal0.00
3Decimal#,##0
4Decimal#,##0.00
5Currency$#,##0_);($#,##0)
6Currency$#,##0_);[Red]($#,##0)
7Currency$#,##0.00_);($#,##0.00)
8Currency$#,##0.00_);[Red]($#,##0.00)
9Percentage0%
10Percentage0.00%
11Scientific0.00E+00
12Fraction# ?/?
13Fraction# ??/??
14Datem/d/yyyy
15Dated-mmm-yy
16Dated-mmm
17Datemmm-yy
18Timeh:mm AM/PM
19Timeh:mm:ss AM/PM
20Timeh:mm
21Timeh:mm:ss
22Timem/d/yyyy h:mm
37Accounting#,##0_);(#,##0)
38Accounting#,##0_);[Red](#,##0)
39Accounting#,##0.00_);(#,##0.00)
40Accounting#,##0.00_);[Red](#,##0.00)
41Accounting_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
42Currency_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
43Accounting_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
44Currency_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
45Timemm:ss
46Time[h]:mm:ss
47Timemm:ss.0
48Scientific##0.0E+0
49Text@
+
+ + + Sets the borders of the style. + + The type fo the border. + The style of the border. + The color of the border. + Returns whether changing the current borders. + + + + Gets or sets a value indicating whether a cell can be modified or not. + + Locking cells has no effect unless the worksheet is protected. + + + + Sets the Custom number format string of a cell. + + Custom number format string, should be InvariantCulture pattern. + If given Custom number format string matches one of the built-in number formats + corresponding to current regional settings, whether set the number format as built-in instead of Custom. + + + + Represents the custom number format string of this style object. + If the custom number format is not set(For example, the number format is builtin), "" will be returned. + + + The returned custom string is culture-independent. + + + + + Gets and sets the culture-dependent pattern string for number format. + If no number format has been set for this object, null will be returned. + If number format is builtin, the pattern string corresponding to the builtin number will be returned. + + + For builtin number format, both the pattern content(such as, one builtin date format is "m/d/y" for some locales, + but for some other locales it becomes "d/m/y") and the format specifier(such as, + some locales is using character other than 'y' to represent the year part for date formatting) + are culture-dependent; + For user specified custom format, only format specifiers are changed according to the culture, + other parts of the formatting pattern will not be modified. + + + + + Gets the culture-independent pattern string for number format. + If no number format has been set for this object, null will be returned. + If number format is builtin, the pattern string corresponding to the builtin number will be returned. + + + For builtin number formats, the returned pattern content is still culture-dependent, + such as, for some locales it returns "m/d/y" and for some other locales it returns "d/m/y". + The difference from is(that is also what culture-independent means): + the format specifiers and separators are kept as standard, such as '/' will always be used as datetime separator + and "y" will always be used as the "year" part no matter what other special character is used for the specific locale. + + + + + Represents if the formula will be hidden when the worksheet is protected. + + + + + Represents if text automatically shrinks to fit in the available column width. + + + + + Represents text reading order. + + + + + Indicates if the cells justified or distributed alignment should be used on the last line of text. + + + This is typical for East Asian alignments but not typical in other contexts. + + + + + Indicates whether the cell's value starts with single quote mark. + + + + + Indicates whether the cell shading is a gradient pattern. + + + + + Sets the specified fill to a two-color gradient. + + One gradient color. + Two gradient color. + Gradient shading style. + The gradient variant. Can be a value from 1 through 4, corresponding to one of the four variants on the Gradient tab in the Fill Effects dialog box. If style is GradientStyle.FromCenter, the Variant argument can only be 1 or 2. + + + + Get the two-color gradient setting. + + One gradient color. + Two gradient color. + Gradient shading style. + The gradient variant. + + + + Indicates whether the number format is a percent format. + + + + + Indicates whether the number format is a date format. + + + + + Encapsulates a collection of objects. + + + + [C#] + + Workbook workbook = new Workbook(); + StyleCollection styles = workbook.Styles; + int styleIndex = styles.Add(); + Style style = workbook.Styles[styleIndex]; + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + Dim styles as StyleCollection = excel.Styles + Dim styleIndex as Integer = styles.Add() + Dim style as Style = workbook.Styles(styleIndex) + + + + NOTE: This class is now obsolete. Instead, + please use Workbook.CreateStyle() to create and manipulate style for workbook instead of StyleCollection.Add() + and use Workbook.GetNamedStyle(string) to get named style instead of StyleCollection[string]. + This property will be removed 12 months later since February 2015. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets the theme style. + + The theme color type. + The tint value. + + + + + + Creates built-in style by given type. + + + + style object + + + + Adds a to the collection. + + + object index. + + If using this method to create a new style and the style name is set, + a new style will be added to the style dialog of MS Excel. + To avoid this, you can leave the style name blank. + NOTE: This property is now obsolete. Instead, + please use Workbook.CreateStyle() to create and manipulate style for workbook instead. + This property will be removed 12 months later since December 2014. + Aspose apologizes for any inconvenience you may have experienced. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + [C#] + + Styles styles = excel.Styles; + int styleIndex = styles.Add(); + Style style = styles[styleIndex]; + + [Visual Basic] + + Dim styles As Styles = excel.Styles + Dim styleIndex As Integer = styles.Add() + Dim style As Style = styles(styleIndex) + + + + + + Gets the element with the specified name. + + Style name + The element with the specified name. + + + [C#] + + Styles styles = excel.Styles; + int styleIndex = styles.Add(); + Style style = styles[styleIndex]; + style.Name = "MyStyle"; + //..................... + Style newStyle = styles["MyStyle"]; + + [Visual Basic] + + Dim styles As Styles = excel.Styles + Dim styleIndex As Integer = styles.Add() + Dim style As Style = styles(styleIndex) + style.Name = "MyStyle" + Dim NewStyle As Style = styles("MyStyle") + + + + + + Gets the count of elements in the collection. + + + + + Represents flags which indicates applied formatting properties. + + + + + All properties will be applied. + + + + + All borders settings will be applied. + + + + + Left border settings will be applied. + + + + + Right border settings will be applied. + + + + + Top border settings will be applied. + + + + + Bottom border settings will be applied. + + + + + Diagonal down border settings will be applied. + + + + + Diagonal up border settings will be applied. + + + + + Font settings will be applied. + + + + + Font size setting will be applied. + + + + + Font name setting will be applied. + + + + + Font color setting will be applied. + + + + + Font bold setting will be applied. + + + + + Font italic setting will be applied. + + + + + Font underline setting will be applied. + + + + + Font strikeout setting will be applied. + + + + + Font script setting will be applied. + + + + + Number format setting will be applied. + + + + + Alignment setting will be applied. + + + + + Horizontal alignment setting will be applied. + + + + + Vertical alignment setting will be applied. + + + + + Indent level setting will be applied. + + + + + Rotation setting will be applied. + + + + + Wrap text setting will be applied. + + + + + Shrink to fit setting will be applied. + + + + + Text direction setting will be applied. + + + + + Cell shading setting will be applied. + + + + + Locked setting will be applied. + + + + + Hide formula setting will be applied. + + + + + Hide formula setting will be applied. + + + + + The style modified flags. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Only for dynamic style,such as conditional formatting. + + + + + Only for dynamic style,such as conditional formatting. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NOTE: This member is now obsolete. Instead, please use FontScript. + This property will be removed 12 months later since August 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + + + + NOTE: This member is now obsolete. Instead, please use FontScript. + This property will be removed 12 months later since August 2012. + Aspose apologizes for any inconvenience you may have experienced. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Includes horizontal/vertical Alignment, rotation,wrap Text,indent,shrinkToFit,Text Direction + + + + + Includes Locked, HideFormula + + + + + unused. + + + + + unused. + + + + + unused. + + + + + unused. + + + + + unused. + + + + + unused. + + + + + unused. + + + + + unused. + + + + + + + + + Enumerates text alignment types. + + + + + Represents bottom text alignment. + + + + + Represents center text alignment. + + + + + Represents center across text alignment. + + + + + Represents distributed text alignment. + + + + + Represents fill text alignment. + + + + + Represents general text alignment. + + + + + Represents justify text alignment. + + + + + Represents left text alignment. + + + + + Represents right text alignment. + + + + + Represents top text alignment. + + + + + Aligns the text with an adjusted kashida length for Arabic text. + + + + + Distributes Thai text specially, because each character is treated as a word. + + + + + This type specifies the cap types of the text. + + + + + None caps + + + + + Apply all caps on the text. + + + + + Apply small caps to the text. + + + + + Represents the direction of the text flow for this paragraph. + + + + + + + + + + + + + + + + + Enumerates text orientation types. + + + + + Rotates text with 90 degrees clockwise. + + + + + Rotates text with 90 degrees counterclockwise. + + + + + Represents the default value. + + + + + Displays text from top to bottom of the cell. Stacked text. + + + + + This type specifies the strike type. + + + + + A single strikethrough applied on the text. + + + + + A double strikethrough applied on the text. + + + + + No strike is applied to the text. + + + + + Represents a theme color. + + + + + [C#] + + //Instantiating a Workbook object + Workbook workbook = new Workbook(); + Cells cells = workbook.Worksheets[0].Cells; + cells["A1"].PutValue("Hello World"); + Style style = cells["A1"].GetStyle(); + //Set ThemeColorType.Text2 color type with 40% lighten as the font color. + style.Font.ThemeColor = new ThemeColor(ThemeColorType.Text2, 0.4); + style.Pattern = BackgroundType.Solid; + //Set ThemeColorType.Background2 color type with 75% darken as the foreground color + style.ForegroundThemeColor = new ThemeColor(ThemeColorType.Background2, -0.75); + cells["A1"].SetStyle(style); + //Saving the Excel file + workbook.Save("C:\\book1.xlsx"); + + [Visual Basic] + + 'Instantiating a Workbook object + Dim workbook As Workbook = New Workbook() + Dim cells As Cells = workbook.Worksheets(0).Cells + cells("A1").PutValue("Hello World") + 'Get the cell style + Dim style As Style = cells("A1").GetStyle() + 'Set ThemeColorType.Text2 color type with 40% lighten as the font color. + Style.Font.ThemeColor = New ThemeColor(ThemeColorType.Text2, 0.4) + Style.Pattern = BackgroundType.Solid + 'Set ThemeColorType.Background2 color type with 75% darken as the foreground color + style.ForegroundThemeColor = New ThemeColor(ThemeColorType.Background2, -0.75) + 'Set the cell style + cells("A1").SetStyle(style) + 'Saving the Excel file + Workbook.Save("C:\\book1.xlsx") + + + + + + + The theme type. + The tint value. + + + + Gets and sets the theme type. + + + + + Gets and sets the tint value. + + + The tint value is stored as a double from -1.0 .. 1.0, where -1.0 means 100% darken + and 1.0 means 100% lighten. Also, 0.0 means no change. + + + + + Enumerates the theme color types. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inner used. + A color used in theme definitions which means to use the color of the style. + + + + + Represents union range. + + + + + Gets the index of the first row of the range. + + + Only effects when it only contains one range. + + + + + Gets the index of the first column of the range. + + + Only effects when it only contains one range. + + + + + Gets the count of rows in the range. + + + Only effects when it only contains one range. + + + + + Gets the count of rows in the range. + + + Only effects when it only contains one range. + + + + + Combines a range of cells into a single cell. + + + Reference the merged cell via the address of the upper-left cell in the range. + + + + + Unmerges merged cells of this range. + + + + + Puts a value into the range, if appropriate the value will be converted to other data type and cell's number format will be reset. + + Input value + True: converted to other data type if appropriate. + True: set the number format to cell's style when converting to other data type + + + + Gets and sets the values of the range. + + + + + Gets or sets the name of the range. + + Named range is supported. For example, +

range.Name = "Sheet1!MyRange";

+
+ + + Gets the range's refers to. + + + + + Indicates whether this has range. + + + + + Gets all hyperlink in the range. + + + + + Sets the style of the range. + + The Style object. + + + + Applies formats for a whole range. + + The style object which will be applied. + Flags which indicates applied formatting properties. + Each cell in this range will contains a object. + So this is a memory-consuming method. Please use it carefully. + + + + Copying the range with paste special options. + + The source range. + The paste special options. + + + + Gets the enumerator for cells in this Range. + + The cells enumerator + When traversing elements by the returned Enumerator, the cells collection + should not be modified(such as operations that will cause new Cell/Row be instantiated or existing Cell/Row be deleted). + Otherwise the enumerator may not be able to traverse all cells correctly(some elements may be traversed repeatedly or skipped). + + + + Gets all cell count in the range. + + + + + Gets the count of the ranges. + + + + + Gets all union ranges. + + + + + Sets out line borders around a range of cells. + + Border styles. + Border colors. + + Both the length of borderStyles and borderStyles must be 4. + The order of borderStyles and borderStyles must be top,bottom,left,right + + + + + Sets the outline borders around a range of cells with same border style and color. + + Border style. + Border color. + + + + Intersects another range. + + The range. + If the two union ranges are not intersected, returns null. + + + + Intersects another range. + + The range. + If the two union ranges are not intersected, returns null. + + + + Intersects another range. + + The range. + If the two union ranges are not intersected, returns null. + + + + Union another range. + + The range. + + + + + + Union another range. + + The range. + + + + + + Union the ranges. + + The ranges. + + + + + + Represents how to update links to other workbooks when the workbook is opened. + + + + + Prompt user to update. + + + + + Do not update, and do not prompt user. + + + + + Always update. + + + + + Indicates the options that exporting range to json. + + + + + Indicates whether the range contains header row. + + + + + Exports the string value of the cells to json. + + + + + Indicates the indent. + + + If the indent is null or empty, the exported json is not formatted. + + + + + Represents the options of json layout type. + + + + + Processes Array as table. + + + + + Indicates whether ignoring null value. + + + + + Indicates whether ignore title if array is a property of object. + + + + + Indicates whether ignore title if object is a property of object. + + + + + Gets or sets a value that indicates whether the string in json is converted to numeric or date. + + + + + Gets and sets the format of numeric value. + + + + + Gets and sets the format of date value. + + + + + Gets and sets the style of the title. + + + + + Represents the utility class of processing json. + + + + + Import the json string. + + The json string. + The Cells. + The row index. + The column index. + The options of import json string. + + + + Exporting the range to json file. + + The range. + The options of exporting. + The json string value. + + + + Represents data validation.settings. + + + + [C#] + Workbook workbook = new Workbook(); + ValidationCollection validations = workbook.Worksheets[0].Validations; + Validation validation = validations[validations.Add()]; + validation.Type = Aspose.Cells.ValidationType.WholeNumber; + validation.Operator = OperatorType.Between; + validation.Formula1 = "3"; + validation.Formula2 = "1234"; + + CellArea area; + area.StartRow = 0; + area.EndRow = 1; + area.StartColumn = 0; + area.EndColumn = 1; + + validation.AddArea(area); + + [Visual Basic] + Dim workbook as Workbook = new Workbook() + Dim validations as ValidationCollection = workbook.Worksheets(0).Validations + Dim validation as Validation = validations(validations.Add()) + validation.Type = ValidationType.WholeNumber + validation.Operator = OperatorType.Between + validation.Formula1 = "3" + validation.Formula2 = "1234" + + Dim area as CellArea + area.StartRow = 0 + area.EndRow = 1 + area.StartColumn = 0 + area.EndColumn = 1 + + validation.AddArea(area) + + + + + + + Represents the operator for the data validation. + + + + + Represents the validation alert style. + + + + + Represents the data validation type. + + + + + Represents the data validation input message. + + + + + Represents the title of the data-validation input dialog box. + + + + + Represents the data validation error message. + + + + + Represents the title of the data-validation error dialog box. + + + + + Indicates whether the data validation input message will be displayed whenever the user selects a cell in the data validation range. + + + + + Indicates whether the data validation error message will be displayed whenever the user enters invalid data. + + + + + Indicates whether blank values are permitted by the range data validation. + + + + + Gets the value or expression associated with this validation. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The value or expression associated with this validation. + + + + Gets the value or expression associated with this validation. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The value or expression associated with this validation. + + + + Gets the value or expression associated with this validation for specific cell. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The row index. + The column index. + The value or expression associated with this validation. + + + + Gets the value or expression associated with this validation for specific cell. + + Whether the formula needs to be formatted as R1C1. + Whether the formula needs to be formatted by locale. + The row index. + The column index. + The value or expression associated with this validation. + + + + Sets the value or expression associated with this validation. + + The value or expression associated with this format condition. + Whether the formula is R1C1 formula. + Whether the formula is locale formatted. + + + + Sets the value or expression associated with this validation. + + The value or expression associated with this format condition. + Whether the formula is R1C1 formula. + Whether the formula is locale formatted. + + + + Represents the value or expression associated with the data validation. + + + + + Represents the value or expression associated with the data validation. + + + + + Get the value for list of the validation for the specified cell. + + The row index. + The column index. + The value to produce the list of this validation for the specified cell. + If the list references to a range, then the returned value will be a object; + Otherwise the returned value may be null, object[], or simple object. + Only for validation whose type is List and has been applied to given cell, + otherwise null will be returned. + + + + Represents the first value associated with the data validation. + + + + + Represents the second value associated with the data validation. + + + + + Indicates whether data validation displays a drop-down list that contains acceptable values. + + + + + Gets all which contain the data validation settings. + + + + + Applies the validation to the area. + + The area. + + It is equivalent to use + with checking intersection and edge. + + + + + Applies the validation to the area. + + The area. + Whether check the intersection of given area with existing validations' areas. + If one validation has been applied in given area(or part of it), + then the existing validation should be removed at first from given area. + Otherwise corruption may be caused for the generated Validations. + If user is sure that the added area does not intersect with any existing area, + this parameter can be set as false for performance consideration. + Whether check the edge of this validation's applied areas. + Validation's internal settings depend on the top-left one of its applied ranges, + so if given area will become the new top-left one of the applied ranges, + the internal settings should be changed and rebuilt, otherwise unexpected result may be caused. + If user is sure that the added area is not the top-left one, + this parameter can be set as false for performance consideration. + + In this method, we will remove all old validations in given area. + For the top-left one of Validation's applied ranges, firstly its StartRow is smallest, + secondly its StartColumn is the smallest one of those areas who have the same smallest StartRow. + + + + + Applies the validation to given areas. + + The areas. + Whether check the intersection of given area with existing validations' areas. + If one validation has been applied in given area(or part of it), + then the existing validation should be removed at first from given area. + Otherwise corruption may be caused for the generated Validations. + If user is sure that all the added areas do not intersect with any existing area, + this parameter can be set as false for performance consideration. + Whether check the edge of this validation's applied areas. + Validation's internal settings depend on the top-left one of its applied ranges, + so if one of given areas will become the new top-left one of the applied ranges, + the internal settings should be changed and rebuilt, otherwise unexpected result may be caused. + If user is sure that no one of those added areas is the top-left, + this parameter can be set as false for performance consideration. + + In this method, we will remove all old validations in given area. + For the top-left one of Validation's applied ranges, firstly its StartRow is smallest, + secondly its StartColumn is the smallest one of those areas who have the same smallest StartRow. + + + + + Remove the validation settings in the range. + + the areas where this validation settings should be removed. + + + + Removes this validation from given areas. + + the areas where this validation settings should be removed. + + + + Remove the validation settings in the cell. + + The row index. + The column index. + + + + Copy validation. + + The source validation. + The copy option. + + + + Represents the data validation alert style. + + + + + Information alert style. + + + + + Stop alert style. + + + + + Warning alert style. + + + + + Represents data validation collection. + + + + + Adds a data validation to the collection. + + + object index. + + NOTE: This member is now obsolete. Instead, + please use ValidationCollection.Add(CellArea) method. + This property will be removed 12 months later since JANUARY 2015. + Aspose apologizes for any inconvenience you may have experienced. + + + + Adds a data validation to the collection. + + The area contains this validation. + + object index. + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Removes all validation setting on the cell. + + The row index of the cell. + The column index of the cell. + + + + Removes all validation setting on the range.. + + The range which contains the validations setting. + + + + Gets the validation applied to given cell. + + The row index. + The column index. + Returns a object or null if there is no validation for given cell + + + + Represents data validation type. + + + + + Any value validation type. + + + + + Whole number validation type. + + + + + Decimal validation type. + + + + + List validation type. + + + + + Date validation type. + + + + + Time validation type. + + + + + Text length validation type. + + + + + Custom validation type. + + + + + Represents an outline on a worksheet. + + + + + Indicates if the summary row will be positioned below the detail rows in the outline. + + + + + Indicates if the summary column will be positioned to the right of the detail columns in the outline. + + + + + Represents all Pane objects shown in the specified window. + + + + + Gets and sets the first visible row of the bottom pane. + + + + + Gets and sets the first visible column of the right pane. + + + + + Gets and sets the active pane. + + + + + Represents state of the sheet's pane. + + + + + Panes are frozen, but were not before being frozen. + + + + + Panes are frozen and were split before being frozen. + + + + + Panes are split, but not frozen. + + + + + Panes are not frozen and not split. + + + + + Represents the view type of the worksheet. + + + + + + + + + + + + + + + + + Represents the states for sheet visibility. + + + + + Indicates the sheet is hidden, but can be shown by the user via the user interface. + + + + + Indicates the sheet is hidden and cannot be shown in the user interface (UI). + This state is only available programmatically. + + + + + Indicates the sheet is visible. + + + + + Warning info + + + + + Get warning type. + + + + + Get description of warning info. + + + + + The error object. + + + + + Gets and sets the corrected object. + + + + + WaringType + + + + + Font substitution warning type + when a font has not been found, this warning type can be get. + + + + + Duplicate defined name is found in the file. + + + + + Unsupported file format. + + + + + Invalid text of the defined name. + + + + + Invalid the font name. + + + + + Invalid autofilter range. + + + + + Represents an Office Add-in instance. + + + + + Gets and sets the uniquely identifies the Office Add-in instance in the current document. + + + + + Indicates whether the user can interact with the Office Add-in or not. + + + + + Get the primary reference to an Office Add-in. + + + + + Gets a list of alter references. + + + + + Gets all properties of web extension. + + + + + Gets all bindings relationship between an Office Add-in and the data in the document. + + + + + Represents a binding relationship between an Office Add-in and the data in the document. + + + + + Gets and sets the binding identifier. + + + + + Gets and sets the binding type. + + + + + Gets and sets the binding key used to map the binding entry in this list with the bound data in the document. + + + + + Represents the list of binding relationships between an Office Add-in and the data in the document. + + + + + Gets web extension binding relationship by the specific index. + + The index. + The web extension binding relationship + + + + Adds an a binding relationship between an Office Add-in and the data in the document. + + + + + + + Represents the list of web extension. + + + + + Gets web extension by the specific index. + + The index. + The web extension. + + + + Adds a web extension. + + The index. + + + + Remove web extension by the index. + + The index. + + + + Represents an Office Add-in custom property. + + + + + Gets and set a custom property name. + + + + + Gets and sets a custom property value. + + + + + Represents the list of web extension properties. + + + + + Gets the property of web extension by the index. + + The index. + The property of web extension. + + + + Gets the property of web extension. + + The name of property. + The property of web extension. + + + + Adds web extension property. + + The name of property. + The value of property. + The index of added property. + + + + Remove the property by the name. + + The name of the property. + + + + Represents identify the provider location and version of the extension. + + + + + Gets and sets the identifier associated with the Office Add-in within a catalog provider. + The identifier MUST be unique within a catalog provider. + + + + + Gets and sets the version. + + + + + Gets and sets the instance of the marketplace where the Office Add-in is stored. . + + + + + Gets and sets the type of marketplace that the store attribute identifies. + + + + + Represents the list of web extension reference. + + + + + Gets web extension by the specific index. + + The index. + The web extension + + + + Adds an empty reference of web extension. + + + + + + + Represents the store type of web extension. + + + + + Specifies that the store type is Office.com. + + + + + Specifies that the store type is SharePoint corporate catalog. + + + + + Specifies that the store type is a SharePoint web application. + + + + + Specifies that the store type is an Exchange server. + + + + + Specifies that the store type is a file system share. + + + + + Specifies that the store type is the system registry. + + + + + Specifies that the store type is Centralized Deployment via Exchange. + + + + + Represents a persisted taskpane object. + + + + + Gets and sets the web extension part associated with the taskpane instance + + + + + Gets and sets the last-docked location of this taskpane object. + + + + + Indicates whether the Task Pane shows as visible by default when the document opens. + + + + + Indicates whether the taskpane is locked to the document in the UI and cannot be closed by the user. + + + + + Gets and sets the default width value for this taskpane instance. + + + + + Gets and sets the index, enumerating from the outside to the inside, of this taskpane among other persisted taskpanes docked in the same default location. + + + + + Represents the list of task pane. + + + + + Gets task pane by the specific index. + + The index. + The task pane. + + + + Adds task pane. + + The index. + + + + Represents a root object to create an Excel spreadsheet. + + The Workbook class denotes an Excel spreadsheet. Each spreadsheet can contain multiple worksheets. + The basic feature of the class is to open and save native excel files. + The class has some advanced features like copying data from other Workbooks, combining two Workbooks and protecting the Excel spreadsheet. + + + The following example creates a Workbook, opens a file named designer.xls in it and makes the horizontal and vertical scroll bars invisible for the Workbook. It then replaces two string values with an Integer value and string value respectively within the spreadsheet and finally sends the updated file to the client browser. + + [C#] + + + + //Open a designer file + string designerFile = MapPath("Designer") + "\\designer.xls"; + Workbook workbook = new Workbook(designerFile); + + //Set scroll bars + workbook.Settings.IsHScrollBarVisible = false; + workbook.Settings.IsVScrollBarVisible = false; + + //Replace the placeholder string with new values + int newInt = 100; + workbook.Replace("OldInt", newInt); + + string newString = "Hello!"; + workbook.Replace("OldString", newString); + XlsSaveOptions saveOptions = new XlsSaveOptions(); + workbook.Save(Response, "result.xls", ContentDisposition.Inline, saveOptions); + + [Visual Basic] + + + + 'Open a designer file + Dim designerFile as String = MapPath("Designer") + "\designer.xls" + Dim workbook as Workbook = new Workbook(designerFile) + + 'Set scroll bars + workbook.IsHScrollBarVisible = False + workbook.IsVScrollBarVisible = False + + 'Replace the placeholder string with new values + Dim newInt as Integer = 100 + workbook.Replace("OldInt", newInt) + + Dim newString as String = "Hello!" + workbook.Replace("OldString", newString) + Dim saveOptions as XlsSaveOptions = new XlsSaveOptions() + workbook.Save(Response, "result.xls", ContentDisposition.Inline, saveOptions) + + + + + Represents the workbook settings. + + + + + Initializes a new instance of the class. + + + The following code shows how to use the Workbook constructor to create and initialize a new instance of the class. + + [C#] + + Workbook workbook = new Workbook(); + + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + + + + The default file format type is Excel97To2003.If want create other format file type, please call Workbook(FileFormatType fileFormatType). + + + + + Initializes a new instance of the class. + + + The new file format. + + + The following code shows how to use the Workbook constructor to create and initialize a new instance of the class. + + [C#] + + Workbook workbook = new Workbook(FileFormatType.Excel2007Xlsx); + + + [Visual Basic] + + Dim workbook as Workbook = new Workbook(FileFormatType.Excel2007Xlsx) + + + + The default file format type is Excel97To2003. + + + + + Initializes a new instance of the class and open a file. + + The file name. + + + + Initializes a new instance of the class and open a stream. + + The stream. + + + + Initializes a new instance of the class and open a file. + + The file name. + The load options + + + + Initializes a new instance of the class and open stream. + + The stream. + The load options + + + + Parses all formulas which have not been parsed when they were loaded from template file or set to a cell. + + whether ignore error for invalid formula. + For one invalid formula, if ignore error then this formula will be ignored + and the process will continue to parse other formulas, otherwise exception will be thrown. + + + + Starts the session that uses caches to access data. + + options of data access + If the cache of specified data access requires some data models in worksheet to be "read-only", + then corresponding data models in every worksheet in this workbook will be taken as "read-only" + and user should not change any of them. +

+ After finishing the access to the data, should + be invoked with same options to clear all caches and recover normal access mode. +

+
+ + + Closes the session that uses caches to access data. + + options of data access + + + + Saves the workbook to the disk. + + The file name. + The save format type. + + + + Save the workbook to the disk. + + + + + + + Saves the workbook to the disk. + + The file name. + The save options. + + + + Saves the workbook to the stream. + + The file stream. + The save file format type. + + + + Saves the workbook to the stream. + + The file stream. + The save options. + + + + Saves Excel file to a MemoryStream object and returns it. + + MemoryStream object which contains an Excel file. + + + This method provides same function as Save method and only save the workbook as Excel97-2003 xls file. + It's mainly for calling from COM clients. + + + + Gets the collection in the spreadsheet. + + + collection + + + + Indicates whether license is set. + + + + + Remove all unused styles. + + + + + Creates a new style. + + Returns a style object. + + + + Creates built-in style by given type. + + + + style object + + + + Creates a object. + + Returns a object. + + + + Replaces a cell's value with a new string. + + + + [C#] + + Workbook workbook = new Workbook(); + ...... + workbook.Replace("AnOldValue", "NewValue"); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + ........ + workbook.Replace("AnOldValue", "NewValue") + + + Cell placeholder + String value to replace + + + + Replaces a cell's value with a new integer. + + + + [C#] + + Workbook workbook = new Workbook(); + ...... + int newValue = 100; + workbook.Replace("AnOldValue", newValue); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + ......... + Dim NewValue As Integer = 100 + workbook.Replace("AnOldValue", NewValue) + + + Cell placeholder + Integer value to replace + + + + Replaces a cell's value with a new double. + + + + + [C#] + + Workbook workbook = new Workbook(); + ...... + double newValue = 100.0; + workbook.Replace("AnOldValue", newValue); + + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + ......... + Dim NewValue As Double = 100.0 + workbook.Replace("AnOldValue", NewValue) + + + Cell placeholder + Double value to replace + + + + Replaces a cell's value with a new string array. + + + + + [C#] + + Workbook workbook = new Workbook(); + ...... + string[] newValues = new string[]{"Tom", "Alice", "Jerry"}; + workbook.Replace("AnOldValue", newValues, true); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + ............. + Dim NewValues() As String = New String() {"Tom", "Alice", "Jerry"} + workbook.Replace("AnOldValue", NewValues, True) + + + Cell placeholder + String array to replace + True - Vertical, False - Horizontal + + + + Replaces cells' values with an integer array. + + + + [C#] + + Workbook workbook = new Workbook(); + ...... + int[] newValues = new int[]{1, 2, 3}; + workbook.Replace("AnOldValue", newValues, true); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + ........... + Dim NewValues() As Integer = New Integer() {1, 2, 3} + workbook.Replace("AnOldValue", NewValues, True) + + + Cell placeholder + Integer array to replace + True - Vertical, False - Horizontal + + + + Replaces cells' values with a double array. + + + + + [C#] + + Workbook workbook = new Workbook(); + ...... + double[] newValues = new double[]{1.23, 2.56, 3.14159}; + workbook.Replace("AnOldValue", newValues, true); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + ........... + Dim NewValues() As Double = New Double() {1.23, 2.56, 3.14159} + workbook.Replace("AnOldValue", NewValues, True) + + + Cell placeholder + Double array to replace + True - Vertical, False - Horizontal + + + + Replaces cells' values with data from a . + + + + [C#] + + Workbook workbook = new Workbook(); + DataTable myDataTable = new DataTable("Customers"); + // Adds data to myDataTable + ........ + workbook.Replace("AnOldValue", myDataTable); + + [Visual Basic] + + Dim workbook As Workbook = New Workbook() + Dim myDataTable As DataTable = New DataTable("Customers") + ' Adds data to myDataTable + ............. + workbook.Replace("AnOldValue", myDataTable) + + + Cell placeholder + DataTable to replace + + + + Replaces cells' values with new data. + + The boolean value to be replaced. + New value. Can be string, integer, double or DateTime value. + + + + Replaces cells' values with new data. + + The integer value to be replaced. + New value. Can be string, integer, double or DateTime value. + + + + Replaces a cell's value with a new string. + + Cell placeholder + String value to replace + The replace options + + + + Copies data from a source Workbook object. + + Source Workbook object. + + + + + + Copies data from a source Workbook object. + + Source Workbook object. + + + + Combines another Workbook object. + + Another Workbook object. + Currently, only cell data and cell style of the second Workbook object can be combined. Images, charts and other drawing objects are not supported. + + + + + Returns colors in the palette for the spreadsheet. + + The palette has 56 entries, each represented by an RGB value. + + + + Gets the style in the style pool. + All styles in the workbook will be gathered into a pool. + There is only a simple reference index in the cells. + + The index. + + The style in the pool corresponds to given index, may be null. + + + If the returned style is changed, the style of all cells(which refers to this style) will be changed. + + + + + Gets number of the styles in the style pool. + + + + + Gets all fonts in the style pool. + + + + + Gets the named style in the style pool. + + name of the style + named style, maybe null. + + + + Changes the palette for the spreadsheet in the specified index. + + Color structure. + Palette index, 0 - 55. + The palette has 56 entries, each represented by an RGB value. + If you set a color which is not in the palette, it will not take effect. + So if you want to set a custom color, please change the palette at first. +

The following is the standard color palette.

Color¡¡Red¡¡Green¡¡Blue¡¡
Black¡¡0¡¡0¡¡0¡¡
White¡¡255¡¡255¡¡255¡¡
Red¡¡255¡¡0¡¡0¡¡
Lime¡¡0¡¡255¡¡0¡¡
Blue¡¡0¡¡0¡¡255¡¡
Yellow¡¡255¡¡255¡¡0¡¡
Magenta¡¡255¡¡0¡¡255¡¡
Cyan¡¡0¡¡255¡¡255¡¡
Maroon¡¡128¡¡0¡¡0¡¡
Green¡¡0¡¡128¡¡0¡¡
Navy¡¡0¡¡0¡¡128¡¡
Olive¡¡128¡¡128¡¡0¡¡
Purple¡¡128¡¡0¡¡128¡¡
Teal¡¡0¡¡128¡¡128¡¡
Silver¡¡192¡¡192¡¡192¡¡
Gray¡¡128¡¡128¡¡128¡¡
Color17¡¡153¡¡153¡¡255¡¡
Color18¡¡153¡¡51¡¡102¡¡
Color19¡¡255¡¡255¡¡204¡¡
Color20¡¡204¡¡255¡¡255¡¡
Color21¡¡102¡¡0¡¡102¡¡
Color22¡¡255¡¡128¡¡128¡¡
Color23¡¡0¡¡102¡¡204¡¡
Color24¡¡204¡¡204¡¡255¡¡
Color25¡¡0¡¡0¡¡128¡¡
Color26¡¡255¡¡0¡¡255¡¡
Color27¡¡255¡¡255¡¡0¡¡
Color28¡¡0¡¡255¡¡255¡¡
Color29¡¡128¡¡0¡¡128¡¡
Color30¡¡128¡¡0¡¡0¡¡
Color31¡¡0¡¡128¡¡128¡¡
Color32¡¡0¡¡0¡¡255¡¡
Color33¡¡0¡¡204¡¡255¡¡
Color34¡¡204¡¡255¡¡255¡¡
Color35¡¡204¡¡255¡¡204¡¡
Color36¡¡255¡¡255¡¡153¡¡
Color37¡¡153¡¡204¡¡255¡¡
Color38¡¡255¡¡153¡¡204¡¡
Color39¡¡204¡¡153¡¡255¡¡
Color40¡¡255¡¡204¡¡153¡¡
Color41¡¡51¡¡102¡¡255¡¡
Color42¡¡51¡¡204¡¡204¡¡
Color43¡¡153¡¡204¡¡0¡¡
Color44¡¡255¡¡204¡¡0¡¡
Color45¡¡255¡¡153¡¡0¡¡
Color46¡¡255¡¡102¡¡0¡¡
Color47¡¡102¡¡102¡¡153¡¡
Color48¡¡150¡¡150¡¡150¡¡
Color49¡¡0¡¡51¡¡102¡¡
Color50¡¡51¡¡153¡¡102¡¡
Color51¡¡0¡¡51¡¡0¡¡
Color52¡¡51¡¡51¡¡0¡¡
Color53¡¡153¡¡51¡¡0¡¡
Color54¡¡153¡¡51¡¡102¡¡
Color55¡¡51¡¡51¡¡153¡¡
Color56¡¡51¡¡51¡¡51¡¡
+
+ + + Checks if a color is in the palette for the spreadsheet. + + Color structure. + Returns true if this color is in the palette. Otherwise, returns false + + + + Calculates the result of formulas. + + + For all supported formulas, please see the list at https://docs.aspose.com/display/cellsnet/Supported+Formula+Functions + + + + + Calculates the result of formulas. + + Indicates if hide the error in calculating formulas. The error may be unsupported function, external links, etc. + + + + Calculates the result of formulas. + + Indicates if hide the error in calculating formulas. The error may be unsupported function, external links, etc. + The custom formula calculation functions to extend the calculation engine. + + NOTE: This member is now obsolete. Instead, + please use CalculateFormula(CalculationOptions) method. + This method will be removed 12 months later since August 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Calculating formulas in this workbook. + + Options for calculation + + + + Refreshes dynamic array formulas(spill into new range of neighboring cells according to current data) + + Whether calculates and update cell values for those dynamic array formulas when + the spilled range changes. + + + + Gets or sets the default object of the workbook. + + + The DefaultStyle property is useful to implement a Style for the whole Workbook. + + + The following code creates and instantiates a new Workbook and sets a default to it. + + [C#] + Workbook workbook = new Workbook(); + Style defaultStyle = workbook.DefaultStyle; + defaultStyle.Font.Name = "Tahoma"; + workbook.DefaultStyle = defaultStyle; + + [Visual Basic] + Dim workbook as Workbook = new Workbook() + Dim defaultStyle as Style = workbook.DefaultStyle + defaultStyle.Font.Name = "Tahoma" + workbook.DefaultStyle = defaultStyle + + + + + Find best matching Color in current palette. + + Raw color. + Best matching color. + + + + Indicates if this spreadsheet is digitally signed. + + + + + Set Encryption Options. + + The encryption type. + The key length. + + + + Protects a workbook. + + Protection type. + Password to protect the workbook. + + + + Protects a shared workbook. + + Password to protect the workbook. + + + + Unprotects a workbook. + + Password to unprotect the workbook. + + + + Unprotects a shared workbook. + + Password to unprotect the workbook. + + + + Indicates whether structure or window is protected with password. + + + + + Removes VBA/macro from this spreadsheet. + + + + + Gets the in a spreadsheet. + + + + + Removes digital signature from this spreadsheet. + + + + + Accepts all tracked changes in the workbook. + + + + + Indicates if this spreadsheet contains macro/VBA. + + + + + Gets if the workbook has any tracked changes + + + + + Gets and sets the current file name. + + + If the file is opened by stream and there are some external formula references, + please set the file name. + + + + + Gets a DataSorter object to sort data. + + + + + Removes all external links in the workbook. + + + + + Gets theme color. + + The theme color type. + The theme color. + + + + Sets the theme color + + The theme color type. + the theme color + + + + Gets the theme name. + + + + + Customs the theme. + + The theme name + The theme colors + + The length of colors should be 12. +
Array index¡¡Theme type¡¡
0¡¡Backgournd1¡¡
1¡¡Text1¡¡
2¡¡Backgournd2¡¡
3¡¡Text2¡¡
4¡¡Accent1¡¡
5¡¡Accent2¡¡
6¡¡Accent3¡¡
7¡¡Accent4¡¡
8¡¡Accent5¡¡
9¡¡Accent6¡¡
10¡¡Hyperlink¡¡
11¡¡Followed Hyperlink¡¡
+
+ + + Copies the theme from another workbook. + + Source workbook. + + + + Indicates whether this workbook contains external links to other data sources. + + Whether this workbook contains external links to other data sources. + + + + If this workbook contains external links to other data source, + Aspose.Cells will attempt to retrieve the latest data. + + + External workbooks are referenced by this workbook. + If it's null, we will directly open the external linked files.. + If it's not null, + we will check whether the external link in the array first; + if not, we will open the external linked files again. + + + If the method is not called before calculating formulas, + Aspose.Cells will use the previous information(cached in the file); + Please set CellsHelper.StartupPath,CellsHelper.AltStartPath,CellsHelper.LibraryPath. + And please set Workbook.FilePath if this workbook is from a stream, + otherwise Aspose.Cells could not get the external link full path sometimes. + + + + + Returns a DocumentProperties collection that represents all the built-in document properties of the spreadsheet. + + A new property cannot be added to built-in document properties list. You can only get a built-in property and change its value. + The following is the built-in properties name list: +

Title

Subject

Author

Keywords

Comments

Template

Last Author

Revision Number

Application Name

Last Print Date

Creation Date

Last Save Time

Total Editing Time

Number of Pages

Number of Words

Number of Characters

Security

Category

Format

Manager

Company

Number of Bytes

Number of Lines

Number of Paragraphs

Number of Slides

Number of Notes

Number of Hidden Slides

Number of Multimedia Clips

+ + + [C#] + DocumentProperty doc = workbook.BuiltInDocumentProperties["Author"]; + doc.Value = "John Smith"; + + [Visual Basic] + Dim doc as DocumentProperty = workbook.BuiltInDocumentProperties("Author") + doc.Value = "John Smith" + + +
+ + + Returns a DocumentProperties collection that represents all the custom document properties of the spreadsheet. + + + + [C#] + excel.CustomDocumentProperties.Add("Checked by", "Jane"); + + [Visual Basic] + excel.CustomDocumentProperties.Add("Checked by", "Jane") + + + + + + Gets and sets the file format. + + + + + Gets and sets the interrupt monitor. + + + + + Gets the list of objects in the workbook. + + + + + Represents a Custom XML Data Storage Part (custom XML data within a package). + + + + + Gets mashup data. + + + + + Gets and sets the XML file that defines the Ribbon UI. + + + + + Gets and sets the absolute path of the file. + + + Only used for external links. + + + + + Gets the collection. + + + + + Imports an xml file into the workbook. + + the path of the xml file. + the destination sheet name . + the destination row of the xml. + the destination column of the xml. + + + + Imports an xml file into the workbook. + + the xml file stream. + the destination sheet name . + the destination row of the xml. + the destination column of the xml. + + + + Export XML data. + + name of the XML map that need to be exported + the export path + + + + Export XML data. + + name of the XML map that need to be exported + the export stream + + + + Sets digital signature to an spreadsheet file (Excel2007 and later). + + + + Only support adding Xmldsig Digital Signature + + + + Adds digital signature to an OOXML spreadsheet file (Excel2007 and later). + + + + Only support adding Xmldsig Digital Signature to an OOXML spreadsheet file + + + + Gets digital signature from file. + + + + + Removes personal information. + + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources. + + + + + Represents all settings of the workbook. + + + + + Releases resources. + + + + + Gets and sets the stream provider for external resource. + + + + + Gets and sets the author of the file. + + + It''s not set, check first, then check the user of Environment. + + + + + Indicates whether checking custom number format when setting Style.Custom. + + + + + Enable macros; + + + Now it only works when copying a worksheet to other worksheet in a workbook. + + + + + Gets or sets a value which represents if the workbook uses the 1904 date system. + + + + + Gets the protection type of the workbook. + + + + + True if calculations in this workbook will be done using only the precision of the numbers as they're displayed + + + + + Indicates whether re-calculate all formulas on opening file. + + + + + Indicates whether create calculated formulas chain. Default is false. + + + + + Indicates whether and how to show objects in the workbook. + + + + + Fully calculates every time when a calculation is triggered. + + + + + Indicates whether use iteration to resolve circular references. + + + + + Returns or sets the maximum number of iterations to resolve a circular reference. + + + + + Returns or sets the maximum number of change to resolve a circular reference. + + + + + It specifies whether to calculate formulas manually, + automatically or automatically except for multiple table operations. + + + Only sets for MS Excel. + Please manually calling Workbook.CalculateFormula() method to calculate formulas with Aspose.Cells. + + + + + Specifies the version of the calculation engine used to calculate values in the workbook. + + + + + Specifies the stack size for calculating cells recursively. + The large value for this size will give better performance when there are lots of cells need to be calculated recursively. + On the other hand, larger value will raise the risk of StackOverflowException. + If user gets StackOverflowException when calculating formulas, this value should be decreased. + + + + + Indicates whether to recalculate before saving the document. + + + + + Width of worksheet tab bar (in 1/1000 of window width). + + + + + Get or sets a value whether the Workbook tabs are displayed. + + The default value is true. + The following code hides the Sheet Tabs and Tab Scrolling Buttons for the spreadsheet. + + [C#] + // Hide the spreadsheet tabs. + workbook.ShowTabs = false; + + [Visual Basic] + ' Hide the spreadsheet tabs. + workbook.ShowTabs = False + + + + + Gets or sets the first visible worksheet tab. + + + + + Gets or sets a value indicating whether the generated spreadsheet will contain a horizontal scroll bar. + + The default value is true. + + The following code makes the horizontal scroll bar invisible for the spreadsheet. + + [C#] + // Hide the horizontal scroll bar of the Excel file. + workbook.IsHScrollBarVisible = false; + + [Visual Basic] + ' Hide the horizontal scroll bar of the Excel file. + workbook.IsHScrollBarVisible = False + + + + + Gets or sets a value indicating whether the generated spreadsheet will contain a vertical scroll bar. + + The default value is true. + The following code makes the vertical scroll bar invisible for the spreadsheet. + + [C#] + // Hide the vertical scroll bar of the Excel file. + workbook.IsVScrollBarVisible = false; + + [Visual Basic] + ' Hide the vertical scroll bar of the Excel file. + workbook.IsVScrollBarVisible = False + + + + + Gets or sets a value that indicates whether the Workbook is shared. + + The default value is false. + + + + Gets or sets the user interface language of the Workbook version based on CountryCode that has saved the file. + + + + + Gets or sets the regional settings for workbook. + + + 1. Regional settings used by Aspose.Cells component for a workbook loaded from template file: + i). For an XLS file, there are fields defined for regional settings and MS Excel does save regional settings data into the file when saving the XLS file. + So, we use the saved region in the template file for the workbook. + If you do not want to use the region saved in the XLS file, please reset it to the expected one (such as, CountryCode.Default) after loading the template file. + And, we save the user specified value (by this method) into the file too when saving an XLS file. + ii). For other file formats, such as, XLSX, XLSB...etc., there is no field defined for regional settings in the file format specification. + So, we use the regional settings of application's environment for the workbook. + And, the user specified value (by this method) cannot be kept for the generated files with those file formats. + 2. For the view effect in MS Excel: + The applied regional settings here can take effect only at runtime with Aspose.Cells component and not when viewing the generated file with MS Excel. + Even for the generated XLS file in which the specified regional settings data has been saved, when viewing/editing it with MS Excel, + the used region to perform formatting by MS Excel is always the default regional settings of the environment where MS Excel is running, + not the one saved in the file. It is MS Excel's behavior and cannot be changed by code. + + + + + Gets the default theme font name. + + The scheme type of the font. + + + + + + Gets or sets the system culture info. + + + Returns null if culture info is not set and is not set. + + + + + Gets and sets the globalization settings. + + + + + Gets or sets the decimal separator for formatting/parsing numeric values. Default is the decimal separator of current Region. + + + + + Gets or sets the character that separates groups of digits to the left of the decimal in numeric values. Default is the group separator of current Region. + + + + + Represents Workbook file encryption password. + + + + + Provides access to the workbook write protection options. + + + + + Gets a value that indicates whether a password is required to open this workbook. + + + + + Gets a value that indicates whether the structure or window of the Workbook is protected. + + + + + Indicates whether encrypting the workbook with default password if Structure and Windows of the workbook are locked. + + + The default value is false now. It's same as MS Excel 2013. + + + + + Represents whether the generated spreadsheet will be opened Minimized. + + + + + Indicates whether this workbook is hidden. + + + + + Specifies a boolean value that indicates the application automatically compressed pictures in the workbook. + + + + + True if personal information can be removed from the specified workbook. + + + + + + + Gets and sets whether hide the field list for the PivotTable. + + + + + Gets and sets how updates external links when the workbook is opened. + + + + + Set the type of print orientation for the whole workbook. + + The + + + + Gets the max row index, zero-based. + + + Returns 65535 if the file format is Excel97-2003; + + + + + Gets the max column index, zero-based. + + + Returns 255 if the file format is Excel97-2003; + + + + + Indicates whether parsing the formula when reading the file. + + + Only applies for Excel Xlsx, Xltx, Xltm and Xlsm file + because the formulas in the files are stored with a string formula. + NOTE: This member is now obsolete. Instead, please use LoadOptions.ParsingFormulaOnOpen. + This property will be removed 12 months later since January 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + The distance from the left edge of the client area to the left edge of the window, in unit of point. + + + + + The distance from the left edge of the client area to the left edge of the window. + In unit of inch. + + + + + The distance from the left edge of the client area to the left edge of the window. + In unit of centimeter. + + + + + The distance from the top edge of the client area to the top edge of the window, in unit of point. + + + + + The distance from the top edge of the client area to the top edge of the window, in unit of inch. + + + + + The distance from the top edge of the client area to the top edge of the window, in unit of centimeter. + + + + + The width of the window, in unit of point. + + + + + The width of the window, in unit of inch. + + + + + The width of the window, in unit of centimeter. + + + + + The height of the window, in unit of point. + + + + + The height of the window, in unit of inch. + + + + + The height of the window, in unit of centimeter. + + + + + Indicates whether update adjacent cells' border. + + + The default value is false. + For example: the bottom border of the cell A1 is update, + the top border of the cell A2 should be changed too. + + + + + Gets and sets the number of significant digits. + The default value is . + + + Only could be 15 or 17 now. + + + + + Indicates whether check compatibility when saving workbook. + + + The default value is true. + + + + + Whether check restriction of excel file when user modify cells related objects. + For example, excel does not allow inputting string value longer than 32K. + When you input a value longer than 32K such as by Cell.PutValue(string), if this property is true, you will get an Exception. + If this property is false, we will accept your input string value as the cell's value so that later + you can output the complete string value for other file formats such as CSV. + However, if you have set such kind of value that is invalid for excel file format, + you should not save the workbook as excel file format later. Otherwise there may be unexpected error for the generated excel file. + + + + + Indicates whether the file is mark for auto-recovery. + + + + + indicates whether the application last saved the workbook file after a crash. + + + + + indicates whether the application last opened the workbook for data recovery. + + + + + Indicates whether the application last opened the workbook in safe or repair mode. + + + + + Specifies the incremental public release of the application. + + + + + Gets or sets the memory usage options. The new option will be taken as the default option for newly created worksheets but does not take effect for existing worksheets. + + + + + Gets and sets the default print paper size. + + + If there is no setting about paper size,MS Excel will use default printer's setting. + + + + + Gets or sets warning callback. + + + + + Gets and sets the max row number of shared formula. + + + If the number is too large, the autofilter works very slow in MS Excel 2013. + + + + + Specifies the OOXML version for the output document. The default value is Ecma376_2006. + + + Only for .xlsx files. + + + + + Indicates whether setting property when entering the string value(which starts with single quote mark ) to the cell + + + + + Encapsulates the object that represents a single worksheet. + + + + [C#] + + Workbook workbook = new Workbook(); + + Worksheet sheet = workbook.Worksheets[0]; + + //Freeze panes at "AS40" with 10 rows and 10 columns + sheet.FreezePanes("AS40", 10, 10); + + //Add a hyperlink in Cell A1 + sheet.Hyperlinks.Add("A1", 1, 1, "http://www.aspose.com"); + + [Visual Basic] + + Dim workbook as Workbook = new Workbook() + + Dim sheet as Worksheet = workbook.Worksheets(0) + + 'Freeze panes at "AS40" with 10 rows and 10 columns + sheet.FreezePanes("AS40", 10, 10) + + 'Add a hyperlink in Cell A1 + sheet.Hyperlinks.Add("A1", 1, 1, "http://www.aspose.com") + + + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources. + + + + + Represents the various types of protection options available for a worksheet. Supports advanced protection options in ExcelXP and above version. + + This property can protect worksheet in all versions of Excel file and support advanced protection options in ExcelXP and above version. + + + + + Gets and sets the unique id, it is same as {15DB5C3C-A5A1-48AF-8F25-3D86AC232D4F}. + + + + + Gets the window panes. + + + If the window is not split or frozen. + + + + + Gets the workbook object which contains this sheet. + + + + + Gets the collection. + + + + + Gets the queryTables in the worksheet. + + + + + Gets all pivot tables in this worksheet. + + + + + Represents worksheet type. + + + + + Gets or sets the name of the worksheet. + + The max length of sheet name is 31. And you cannot assign same name(case insensitive) to two worksheets. + For example, you cannot set "SheetName1" to the first worksheet and set "SHEETNAME1" to the second worksheet. + + + + Indicates whether to show formulas or their results. + + + + + Gets or sets a value indicating whether the gridlines are visible.Default is true. + + + + + Gets or sets a value indicating whether the worksheet will display row and column headers. + Default is true. + + + + + Indicates whether the pane has horizontal or vertical splits, and whether those splits are frozen. + + + + + True if zero values are displayed. + + + + + Indicates if the specified worksheet is displayed from right to left instead of from left to right. + Default is false. + + + + + Indicates whether to show outline. + + + + + Indicates whether this worksheet is selected when the workbook is opened. + + + + + Freezes panes at the specified cell in the worksheet. + + Row index. + Column index. + Number of visible rows in top pane, no more than row index. + Number of visible columns in left pane, no more than column index. + +

Row index and column index cannot all be zero. Number of rows and number of columns + also cannot all be zero.

+

The first two parameters specify the froze position and the last two parameters specify the area frozen on the left top pane.

+
+
+ + + Gets the freeze panes. + + Row index. + Column index. + Number of visible rows in top pane, no more than row index. + Number of visible columns in left pane, no more than column index. + Return whether the worksheet is frozen + + + + Splits window. + + + + + Freezes panes at the specified cell in the worksheet. + + Cell name. + Number of visible rows in top pane, no more than row index. + Number of visible columns in left pane, no more than column index. + Row index and column index cannot all be zero. Number of rows and number of columns + also cannot all be zero. + + + + Unfreezes panes in the worksheet. + + + + + Removes split window. + + + + + Gets all ListObjects in this worksheet. + + + + + Specifies the internal identifier for the sheet. + + + + + Gets the collection. + + + + + Gets the collection. + + + + + Adds page break. + + + + + + + Gets the collection. + + + + + Copies contents and formats from another worksheet. + + Source worksheet. + + + + Copies contents and formats from another worksheet. + + Source worksheet. + + + You can copy data from another worksheet in the same file or another file. However, this method does not support to copy drawing objects, such as comments, images and charts. + + + + Autofits the column width. + + Column index. + First row index. + Last row index. + This method autofits a row based on content in a range of cells within the row. + + + + + Autofits all columns in this worksheet. + + + + + Autofits all columns in this worksheet. + + The auto fitting options + + + + + Autofits the column width. + + Column index. + AutoFitColumn is an imprecise function. + + + + Autofits the columns width. + + First column index. + Last column index. + AutoFitColumn is an imprecise function. + + + + Autofits the columns width. + + First column index. + Last column index. + The auto fitting options + AutoFitColumn is an imprecise function. + + + + Autofits the columns width. + + First row index. + First column index. + Last row index. + Last column index. + AutoFitColumn is an imprecise function. + + + + Autofits the columns width. + + First row index. + First column index. + Last row index. + Last column index. + The auto fitting options + AutoFitColumn is an imprecise function. + + + + Autofits the row height. + + Row index. + First column index. + Last column index. + This method autofits a row based on content in a range of cells within the row. + + + + + Autofits the row height. + + Row index. + First column index. + Last column index. + The auto fitter options + This method autofits a row based on content in a range of cells within the row. + + + + + Autofits all rows in this worksheet. + + + + + Autofits all rows in this worksheet. + + + True,only autofits the row height when row height is not customed. + + + + + Autofits all rows in this worksheet. + + The auto fitter options + + + + Autofits row height in a range. + + Start row index. + End row index. + + + + Autofits row height in a range. + + Start row index. + End row index. + The options of auto fitter. + + + + Autofits row height in a rectangle range. + + Start row index. + End row index. + Start column index. + End column index. + + + + Autofits the row height. + + Row index. + AutoFitRow is an imprecise function. + + + + Represents the page setup description in this sheet. + + + + + Represents auto filter for the specified worksheet. + + + + + Filters data using complex criteria. + + Indicates whether filtering the list in place. + The list range. + The criteria range. + The range where copying data to. + Only displaying or copying unique rows. + + + + Removes the auto filter of the worksheet. + + + + + Indicates whether this worksheet has auto filter. + + + + + Indicates whether the Transition Formula Evaluation (Lotus compatibility) option is enabled. + + + + + Indicates whether the Transition Formula Entry (Lotus compatibility) option is enabled. + + + + + Indicates the visible state for this sheet. + + + + + Sets the visible options. + + Whether the worksheet is visible + Whether to ignore error if this option is not valid. + + + + Represents if the worksheet is visible. + + + + + Selects a range. + + The start row. + + The start column + The number of rows. + The number of columns + True means removing other selected range and only select this range. + + + + + Removes all drawing objects in this worksheet. + + + + + Clears all comments in designer spreadsheet. + + + + + Gets the sparkline group collection in the worksheet. + + + + + Gets a collection + + + + + Gets the collection. + + + + + Gets a collection. + + + + + Gets a collection. + + + + + Gets a collection. + + + + + Represents a collection of in a worksheet. + + + + + Returns all drawing shapes in this worksheet. + + + + + Get the Slicer collection in the worksheet + + + + + Protects worksheet. + + Protection type. + This method protects worksheet without password. It can protect worksheet in all versions of Excel file. + + + + + Protects worksheet. + + Protection type. + Password. + If the worksheet is already protected by a password, please supply the old password. + Otherwise, you can set a null value or blank string to this parameter. + This method can protect worksheet in all versions of Excel file. + + + + + [C#] + + + + //Creating a file stream containing the Excel file to be opened + FileStream fstream = new FileStream("C:\\book1.xls", FileMode.Open); + //Instantiating a Workbook object and Opening the Excel file through the file stream + Workbook excel = new Workbook(fstream); + //Accessing the first worksheet in the Excel file + Worksheet worksheet = excel.Worksheets[0]; + //Protecting the worksheet with a password + worksheet.Protect(ProtectionType.All, "aspose", null); + //Saving the modified Excel file in default (that is Excel 20003) format + excel.Save("C:\\output.xls"); + //Closing the file stream to free all resources + fstream.Close(); + + [Visual Basic] + + 'Creating a file stream containing the Excel file to be opened + Dim fstream As FileStream = New FileStream("C:\\book1.xls", FileMode.Open) + 'Instantiating a Workbook object and Opening the Excel file through the file stream + Dim excel As Workbook = New Workbook(fstream) + 'Accessing the first worksheet in the Excel file + Dim worksheet As Worksheet = excel.Worksheets(0) + 'Protecting the worksheet with a password + worksheet.Protect(ProtectionType.All, "aspose", DBNull.Value.ToString()) + 'Saving the modified Excel file in default (that is Excel 20003) format + excel.Save("C:\\output.xls") + 'Closing the file stream to free all resources + fstream.Close() + + + + + + + Unprotects worksheet. + + This method unprotects worksheet which is protected without password. + + + + + Unprotects worksheet. + + Password + If the worksheet is protected without a password, you can set a null value or blank string to password parameter. + + + + + Gets the index of sheet in the worksheet collection. + + + + + Moves the sheet to another location in the spreadsheet. + + Destination sheet index. + + + + Indicates if the worksheet is protected. + + + + + Gets the data validation setting collection in the worksheet. + + + + + Gets the allow edit range collection in the worksheet. + + + + + Gets error check setting applied on certain ranges. + + + + + Gets the outline on this worksheet. + + + + + Represents first visible row index. + + + + + Represents first visible column index. + + + + + Replaces all cells' text with a new string. + + Old string value. + New string value. + + + + Represents the scaling factor in percentage. It should be between 10 and 400. + + Please set the view type first. + + + + Gets and sets the view type. + + + + + Indicates whether the specified worksheet is shown in normal view or page break preview. + + + + + Indicates whether the ruler is visible. This property is only applied for page break preview. + + + + + Gets selected ranges of cells in the designer spreadsheet. + + An which contains selected ranges. + + + + Represents worksheet tab color. + + This feature is only supported in ExcelXP(Excel2002) and later versions. + If you save file as Excel97 or Excel2000 format, it will be omitted. + + + + Gets worksheet code name. + + + + + Sets worksheet background image. + + Picture data. + + NOTE: This member is now obsolete. Instead, + please use Worksheet.BackgroundImage property. + This property will be removed 12 months later since August 2016. + Aspose apologizes for any inconvenience you may have experienced. + + + + Gets and sets worksheet background image. + + + + + Gets the ConditionalFormattings in the worksheet. + + + + + Gets or sets the active cell in the worksheet. + + + + + Gets an object representing + the identifier information associated with a worksheet. + + + Worksheet.CustomProperties provide a preferred mechanism for storing arbitrary data. + It supports legacy third-party document components, as well as those situations that have a stringent need for binary parts. + + + + + Gets automatic page breaks. + + The print options + The automatic page breaks areas. + + Each cell area represents a paper. + + + + + Gets all objects of the worksheet. + + + + + Returns a string represents the current Worksheet object. + + + + + + + Gets the collection of . + + + + + Starts the session that uses caches to access the data in this worksheet. + + options of data access + + After finishing the access to the data, should + be invoked with same options to clear all caches and recover normal access mode. + + + + + Closes the session that uses caches to access the data in this worksheet. + + options of data access + + + + Calculates a formula. + + Formula to be calculated. + Calculated formula result. + + + + Calculates a formula. + + Formula to be calculated. + Options for calculating formula + Calculated formula result. + + + + Calculates all formulas in this worksheet. + + True means if the worksheet' cells depend on the cells of other worksheets, + the dependent cells in other worksheets will be calculated too. + False means all the formulas in the worksheet have been calculated and the values are right. + Indicates if hide the error in calculating formulas. + The error may be unsupported function, external links, etc. + The custom formula calculation functions to extend the calculation engine. + + NOTE: This member is now obsolete. Instead, + please use CalculateFormula(CalculationOptions, bool) method. + This method will be removed 12 months later since August 2020. + Aspose apologizes for any inconvenience you may have experienced. + + + + Calculates all formulas in this worksheet. + + Options for calculation + True means if the worksheet' cells depend on the cells of other worksheets, + the dependent cells in other worksheets will be calculated too. + False means all the formulas in the worksheet have been calculated and the values are right. + + + + Query cell areas that mapped/linked to the specific path of xml map. + + xml element path + e.g. A xml map element structure: + + -RootElement + |-Attribute1 + |-SubElement + |-Attribute2 + |-Attribute3 + + To query "Attribute1", path is "/RootElement/@Attribute1" + To query "Attribute2", path is "/RootElement/SubElement/@Attribute2" + To query whole "SubElement", path is "/RootElement/SubElement" + Specify an xml map if you want to query for the specific path within a specific map list that mapped/linked to the specific path of xml map, an empty list is returned if nothing is mapped/linked. + + + Gets collection of cells on this worksheet being watched in the 'watch window'. + + + + + Refreshes all the PivotTables in this Worksheet. + + + + + Encapsulates a collection of objects. + + + + [C#] + + Workbook workbook = new Workbook(); + + WorksheetCollection sheets = workbook.Worksheets; + + //Add a worksheet + sheets.Add(); + + //Change the name of a worksheet + sheets[0].Name = "First Sheet"; + + //Set the active sheet to the second worksheet + sheets.SetActiveSheet(1); + + + [Visual Basic] + + Dim excel as Workbook = new Workbook() + + Dim sheets as WorksheetCollection = excel.Worksheets + + 'Add a worksheet + sheets.Add() + + 'Change the name of a worksheet + sheets(0).Name = "First Sheet" + + 'Set the active sheet to the second worksheet + sheets.SetActiveSheet(1) + + + + + + Gets the list of task panes. + + + + + Gets the list of task panes. + + + + + Gets the list of threaded comment authors. + + + + + Indicates whether refresh all connections on opening file in MS Excel. + + + + + Creates a object from an address of the range. + + The address of the range. + The sheet index. + A object + + + + Creates a object from an address of the range. + + The address of the range. + The sheet index. + A object + + + + Gets the collection of all the Name objects in the spreadsheet. + + + + + Gets the element at the specified index. + + The zero based index of the element. + The element at the specified index. + + + + Gets the element with the specified name. + + Worksheet name + The element with the specified name. + + + + Gets the worksheet by the code name. + + Worksheet code name. + The element with the specified code name. + + + + Represents the index of active worksheet when the spreadsheet is opened. + + Sheet index is zero based. + + + + Sorts the defined names. + + If you create a large amount of named ranges in the Excel file, + please call this method after all named ranges are created and before saving + + + + Insert a worksheet. + + The sheet index + The sheet type. + Returns an inserted worksheet. + + + + Insert a worksheet. + + The sheet index + The sheet type. + The sheet name. + Returns an inserted worksheet. + + + + Adds a worksheet to the collection. + + Worksheet type. + + object index. + + + [C#] + Workbook workbook = new Workbook(); + workbook.Worksheets.Add(SheetType.Chart); + Cells cells = workbook.Worksheets[0].Cells; + cells["c2"].PutValue(5000); + cells["c3"].PutValue(3000); + cells["c4"].PutValue(4000); + cells["c5"].PutValue(5000); + cells["c6"].PutValue(6000); + Charts charts = workbook.Worksheets[1].Charts; + int chartIndex = charts.Add(ChartType.Column, 10,10,20,20); + Chart chart = charts[chartIndex]; + chart.NSeries.Add("Sheet1!C2:C6", true); + + [Visual Basic] + Dim workbook As Workbook = New Workbook() + workbook.Worksheets.Add(SheetType.Chart) + Dim cells As Cells = workbook.Worksheets(0).Cells + cells("c2").PutValue(5000) + cells("c3").PutValue(3000) + cells("c4").PutValue(4000) + cells("c5").PutValue(5000) + cells("c6").PutValue(6000) + Dim charts As Charts = workbook.Worksheets(1).Charts + Dim chartIndex As Integer = charts.Add(ChartType.Column,10,10,20,20) + Dim chart As Chart = charts(chartIndex) + chart.NSeries.Add("Sheet1!C2:C6", True) + + + + + + Swaps the two sheets. + + The first worksheet. + The second worksheet. + + + + Adds a worksheet to the collection. + + + object index. + + + + Adds a worksheet to the collection. + + Worksheet name + + object. + + + + Adds addin function into the workbook + + the file contains the addin functions + the addin function name + whether the given addin file is in the directory or sub-directory of Workbook Add-In library. + This flag takes effect and makes difference when given addInFile is of relative path: + true denotes the path is relative to Add-In library and false denotes the path is relative to this Workbook. + ID of the data which contains given addin function + + + + Adds addin function into the workbook + + ID of the data which contains addin functions, + can be got by the first call of for the same addin file. + the addin function name + URL of the addin file which contains addin functions + + + + Removes the element at a specified name. + + The name of the element to remove. + + + + Removes the element at a specified index. + + The index value of the element to remove. + + + + Clear all worksheets. + + + A workbook must contains a worksheet. + + + + + Adds a worksheet to the collection and copies data from an existed worksheet. + + Name of source worksheet. + + object index. + Specifies an invalid worksheet name. + + + + Adds a worksheet to the collection and copies data from an existed worksheet. + + Index of source worksheet. + + object index. + + + + Gets the master differential formatting records. + + + + + Gets Range object by pre-defined name. + + Name of range. + Range object.

Returns null if the named range does not exist.
+
+ + + Gets all pre-defined named ranges in the spreadsheet. + + An array of Range objects. + If the defined Name's reference is external or has multiple ranges, no Range object will be returned for this Name. +

Returns null if the named range does not exist.
+
+ + + Gets all pre-defined named ranges in the spreadsheet. + + An array of Range objects.

Returns null if the named range does not exist.
+
+ + + Gets and sets the XML maps in the workbook. + + + + + Returns a DocumentProperties collection that represents all the built-in document properties of the spreadsheet. + + A new property cannot be added to built-in document properties list. You can only get a built-in property and change its value. + The following is the built-in properties name list: +

Title

Subject

Author

Keywords

Comments

Template

Last Author

Revision Number

Application Name

Last Print Date

Creation Date

Last Save Time

Total Editing Time

Number of Pages

Number of Words

Number of Characters

Security

Category

Format

Manager

Company

Number of Bytes

Number of Lines

Number of Paragraphs

Number of Slides

Number of Notes

Number of Hidden Slides

Number of Multimedia Clips

+ + + [C#] + DocumentProperty doc = workbook.Worksheets.BuiltInDocumentProperties["Author"]; + doc.Value = "John Smith"; + + [Visual Basic] + Dim doc as DocumentProperty = workbook.Worksheets.BuiltInDocumentProperties("Author") + doc.Value = "John Smith" + + +
+ + + Returns a DocumentProperties collection that represents all the custom document properties of the spreadsheet. + + + + [C#] + excel.Worksheets.CustomDocumentProperties.Add("Checked by", "Jane"); + + [Visual Basic] + excel.Worksheets.CustomDocumentProperties.Add("Checked by", "Jane") + + + + + + Gets and Sets displayed size when Workbook file is used as an Ole object. + + + Null means no ole size setting. + + + + + Sets displayed size when Workbook file is used as an Ole object. + + Start row index. + End row index. + Start column index. + End column index. + This method is generally used to adjust display size in ppt file or doc file. + + + + Represents external links in a workbook. + + + + + Gets object. + + + + + Clears pivot tables from the spreadsheet. + + + + + Represents revision logs. + + + + + Refreshes all the PivotTables in the WorksheetCollection. + + + + + Represents Xml Data Binding information. + + + + + Represents Xml Data Binding information. + + + + + Gets source url of this data binding. + + + + + Represents Xml map information. + + + + + Returns or sets the name of the object. + + + + + Gets root element name. + + + + + Gets an of this map. + + + + + A collection of objects that represent XmlMap information. + + + + + Gets the xml map by the specific index. + + The index. + The xml map + + + + Add a by the url/path of a xml/xsd file. + + url/path of a xml/xsd file. + + object index. + + + + Removes all XmlMaps. + + +
+
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/AnotherApp.cs b/Demos/Apps/Aspose.Cells.Common/Models/AnotherApp.cs new file mode 100644 index 000000000..e63163bfc --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/AnotherApp.cs @@ -0,0 +1,33 @@ +namespace Aspose.Cells.Common.Models +{ + public class AnotherApp + { + public string ImageSource { get; set; } + public string ImageAlt { get; set; } + public string AppName { get; set; } + public string Href { get; set; } + public string DisplayName { get; set; } + + public AnotherApp() + { + // Empty for inheritance + } + + public AnotherApp(string currAppName, string appName) + { + string[] parts = appName.Split('-'); + if (parts.Length > 1) + { + DisplayName = parts[0]; + } + else + { + DisplayName = appName; + } + AppName = appName; + Href = $"/cells/{appName.ToLower()}"; + ImageSource = $"/cells/{currAppName.ToLower()}/content/img/apps/aspose_{appName.ToLower()}-app.png"; + ImageAlt = $"{AppName}"; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/AwsCache.cs b/Demos/Apps/Aspose.Cells.Common/Models/AwsCache.cs new file mode 100644 index 000000000..267be0978 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/AwsCache.cs @@ -0,0 +1,38 @@ +using System.IO; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Services; +using Aspose.Cells.GridJs; + +namespace Aspose.Cells.Common.Models +{ + public class AwsCache : GridCacheForStream + { + private readonly IStorageService _storage; + + public AwsCache(IStorageService storage) + { + _storage = storage; + } + + private static string GetKey(string uid) + { + return $"{Configuration.GridJsCacheFolder}/{uid}"; + } + + public override void SaveStream(Stream s, string uid) + { + s.Position = 0; + _storage.Upload(GetKey(uid), s).Wait(); + } + + public override Stream LoadStream(string uid) + { + return _storage.Download(GetKey(uid)).Result; + } + + public override string GetImageUrl(string uid) + { + return _storage.GetUrl(2, GetKey(uid)); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/BaseDataProvider.cs b/Demos/Apps/Aspose.Cells.Common/Models/BaseDataProvider.cs new file mode 100644 index 000000000..c4a453645 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/BaseDataProvider.cs @@ -0,0 +1,13 @@ +using Aspose.Cells.Common.Services; + +namespace Aspose.Cells.Common.Models +{ + /// + /// Base class to be used for all the database access and provider design, Uses and forces database calls + /// + public abstract class BaseDataProvider + { + protected static GeneratedPagesService GeneratedPagesService = new GeneratedPagesService(); + protected static FileFormatService FileFormatService = new FileFormatService(); + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/BaseResult.cs b/Demos/Apps/Aspose.Cells.Common/Models/BaseResult.cs new file mode 100644 index 000000000..ee87b92fa --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/BaseResult.cs @@ -0,0 +1,19 @@ +namespace Aspose.Cells.Common.Models +{ + /// + /// Base class for results. + /// + public class BaseResult + { + /// + /// Is result success? + /// + public bool IsSuccess { get; set; } + + /// + /// idError. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "id always small")] + public string idError { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/Breadcrumb.cs b/Demos/Apps/Aspose.Cells.Common/Models/Breadcrumb.cs new file mode 100644 index 000000000..a07df1f36 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/Breadcrumb.cs @@ -0,0 +1,50 @@ +using Newtonsoft.Json; +using System.Linq; + +namespace Aspose.Cells.Common.Models +{ + public class Breadcrumb + { + public static string GenerateJson(params (string Name, string Href)[] nameHrefPairs) + { + int i = 1; + + return JsonConvert.SerializeObject(new Breadcrumb() + { + Context = @"https://schema.org", + Type = "BreadcrumbList", + Items = nameHrefPairs.Select(x => new ItemListElement() + { + Position = i++, + Type = "ListItem", + Name = x.Name, + Item = x.Href + }).ToArray() + }); + } + + [JsonProperty("@context")] + public string Context { get; set; } + + [JsonProperty("@type")] + public string Type { get; set; } + + [JsonProperty("itemListElement")] + public ItemListElement[] Items { get; set; } + } + + public class ItemListElement + { + [JsonProperty("@type")] + public string Type { get; set; } + + [JsonProperty("position")] + public int Position { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("item")] + public string Item { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/FileFormat.cs b/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/FileFormat.cs new file mode 100644 index 000000000..18927f01c --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/FileFormat.cs @@ -0,0 +1,10 @@ +namespace Aspose.Cells.Common.Models.DTO.SEOApi +{ + public class FileFormat + { + public string FileFormatComUrl { get; set; } + public string Description { get; set; } + public string Name { get; set; } + public string Extension { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/GeneratedPage.cs b/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/GeneratedPage.cs new file mode 100644 index 000000000..5c50f3bcd --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/GeneratedPage.cs @@ -0,0 +1,11 @@ +namespace Aspose.Cells.Common.Models.DTO.SEOApi +{ + public class GeneratedPage + { + public string Url { get; set; } + public string Name { get; set; } + public string Extension1 { get; set; } + public string Extension2 { get; set; } + public string AppUrl { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/ResourcesUsage.cs b/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/ResourcesUsage.cs new file mode 100644 index 000000000..58604aac9 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/DTO/SEOApi/ResourcesUsage.cs @@ -0,0 +1,12 @@ +using System; + +namespace Aspose.Cells.Common.Models.DTO.SEOApi +{ + public class ResourcesUsage + { + public string Locale { get; set; } + public string Key { get; set; } + public DateTime Used { get; set; } + public string Url { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/DocumentInfo.cs b/Demos/Apps/Aspose.Cells.Common/Models/DocumentInfo.cs new file mode 100644 index 000000000..a041feaff --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/DocumentInfo.cs @@ -0,0 +1,20 @@ +namespace Aspose.Cells.Common.Models +{ + public class DocumentInfo + { + /// + /// FolderName + /// + public string FolderName { get; set; } + + /// + /// FileName + /// + public string FileName { get; set; } + + /// + /// Workbook + /// + public Workbook Workbook { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/ExtensionInfoModel.cs b/Demos/Apps/Aspose.Cells.Common/Models/ExtensionInfoModel.cs new file mode 100644 index 000000000..2f8f95f46 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/ExtensionInfoModel.cs @@ -0,0 +1,39 @@ +namespace Aspose.Cells.Common.Models +{ + /// + /// Prepares Extension and HowTo sections + /// Changes Title and TitleSub in ViewModel + /// + public class ExtensionInfoModel + { + public ViewModel Parent; + + /// + /// File extension without dot received by "fileformat" value in RouteData (e.g. docx) + /// + public string Extension { get; set; } + + public string Name { get; set; } + public string Description { get; set; } + public string Url { get; set; } + + public string AppName => Parent.AppName; + + public GeneratedPage GeneratedPage => Parent.GeneratedPage; + + public ExtensionInfoModel(ViewModel parent, string extension) + { + Parent = parent; + Extension = extension; + if (Extension.Equals("excel")) + { + Extension = "xlsx"; + } + + var fileformat = FileFormat.GetByExtension(Extension.ToLower()); + Name = fileformat.Name; + Description = fileformat.Description; + Url = fileformat.FileFormatComUrl; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/FileFormat.cs b/Demos/Apps/Aspose.Cells.Common/Models/FileFormat.cs new file mode 100644 index 000000000..7b7359112 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/FileFormat.cs @@ -0,0 +1,39 @@ +namespace Aspose.Cells.Common.Models +{ + public class FileFormat : BaseDataProvider + { + public FileFormat(string extension) + { + Extension = extension; + } + + public FileFormat(DTO.SEOApi.FileFormat result) + { + Extension = result.Extension; + Name = result.Name; + Description = result.Description; + FileFormatComUrl = result.FileFormatComUrl; + } + + public int Id { get; set; } + + public string Extension { get; set; } + + public string Name { get; set; } = string.Empty; + + public string Description { get; set; } = string.Empty; + + public string FileFormatComUrl { get; set; } = string.Empty; + + public FileFormat GetByExtension() + { + var result = FileFormatService.GetCached(Extension); + return result != null ? new FileFormat(result) : null; + } + + public static FileFormat GetByExtension(string extension) + { + return new FileFormat(extension.ToLower()).GetByExtension(); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/FileProcessingErrorCode.cs b/Demos/Apps/Aspose.Cells.Common/Models/FileProcessingErrorCode.cs new file mode 100644 index 000000000..f10587571 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/FileProcessingErrorCode.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Aspose.Cells.Common.Models +{ + public enum FileProcessingErrorCode + { + /// + /// OK + /// + OK = 0, + /// + /// NoImagesFound + /// + NoImagesFound = 10000, + /// + /// NoSearchResults + /// + NoSearchResults = 10001, + /// + /// WrongRegExp + /// + WrongRegExp = 10002, + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/FileSafeResult.cs b/Demos/Apps/Aspose.Cells.Common/Models/FileSafeResult.cs new file mode 100644 index 000000000..98c92f74a --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/FileSafeResult.cs @@ -0,0 +1,55 @@ +using System.IO; + +namespace Aspose.Cells.Common.Models +{ + /// + /// File processing result. + /// + public class FileSafeResult : BaseResult + { + /// + /// Upload id. + /// + public string id { get; set; } + + /// + /// File name. + /// + public string FileName { get; set; } + + /// + /// idUpload from request. + /// + public string idUpload { get; set; } + + /// + /// Used to stores local file path. + /// + protected string _localFilePath; + + /// + /// Returns local file path. + /// + /// Local file path. + public string GetLocalFilePath() => _localFilePath; + + /// + /// FileSafeResult constructor. + /// Sets IsSuccess to true. + /// + public FileSafeResult() + { + IsSuccess = true; + } + + /// + /// Internal FileSafeResult constructor. + /// Used to set local file path. + /// + /// + internal FileSafeResult(string localFilePath) : this() + { + _localFilePath = localFilePath; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/FlexibleResources.cs b/Demos/Apps/Aspose.Cells.Common/Models/FlexibleResources.cs new file mode 100644 index 000000000..4d57e744f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/FlexibleResources.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Aspose.Cells.Common.Config; +using Microsoft.AspNetCore.Hosting; + +namespace Aspose.Cells.Common.Models +{ + public class FlexibleResources + { + private string _locale; + protected IWebHostEnvironment Env { get; } + public FlexibleResources(IWebHostEnvironment env, string locale) + { + Env = env; + _locale = locale; + } + + public string Locale => _locale; + + public bool ContainsKey(string key) => AppXmlResource.ContainsKey(key); + + public string this[string key] + { + get + { + if (!AppXmlResource.ContainsKey(key)) + { + var anotherKey = ChangeFirstCharCase(key); + if (AppXmlResource.ContainsKey(anotherKey)) + return AppXmlResource.GetResource(anotherKey); + + throw new KeyNotFoundException($"The given key '{key}' was not present in the dictionary."); + } + + return AppXmlResource.GetResource(key); + } + } + + private string ChangeFirstCharCase(string key) + { + if (key.IsNullOrEmpty()) + return key; + + var builder = new StringBuilder(); + + if (char.IsLower(key[0])) + builder.Append(char.ToUpper(key[0])); + else + builder.Append(char.ToLower(key[0])); + + for (int i = 1; i < key.Length; i++) + builder.Append(key[i]); + + return builder.ToString(); + } + + public string GetValueOrDefault(string key) + { + if (!AppXmlResource.TryGetValue(key, out string result)) + return default(string); + + return result; + } + + internal string GetValueOrDefault(object p) + { + throw new NotImplementedException(); + } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/GeneratedPage.cs b/Demos/Apps/Aspose.Cells.Common/Models/GeneratedPage.cs new file mode 100644 index 000000000..6654bb38b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/GeneratedPage.cs @@ -0,0 +1,64 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Aspose.Cells.Common.Models +{ + public class GeneratedPage : BaseDataProvider + { + public GeneratedPage(DTO.SEOApi.GeneratedPage source) + { + Url = source.Url; + Name = source.Name; + Extension1 = source.Extension1; + Extension2 = source.Extension2; + AppUrl = source.AppUrl; + } + + public GeneratedPage(string url) + { + Url = url; + } + + public GeneratedPage(string appUrl, bool byAppUrl) + { + AppUrl = appUrl; + ByAppUrl = byAppUrl; + } + + public string Url { get; set; } = string.Empty; + + public string AppUrl { get; set; } + + public string Name { get; set; } = string.Empty; + + public string Extension1 { get; set; } = string.Empty; + + public string Extension2 { get; set; } = string.Empty; + + public bool ByAppUrl { get; set; } + + public GeneratedPage GetByUrl() + { + var result = GeneratedPagesService.GetCachedByUrl(Url); + return result != null ? new GeneratedPage(result) : null; + } + + public static GeneratedPage GetByUrl(string url) + { + return new GeneratedPage(url).GetByUrl(); + } + + public GeneratedPages GetByAppUrl() + { + var result = GeneratedPagesService.GetCachedByAppUrl(AppUrl); + + var generatedPages = new GeneratedPages(); + generatedPages.AddRange(result.Select(r => new GeneratedPage(r))); + return generatedPages; + } + } + + public class GeneratedPages : List + { + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/HowToModel.cs b/Demos/Apps/Aspose.Cells.Common/Models/HowToModel.cs new file mode 100644 index 000000000..ff6b27f75 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/HowToModel.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; + +namespace Aspose.Cells.Common.Models +{ + public class HowToModel + { + public string Title { get; set; } + public List List { get; set; } + + public ViewModel Parent; + private FlexibleResources Resources => Parent.Resources; + public string AppName => Parent.AppName; + + public HowToModel(ViewModel parent) + { + Parent = parent; + var extension = Parent.Extension?.ToUpper(); + var extension2 = Parent.Extension2?.ToUpper(); + if (string.IsNullOrEmpty(extension) || Parent.IsCanonical) + { + extension = Resources["cellsDocument"]; + } + + if (string.IsNullOrEmpty(extension2)) + { + extension2 = Resources["cellsReplacementExtension2"]; + } + + List = new List(); + var title = Resources[$"{Parent.Product}Howto{AppName}Title"]; + var titleEnd = title.EndsWith("file.") ? extension : Parent.PageProductTitle + " " + AppName; + var k = title.IndexOf("using", StringComparison.Ordinal) - 1; + if (k > 0) + title = title.Substring(0, k); + if (string.IsNullOrEmpty(Parent.Extension2)) + Title = string.Format(title, extension, titleEnd); + else + switch (Parent.AppName) + { + case "Conversion": + case "Merger": + k = title.IndexOf("files", StringComparison.Ordinal) - 1; + if (k > 0) + title = title.Substring(0, k); + Title = string.Format(title, $"{extension} to {extension2}", titleEnd); + break; + case "Comparison": + Title = string.Format(title, $"{extension} with {extension2}", titleEnd); + break; + case "Chart": + Title = string.Format(title, extension, titleEnd); + break; + } + + var hwName = Parent.Product + "HowtoName" + Parent.AppName + "Feature"; + var hwUrlPath = Parent.Product + "HowtoUrlPath" + Parent.AppName + "Feature"; + var hwImageUrl = Parent.Product + "HowtoImageUrl" + Parent.AppName + "Feature"; + var hw = Parent.Product + "Howto" + Parent.AppName + "Feature"; + var i = 1; + while (Resources.ContainsKey(hw + i)) + { + var item = new HowToItem(); + if (Resources.ContainsKey(hwName + i)) + item.Name = string.Format(Resources[hwName + i], extension, extension2); + if (Resources.ContainsKey(hwUrlPath + i)) + item.UrlPath = string.Format(Resources[hwUrlPath + i], extension, extension2); + if (Resources.ContainsKey(hwImageUrl + i)) + item.ImageUrl = string.Format(Resources[hwImageUrl + i], Parent.Product.ToLower(), extension, extension2); + item.Text = string.Format(Resources[hw + i], extension, extension2); + List.Add(item); + i++; + } + } + } + + public class HowToItem + { + public string Name { get; set; } + public string Text { get; set; } + public string ImageUrl { get; set; } + public string UrlPath { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/HtmlExportStreamProvider.cs b/Demos/Apps/Aspose.Cells.Common/Models/HtmlExportStreamProvider.cs new file mode 100644 index 000000000..06d453124 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/HtmlExportStreamProvider.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.IO; + +namespace Aspose.Cells.Common.Models +{ + public class HtmlExportStreamProvider : IStreamProvider + { + private readonly string _relativelyPath; + + internal HtmlExportStreamProvider(string filename) + { + FileStreams = new Dictionary(); + var fileInfo = new FileInfo(filename); + _relativelyPath = $"{fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length)}_files"; + } + + public void CloseStream(StreamProviderOptions options) + { + } + + public void InitStream(StreamProviderOptions options) + { + if (FileStreams.ContainsKey(options.DefaultPath)) return; + + options.Stream = new MemoryStream(); + var fileInfo = new FileInfo(options.DefaultPath); + var customPath = $"{_relativelyPath}/{fileInfo.Name}"; + options.CustomPath = customPath; + FileStreams.Add(customPath, options.Stream); + } + + internal IDictionary FileStreams { get; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/JSOptions.cs b/Demos/Apps/Aspose.Cells.Common/Models/JSOptions.cs new file mode 100644 index 000000000..c04d50bc8 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/JSOptions.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using Aspose.Cells.Common.Config; +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Models +{ + public class JSOptions + { + private readonly ViewModel _parent; + private FlexibleResources Resources => _parent.Resources; + + public string Product => _parent.Product; + public string AppURL => _parent.AppUrl; + public string AppName => _parent.AppName; + public string APIBasePath => $"/{Product.ToLower()}/{AppName.ToLower()}/api/"; + + public string ViewerPath => $"/{Product.ToLower()}/{AppName.ToLower()}/view?"; + public string EditorPath => $"/{Product.ToLower()}/{AppName.ToLower()}/edit?"; + public string ComparisonPath => $"/{Product.ToLower()}/{AppName.ToLower()}/compare?"; + + public string FileSelectMessage => Resources["cellsFileSelectMessage"]; + + public bool ShowViewerButton => _parent.ShowViewerButton; + public bool ShowDeleteButton => _parent.ShowDeleteButton; + public int MaximumUploadFiles => ViewModel.MaximumUploadFiles; + public int MaxsizeUploadFile => ViewModel.MaxsizeUploadFile; + + public string FileAmountMessage => Resources["cellsFileAmountMessageLessTen"]; + public string FileWrongSizeMessage => Resources["FileMaximumUploadSizeReached"]; + public bool IsAsposeCloudApp => Configuration.IsAsposeCloudApp; + /// + /// Apps like Viewer and Editor + /// + public bool UploadAndRedirect => _parent.UploadAndRedirect; + + public bool UseSorting => _parent.UseSorting; + + public string FileWrongTypeMessage { get; } + + public Dictionary FileProcessingErrorCodes => new Dictionary + { + {(int) FileProcessingErrorCode.NoSearchResults, Resources["cellsNoSearchResultsMessage"]}, + {(int) FileProcessingErrorCode.WrongRegExp, Resources["cellsWrongRegExpMessage"]} + }; + + /// + /// ['DOCX', 'DOC', ...] + /// + public IEnumerable UploadOptions => _parent.ExtensionsString.Replace(".", "").ToUpper().Split('|'); + + #region FileDrop + + public bool Multiple => !UploadAndRedirect; + public string DropFilesPrompt => Resources["cellsDropOrUploadFiles"]; + public string DropSourceFilePrompt => Resources["cellsDropOrUploadSourceFile"]; + public string DropTargetFilePrompt => Resources["cellsDropOrUploadTargetFile"]; + public string Accept => _parent.ExtensionsString.Replace("|.", ",."); + public bool CanWorkWithoutFiles => _parent.CanWorkWithoutFiles; + public bool DefaultFileBlockDisabled => _parent.DefaultFileBlockDisabled; + + #endregion + + public JSOptions(ViewModel model) + { + _parent = model; + if (string.IsNullOrEmpty(model.Extension) || model.IsCanonical) + FileWrongTypeMessage = Resources["cellsFileWrongTypeMessage"]; + else + FileWrongTypeMessage = string.Format(Resources["cellsFileWrongTypeMessage2"], $"{AppName}"); + } + + public override string ToString() + { + return JsonConvert.SerializeObject(this, Formatting.None); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/Languages.cs b/Demos/Apps/Aspose.Cells.Common/Models/Languages.cs new file mode 100644 index 000000000..9587c4d69 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/Languages.cs @@ -0,0 +1,8 @@ +namespace Aspose.Cells.Common.Models +{ + public class Languages + { + public string Code { get; set; } + public string Language { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/License.cs b/Demos/Apps/Aspose.Cells.Common/Models/License.cs new file mode 100644 index 000000000..29dd6f415 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/License.cs @@ -0,0 +1,19 @@ +namespace Aspose.Cells.Common.Models +{ + public static class License + { + public static void SetCellsLicense() + { + // set license + //var acLic = new Aspose.Cells.License(); + //acLic.SetLicense("Aspose.Total.lic"); + } + + public static void SetGridJsLicense() + { + // set license for Editor, Viewer and Comparison apps + //var license = new GridJs.License(); + //license.SetLicense("Aspose.Total.lic"); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/Options.cs b/Demos/Apps/Aspose.Cells.Common/Models/Options.cs new file mode 100644 index 000000000..c3bab5de2 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/Options.cs @@ -0,0 +1,97 @@ +namespace Aspose.Cells.Common.Models +{ + public class Options + { + /// + /// AppName + /// + public string AppName; + + /// + /// FolderName + /// + public string FolderName; + + /// + /// FileName + /// + public string FileName; + + private string _outputType; + + /// + /// By default, it is the extension of FileName + /// + public string OutputType + { + get => _outputType; + set + { + if (!value.StartsWith(".")) + value = "." + value; + _outputType = value; + } + } + + /// + /// Check if OutputType is a picture extension + /// + public bool IsPicture + { + get + { + return _outputType.ToLower() switch + { + ".bmp" => true, + ".png" => true, + ".jpg" => true, + ".jpeg" => true, + ".tiff" => true, + ".svg" => true, + _ => false + }; + } + } + + /// + /// ResultFileName + /// + public string ResultFileName; + + /// + /// MethodName + /// + public string MethodName; + + /// + /// ControllerName + /// + public string ControllerName; + + /// + /// CreateZip + /// + public bool CreateZip; + + /// + /// CheckNumberOfPages + /// + public bool CheckNumberOfPages = false; + + /// + /// DeleteSourceFolder + /// + public bool DeleteSourceFolder = false; + + /// + /// CalculateZipFileName + /// + public bool CalculateZipFileName = true; + + /// + /// Output zip filename (without '.zip'), if CreateZip property is true + /// By default, FileName + AppName + /// + public string ZipFileName; + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/OtherFeaturesItem.cs b/Demos/Apps/Aspose.Cells.Common/Models/OtherFeaturesItem.cs new file mode 100644 index 000000000..d4595849e --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/OtherFeaturesItem.cs @@ -0,0 +1,21 @@ +namespace Aspose.Cells.Common.Models +{ + public class OtherFeaturesItem + { + /// + /// Url for anchor + /// + public string Url { get; set; } + + /// + /// Title + /// + public string Title { get; set; } + + public OtherFeaturesItem(GeneratedPage page) + { + Url = page.Url; + Title = page.Name; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/OtherFeaturesModel.cs b/Demos/Apps/Aspose.Cells.Common/Models/OtherFeaturesModel.cs new file mode 100644 index 000000000..680eecb7a --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/OtherFeaturesModel.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace Aspose.Cells.Common.Models +{ + public class OtherFeaturesModel + { + public string Title { get; set; } + public string TitleSub { get; set; } + public string UlClass { get; set; } + + public OtherFeaturesItem[] Items { get; set; } + + public ViewModel Parent; + private FlexibleResources Resources => Parent.Resources; + public string AppName => Parent.AppName; + public string Product => Parent.Product; + public string ProductAppName => Parent.ProductAppName; + public string Extension => Parent.Extension; + + public OtherFeaturesModel(ViewModel parent) + { + Parent = parent; + + var appUrl = $"/{Product}/{AppName.ToLower()}"; + + var items = new GeneratedPage(appUrl, true).GetByAppUrl().Select(x => new OtherFeaturesItem(x)).ToArray(); + + var dic = new Dictionary(); + foreach (var item in items) + { + if (!dic.ContainsKey(item.Title)) + dic.Add(item.Title, item); + else if (item.Url.Contains(Parent.Product)) + { + dic.Remove(item.Title); + dic.Add(item.Title, item); + } + } + + var title = Resources[ProductAppName + "OtherFeaturesTitle"]; + var titleSub = string.Format(Resources[ProductAppName + "OtherFeaturesTitleSub"], + Parent.IsCanonical ? "" : Extension.ToUpper()); + + if (dic.Count == 0) + throw new Exception($"No other features for extension {Extension}"); + + Title = title; + TitleSub = titleSub; + Items = dic.Values.ToArray(); + + if (Items.Length > 15) + Items = Items.OrderBy(d => Guid.NewGuid()).Take(15).ToArray(); + + switch (Items.Length) + { + case 1: + UlClass = "onebox"; + break; + case 2: + UlClass = "twobox"; + break; + default: + UlClass = "threebox"; + break; + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/PreviewChart.cs b/Demos/Apps/Aspose.Cells.Common/Models/PreviewChart.cs new file mode 100644 index 000000000..447706405 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/PreviewChart.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; + +namespace Aspose.Cells.Common.Models +{ + public class PreviewChart + { + public int WorkbookHash { get; set; } + + public int SheetIndex { get; set; } + + public int ChartHash { get; set; } + + public string ChartName { get; set; } + + public string ImgFolderName { get; set; } + + public string ImgFileName { get; set; } + } + + public class PreviewChartsResponse : Response + { + public List Charts { get; set; } + + public string OutputType { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/Product.cs b/Demos/Apps/Aspose.Cells.Common/Models/Product.cs new file mode 100644 index 000000000..733add9ad --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/Product.cs @@ -0,0 +1,53 @@ +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Models +{ + public class Product + { + [JsonProperty("@context")] + public string Context { get; set; } + + [JsonProperty("@type")] + public string Type { get; set; } + + [JsonProperty("brand")] + public string Brand { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("image")] + public string Image { get; set; } + + [JsonProperty("description")] + public string Description { get; set; } + + [JsonProperty("category")] + public string Category { get; set; } + + [JsonProperty("aggregateRating")] + public AggregateRating AggregateRating { get; set; } + + } + public class AggregateRating + { + [JsonProperty("@type")] + public string Type { get; set; } + + [JsonProperty("worstRating")] + public string WorstRating { get; internal set; } + + [JsonProperty("bestRating")] + public string BestRating { get; internal set; } + + [JsonProperty("ratingValue")] + public string RatingValue { get; internal set; } + + [JsonProperty("ratingCount")] + public string RatingCount { get; internal set; } + + [JsonProperty("reviewCount")] + public string ReviewCount { get; internal set; } + + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/ResourcesModel.cs b/Demos/Apps/Aspose.Cells.Common/Models/ResourcesModel.cs new file mode 100644 index 000000000..52fe64403 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/ResourcesModel.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Controllers; + +namespace Aspose.Cells.Common.Models +{ + public class ResourcesModel + { + private ResourcesModel( + UIControllerBase controller, + string extension, + string product + ) + { + Applications = controller?.Applications; + Resources = controller?.Resources; + Product = product; + Extension1 = extension; + } + + private string FindKey(string method, string key, bool force = false) + { + if (Resources?.ContainsKey($"{Product}{method}{key}") == true) + return $"{Product}{method}{key}"; + + if (Resources?.ContainsKey($"{Product}{key}") == true) + return $"{Product}{key}"; + + if (Resources?.ContainsKey($"{method}{key}") == true) + return $"{method}{key}"; + + if (Resources?.ContainsKey($"{key}") == true) + return $"{key}"; + + if (force) + throw new KeyNotFoundException($"The given key '{key}' was not present in the Resources."); + + return null; + } + + public FlexibleResources Resources { get; } + + public string Product { get; } + + public string ProductFiles + { + get + { + switch (Product) + { + case "slides": + return "PowerPoint"; + default: + throw new ArgumentException($"Unknown product {Product}"); + } + } + } + + public string Method { get; } + + public string PageProductTitle => Resources["Aspose" + TitleCase(Product)]; + + public string EmailTo { get; set; } + + public string Description { get; set; } + private string PageTitleKey { get; set; } + private string MetaDescriptionKey { get; set; } + + public string SeoPageTitle { get; set; } + public string SeoMetaDescription { get; set; } + + public string HowToTitle { get; set; } + public List HowToFeatures { get; set; } + + public string ProductTitleKey { get; set; } + public string ProductTitleSubKey { get; set; } + + public string ProductTitle { get; set; } + public string ProductTitleSub { get; set; } + + public string AnotherFileKey { get; set; } + public string SuccessMessageKey { get; set; } + public string ButtonKey { get; set; } + public string Feature2 { get; set; } + + public List AppFeatures { get; set; } + + public string AppUrlId { get; set; } + public string Extension1 { get; set; } + public string Extension1Upper => Extension1?.ToUpper(); + public string Extension1Lower => Extension1?.ToLower(); + + public string Extension2 { get; set; } + public string Extension2Upper => Extension2?.ToUpper(); + public string Extension2Lower => Extension2?.ToLower(); + + public string Extension1Name { get; set; } + public string Extension1Description { get; set; } + public string Extension1DescriptionUrl { get; set; } + + public string Extension2Name { get; set; } + public string Extension2Description { get; set; } + public string Extension2DescriptionUrl { get; set; } + public bool? IsMainGeneratedPage { get; set; } + public GeneratedPages Generated1Pages { get; set; } + public GeneratedPages Generated2Pages { get; set; } + + public GeneratedPages GeneratedCombined { get; set; } + + protected string TitleCase(string value) => new CultureInfo("en-US", false).TextInfo.ToTitleCase(value); + + public UploadFileModel UploadFile { get; set; } + + public string RawHtmlAtStartProductFooter { get; set; } + public string RawHtmlBeforeHowToProductFooter { get; set; } + + public IEnumerable Applications { get; set; } + + public string ExtensionsString + { + get + { + if (Resources == null) + return null; + + var key1 = $"{Product}ValidationExpression"; + var key2 = $"{Product}{Method}ValidationExpression"; + var ext = Resources.ContainsKey(key1) ? Resources[key1] : Resources[key2]; + return ext; + } + } + + public string this[string key] + { + get + { + var foundKey = FindKey(Method, key, true); + return Resources[foundKey]; + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/Response.cs b/Demos/Apps/Aspose.Cells.Common/Models/Response.cs new file mode 100644 index 000000000..d8bebf73d --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/Response.cs @@ -0,0 +1,97 @@ +using System.Collections.ObjectModel; + +namespace Aspose.Cells.Common.Models +{ + public class Response + { + /// + /// Get or set DownloadFileLink + /// + public string DownloadFileLink { get; set; } + + /// + /// Get or set StatusCode + /// + public int StatusCode { get; set; } + + /// + /// Get or set FileName + /// + public string FileName { get; set; } + + /// + /// Get or set FolderName + /// + public string FolderName { get; set; } + + /// + /// Get or set Status + /// + public string Status { get; set; } + + /// + /// Get or set Text + /// + public string Text { get; set; } + + /// + /// Get or set Files + /// + public Collection Files { get; set; } + + /// + /// Get or set FileProcessingErrorCode + /// + public FileProcessingErrorCode FileProcessingErrorCode { get; set; } + + /// + /// Get count of files + /// + public int FileCount => Files?.Count ?? 0; + + public static Response Process(string folder, string fileName) + { + return new Response + { + FileName = fileName, + FolderName = folder, + Status = "Processing", + StatusCode = 204 + }; + } + + public static Response Complete(string folder, string fileName) + { + return new Response + { + FileName = fileName, + FolderName = folder, + Status = "Complete", + StatusCode = 200 + }; + } + + public static Response Error(string folder, string fileName, string message) + { + return new Response + { + FileName = fileName, + FolderName = folder, + Status = message, + StatusCode = 500 + }; + } + + public static Response NoSearchResults(string folder, string filename) + { + return new Response + { + FileName = filename, + FolderName = folder, + Status = "Complete", + StatusCode = 200, + FileProcessingErrorCode = FileProcessingErrorCode.NoSearchResults + }; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/Article.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/Article.cs new file mode 100644 index 000000000..d1bf24e83 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/Article.cs @@ -0,0 +1,34 @@ +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class Article : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "Article"; + + [JsonProperty("text")] + public string Text { get; set; } + + [JsonProperty("author")] + public string Author { get; set; } + + [JsonProperty("datePublished")] + public string DatePublished { get; set; } + + [JsonProperty("headline")] + public string HeadLine { get; set; } + + [JsonProperty("image")] + public string Image { get; set; } + + [JsonProperty("publisher")] + public string Publisher { get; set; } + + [JsonProperty("dateModified")] + public string DateModified { get; set; } + + [JsonProperty("mainEntityOfPage")] + public string MainEntityOfPage { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/BreadcrumbForApps.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/BreadcrumbForApps.cs new file mode 100644 index 000000000..731225d53 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/BreadcrumbForApps.cs @@ -0,0 +1,37 @@ +using Newtonsoft.Json; +using System.Collections.Generic; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class BreadcrumbForApps:Thing + { + [JsonProperty("@type")] + public override string Type { get; set; } = "BreadcrumbList"; + + [JsonProperty("name")] + public override string Name { get; set; } = "breadcrumbList"; + + [JsonProperty("itemListElement")] + public List Items { get; set; } = new List(); + } + + public class ListItemForApp:SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "ListItem"; + + [JsonProperty("position")] + public int Position { get; set; } + + [JsonProperty("item")] + public Item Item { get; set; } + } + + public class Item + { + [JsonProperty("@id")] + public string Id { get; set; } + [JsonProperty("name")] + public string Name { get; set; } + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/HowTo.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/HowTo.cs new file mode 100644 index 000000000..8ebdc3241 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/HowTo.cs @@ -0,0 +1,130 @@ +using Newtonsoft.Json; +using System.Collections.Generic; +using System.Linq; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class HowTo : CreativeWork + { + public HowTo(HowToModel HowToModel, string TitleSub, string Title) + { + Name = HowToModel.Title; + Description = Title; + Supply = new HowToSupply[] { new HowToSupply(TitleSub) }; + List steps = new List(); + if (HowToModel.List != null && HowToModel.List.Count > 0) + { + int i = 1; + foreach (HowToItem item in HowToModel.List) + { + steps.Add(new HowToStep() + { + Name = item.Name, + Text = item.Text, + Position = i.ToString(), + Url = new URL() { Id = item.UrlPath }, + Image = new ImageObject() { Url = new URL() { Id = item.ImageUrl } }, + }); + i++; + } + } + + Steps = steps.ToArray(); + } + + + [JsonProperty("@type")] + public override string Type { get; set; } = "HowTo"; + + [JsonProperty("image")] + public override ImageObject Image { get; set; } = new ImageObject() + { + Url = new URL() { Id = "https://products.aspose.app/img/howto.png" }, + Width = "280", + Height = "200" + }; + + [JsonProperty("estimatedCost")] + public MonetaryAmount EstimatedCost { get; set; } = new MonetaryAmount(); + + [JsonProperty("totalTime")] + public string TotalTime { get; set; } = "PT1M"; + + [JsonProperty("tool")] + public HowToTool Tool { get; set; } = new HowToTool(); + + [JsonProperty("supply")] + public HowToSupply[] Supply { get; set; } + + [JsonProperty("step")] + public HowToStep[] Steps { get; set; } + } + + public class HowToStep : CreativeWork + { + [JsonProperty("@type")] + public override string Type { get; set; } = "HowToStep"; + + [JsonProperty("position")] + public string Position { get; set; } + + [JsonProperty("text")] + public string Text { get; set; } + } + + public class HowToTool : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "HowToTool"; + + [JsonProperty("name")] + public string Name { get; set; } = "A Web browser"; + } + + public class HowToSupply + { + public HowToSupply(string name) + { + Name = name; + } + + [JsonProperty("@type")] + public string Type { get; set; } = "HowToSupply"; + + [JsonProperty("name")] + public string Name { get; set; } + } + + public class ImageObject : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "ImageObject"; + + [JsonProperty("url")] + public URL Url { get; set; } + + [JsonProperty("height")] + public string Height { get; set; } + + [JsonProperty("width")] + public string Width { get; set; } + } + + public class MonetaryAmount : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "MonetaryAmount"; + + [JsonProperty("currency")] + public string Currency { get; set; } = "USD"; + + [JsonProperty("value")] + public string Value { get; set; } = "0"; + } + + public class URL : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "URL"; + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/LocalBusiness.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/LocalBusiness.cs new file mode 100644 index 000000000..62fae0e84 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/LocalBusiness.cs @@ -0,0 +1,35 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class LocalBusiness:SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "LocalBusiness"; + + [JsonProperty("name")] + public string Name { get; set; } = "Aspose Pty Ltd"; + + [JsonProperty("image")] + public string Image { get; set; } //= "https://joomla-asposeapp.dynabic.com/templates/asposeapp/images/product-family/aspose-cells-app.png"; + + [JsonProperty("telephone")] + public string Telephone { get; set; } = "+19033061676"; + + [JsonProperty("aggregateRating")] + public AggregateRating AggregateRating { get; set; } = new AggregateRating(); + + [JsonProperty("address")] + public Adress Adress { get; set; } = new Adress(); + + [JsonProperty("priceRange")] + public string PriceRange { get; set; } = "$$"; + + [JsonProperty("url")] + public string Url { get; set; } = "https://www.aspose.com/"; + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/OpenGraph.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/OpenGraph.cs new file mode 100644 index 000000000..98a5a603f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/OpenGraph.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class OpenGraph + { + public string SiteName { get; set; } + public string Title { get; set; } + public string Description { get; set; } + public string Image { get; set; } + public string Url { get; set; } + public string VideoUrl { get; set; } = ""; + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/Organization.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/Organization.cs new file mode 100644 index 000000000..1e1ccb082 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/Organization.cs @@ -0,0 +1,119 @@ +using Newtonsoft.Json; +using System.Collections.Generic; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class Organization : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "Organization"; + + [JsonProperty("name")] + public string Name { get; set; } = "Aspose Pty Ltd"; + + [JsonProperty("alternateName")] + public string AltName { get; set; } = "Aspose Pty Ltd"; + + [JsonProperty("legalName")] + public string LegalName { get; set; } + + [JsonProperty("taxID")] + public string taxID { get; set; } + + [JsonProperty("vatID")] + public string vatID { get; set; } + + [JsonProperty("logo")] + public ImageObject Logo { get; set; } = new ImageObject() { Url = new URL() { Id = "https://cms.admin.containerize.com/templates/aspose/App_Themes/V3/images/aspose-logo.png" }, Height = "300", Width = "600" }; + + [JsonProperty("url")] + public string Url { get; set; } = "https://www.aspose.com/"; + + [JsonProperty("address")] + public Adress Adress { get; set; } = new Adress(); + + [JsonProperty("email")] + public string Email { get; set; } = "mailto:sales@aspose.com"; + + [JsonProperty("sameAs")] + public string[] SameAs { get; set; } = new string[] + { + "https://www.facebook.com/aspose", + "https://twitter.com/aspose", + "https://www.youtube.com/channel/UCoKbPb28Htp4MUiLtW3CT9g", + "https://au.linkedin.com/company/asposeapp" + }; + + [JsonProperty("contactPoint")] + public List Contact { get; set; } = new List() + { + new ContactPoint() + { + Areas = new string[] { "USA" }, + ContactOption = "http://schema.org/TollFree", + ContactType = new string[] { "customer service", "technical support", "billing support", "bill payment", "credit card support" }, + Languages = new string [] {"English" }, + Telephone = "+19033061676", + }, + new ContactPoint() + { + Areas = new string []{ "Europe" }, + ContactOption = "http://schema.org/TollFree", + ContactType = new string[] { "customer service", "technical support", "billing support", "bill payment", "credit card support" }, + Languages = new string[]{ "English"}, + Telephone = "+441416288900", + }, + new ContactPoint() + { + Areas = new string [] { "Australia" }, + ContactOption = "http://schema.org/TollFree", + ContactType = new string[] { "customer service", "technical support", "billing support", "bill payment", "credit card support" }, + Languages = new string [] { "English"}, + Telephone = "+61280066987" + } + }; + + [JsonProperty("description")] + public string Description { get; set; } + + [JsonProperty("award")] + public string[] Award { get; set; } = new string[] { "Top 5 Best Selling Publisher Award 2012" }; + } + + public class ContactPoint : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "ContactPoint"; + + [JsonProperty("telephone")] + public string Telephone { get; set; } + + [JsonProperty("contactType")] + public string[] ContactType { get; set; } + + [JsonProperty("contactOption")] + public string ContactOption { get; set; } = "http://schema.org/TollFree"; + + [JsonProperty("areaServed")] + public string[] Areas { get; set; } + + [JsonProperty("availableLanguage")] + public string[] Languages { get; set; } + + } + + public class Adress : SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "PostalAddress"; + + [JsonProperty("addressLocality")] + public string AdressLocality { get; set; } = "Lane Cove, NSW"; + + [JsonProperty("postalCode")] + public string postalCode { get; set; } = "2066, Australia"; + + [JsonProperty("streetAddress")] + public string StreetAdress { get; set; } = "Suite 163, 79 Longueville Road, Lane Cove"; + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/SeoElement.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/SeoElement.cs new file mode 100644 index 000000000..7c8911dcd --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/SeoElement.cs @@ -0,0 +1,52 @@ +using Newtonsoft.Json; +using System.Collections.Generic; + +namespace Aspose.Cells.Common.Models.SEO +{ + public abstract class SeoElement + { + [JsonProperty("@context")] + public virtual string Context { get; set; } = "https://schema.org"; + + [JsonProperty("@type")] + public virtual string Type { get; set; } + + [JsonProperty("@id")] + public virtual string Id { get; set; } + } + + public class Thing: SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "Thing"; + + [JsonProperty("name")] + public virtual string Name { get; set; } + + [JsonProperty("alternateName")] + public virtual string AlterName { get; set; } + + [JsonProperty("description")] + public virtual string Description { get; set; } + + [JsonProperty("image")] + public virtual ImageObject Image { get; set; } + + [JsonProperty("url")] + public URL Url { get; set; } + } + + public class CreativeWork: Thing + { + [JsonProperty("@type")] + public override string Type { get; set; } = "CreativeWork"; + + [JsonProperty("thumbnailUrl")] + public string [] ThumbnailUrl { get; set; } + + [JsonProperty("datePublished")] + public string DatePublished { get; set; } + + + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/Service.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/Service.cs new file mode 100644 index 000000000..2e4c5cccd --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/Service.cs @@ -0,0 +1,14 @@ +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class Service:SeoElement + { + [JsonProperty("@type")] + public override string Type { get; set; } = "Service"; + + [JsonProperty("aggregateRating")] + public AggregateRating AggregateRating { get; set; } = new AggregateRating(); + + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/SoftwareApplication.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/SoftwareApplication.cs new file mode 100644 index 000000000..9610e23c1 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/SoftwareApplication.cs @@ -0,0 +1,62 @@ +using Aspose.Cells.Common.Models.SEO; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System; + +namespace Aspose.Cells.Common.Models +{ + public class SoftwareApplication:CreativeWork + { + [JsonProperty("@type")] + public override string Type { get; set; } = "SoftwareApplication"; + + [JsonProperty("creator")] + public Organization Creator { get; set; } = new Organization(); + + [JsonProperty("applicationCategory")] + public string[] ApplicationCategory { get; set; } = new string[] { "WebApplication", "BusinessApplication", "BrowserApplication" }; + + [JsonProperty("downloadUrl")] + public string DownloadUrl { get; set; } + + [JsonProperty("operatingSystem")] + public string[] OperatingSystem { get; set; } = new string[] { "Windows, iOS, Linux, Android" }; + + [JsonProperty("softwareVersion")] + public string SoftwareVersion { get; set; } = "20.7.0"; + + [JsonProperty("softwareHelp")] + public string SoftwareHelp { get; set; } + + [JsonProperty("softwareRequirements")] + public URL SoftwareRequirements { get; set; } + + [JsonProperty("offers")] + public Offer Offer { get; set; } = new Offer(); + + //[JsonProperty("aggregateRating")] + //public AggregateRating AggregateRating { get; set; } = new AggregateRating() + //{ + // Type = "AggregateRating", + // WorstRating = "1", + // BestRating = "5", + // RatingValue = "4.6", + // ReviewCount = (Int32.Parse(DateTime.Now.ToString("yyMMdd")) - 199000).ToString(), + // RatingCount = DateTime.Now.ToString("yyMMdd") + //}; + } + + public class Offer + { + [JsonProperty("@type")] + public string Type { get; set; } = "Offer"; + + [JsonProperty("price")] + public float Price { get; set; } = 0.00f; + + [JsonProperty("priceCurrency")] + public string PriceCurrency { get; set; } = "USD"; + + } + +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SEO/WebApplication.cs b/Demos/Apps/Aspose.Cells.Common/Models/SEO/WebApplication.cs new file mode 100644 index 000000000..c2e50d645 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SEO/WebApplication.cs @@ -0,0 +1,13 @@ +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Models.SEO +{ + public class WebApplication: SoftwareApplication + { + [JsonProperty("@type")] + public override string Type { get; set; } = "WebApplication"; + + [JsonProperty("browserRequirements")] + public string BrowserRequirements { get; set; } = "This web application no need any requirements to Browser. You can use it in any browser."; + } +} diff --git a/Demos/Apps/Aspose.Cells.Common/Models/SystemExtensionMethods.cs b/Demos/Apps/Aspose.Cells.Common/Models/SystemExtensionMethods.cs new file mode 100644 index 000000000..f3cdaf856 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/SystemExtensionMethods.cs @@ -0,0 +1,41 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace Aspose.Cells.Common.Models +{ + public static class SystemExtensionMethods + { + public static bool IsNullOrEmpty(this IEnumerable value) + { + return value == null || value.Cast().Count() == 0; + } + + public static bool IsNullOrEmpty(this IEnumerable value) + { + return value == null || value.Count() == 0; + } + + public static bool IsNullOrEmpty(this string value) + { + return string.IsNullOrEmpty(value); + } + + public static bool HasValue(this string value) + { + return !string.IsNullOrEmpty(value); + } + + public static bool IsNullOrWhiteSpace(this string value) + { + return string.IsNullOrWhiteSpace(value); + } + + public static B GetValueOrDefault(IDictionary dict, T key, B defaultValue = default(B)) + { + if (dict.TryGetValue(key, out B value)) + return value; + return defaultValue; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/UploadFileModel.cs b/Demos/Apps/Aspose.Cells.Common/Models/UploadFileModel.cs new file mode 100644 index 000000000..e8be7f90f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/UploadFileModel.cs @@ -0,0 +1,18 @@ +using System; + +namespace Aspose.Cells.Common.Models +{ + public class UploadFileModel + { + public bool AcceptMultipleFiles { get; set; } + public string FileDropKey { get; set; } + public string AcceptedExtentions { get; set; } + public FlexibleResources Resources { get; } + public string UploadId { get; set; } = $"{Guid.NewGuid()}"; + + public UploadFileModel(FlexibleResources resources) + { + this.Resources = resources; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Models/ViewModel.cs b/Demos/Apps/Aspose.Cells.Common/Models/ViewModel.cs new file mode 100644 index 000000000..48cedcb70 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Models/ViewModel.cs @@ -0,0 +1,810 @@ +using Aspose.Cells.Common.Controllers; +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text; +using Aspose.Cells.Common.Config; +using Newtonsoft.Json; +using Aspose.Cells.Common.Models.SEO; +using Microsoft.Extensions.Logging; + +namespace Aspose.Cells.Common.Models +{ + public class ViewModel + { + public static long MaximumUploadFileSize { get; } = 150 * 1024 * 1024; + public const int MaximumUploadFiles = 10; + + public const int MaxsizeUploadFile = 5; + + /// + /// String for using in titles, meta description and headers. + /// "Excel" + /// + public const string CellsDefaultTitleAddition = "Excel"; + + /// + /// Name of the product (e.g., words) + /// + public string Product { get; set; } + + public UIControllerBase Controller; + + /// + /// Product + AppName, e.g. wordsMerger + /// + public string ProductAppName { get; set; } + + public FlexibleResources Resources { get; set; } + + public string PageProductTitle => Resources["Aspose" + TitleCase(Product)]; + public string PageProductTitleUrl => Configuration.IsAsposeCloudApp ? "Aspose.Cells Cloud" : "Aspose.Cells"; + + public string EmailTo { get; set; } + + /// + /// The name of the app (e.g., Conversion, Merger) + /// + public string AppName { get; set; } + + /// + /// The full address of the application without query string (e.g., https://products.aspose.app/words/conversion) + /// + public string AppUrl { get; set; } + + /// + /// File extension without dot received by "fileformat" value in RouteData (e.g. docx) + /// + public string Extension { get; set; } + + /// + /// File extension without dot received by "fileformat" value in RouteData (e.g. docx) + /// + public string Extension2 { get; set; } + + /// + /// Redirect to main app, if there is no ExtensionInfoModel for auto generated models + /// + public bool RedirectToMainApp { get; set; } + + /// + /// Is canonical page opened (/all) + /// + public bool IsCanonical; + + /// + /// Name of the partial View of controls (e.g. SignatureControls) + /// + public string ControlsView { get; set; } + + public string ControlsView2 { get; set; } + + public string AnotherFileText { get; set; } + public string CellsAnotherFileText { get; set; } + public string CellsWatermarkSuccessMessage { get; set; } + public string UploadButtonText { get; set; } + public string ViewerButtonText { get; set; } + public string DeleteButtonText { get; set; } + public bool ShowViewerButton { get; set; } + public bool ShowDeleteButton { get; set; } + public string SuccessMessage { get; set; } + + /// + /// List of app features for ul-list. E.g. Resources[app + "LiFeature1"] + /// + public List AppFeatures { get; set; } + + public string Title { get; set; } + public string TitleSub { get; set; } + + public string PageTitle + { + get => Controller.ViewBag.PageTitle; + set => Controller.ViewBag.PageTitle = value; + } + + public string MetaDescription + { + get => Controller.ViewBag.MetaDescription; + set => Controller.ViewBag.MetaDescription = value; + } + + public string MetaKeywords + { + get => Controller.ViewBag.MetaKeywords; + set => Controller.ViewBag.MetaKeywords = value; + } + + public string HtmlLocale + { + get => Controller.ViewBag.HtmlLocale; + set => Controller.ViewBag.HtmlLocale = value; + } + + /// + /// If the application doesn't need to upload several files (e.g. Viewer, Editor) + /// + public bool UploadAndRedirect { get; set; } + + private static string TitleCase(string value) => new System.Globalization.CultureInfo("en-US", false).TextInfo.ToTitleCase(value); + + /// + /// e.g., .doc|.docx|.dot|.dotx|.rtf|.odt|.ott|.txt|.html|.xhtml|.mhtml + /// + public string ExtensionsString { get; set; } + + #region SaveAs + + private bool _saveAsComponent; + + public bool SaveAsComponent + { + get => _saveAsComponent; + set + { + _saveAsComponent = value; + Controller.ViewBag.SaveAsComponent = value; + + if (!_saveAsComponent) return; + + var smokey1 = $"{Product}{AppName}SaveAsOptions"; + + if (Resources.ContainsKey(smokey1)) + { + switch (AppName) + { + case "Chart": + var lst = Resources[smokey1].Split(',').ToList(); + try + { + if (!string.IsNullOrEmpty(Extension2)) + { + var index = lst.FindIndex(x => x.Trim() == Extension2.ToUpper()); + if (index >= 0) + { + lst.RemoveAt(index); + lst.Insert(0, Extension2.ToUpper()); + } + } + } + catch + { + // + } + finally + { + SaveAsOptions = lst.ToArray(); + } + + break; + + default: + SaveAsOptions = Resources[smokey1].Split(','); + break; + } + } + + if (AppFeatures == null) return; + + var lifeAcuteKey = Product + "SaveAsLiFeature"; + var ligatureExt = Product + "SaveAsLiFeatureExt"; + + if (Resources.ContainsKey(ligatureExt) && !SaveAsOptions.IsNullOrEmpty()) + { + var str = new StringBuilder(); + foreach (var ext in SaveAsOptions) + { + var extTrim = ext.Trim(); + str.Append(FileFormatLinks.ContainsKey(extTrim) + ? $"{extTrim}, " + : $"{extTrim}, "); + } + + str.Remove(str.Length - 2, 2); + // str.Append(" "); + AppFeatures.Insert(1, string.Format(Resources[ligatureExt], str)); + } + else if (Resources.ContainsKey(lifeAcuteKey)) + AppFeatures.Add(Resources[lifeAcuteKey]); + } + } + + /// + /// FileFormats in UpperCase + /// + public string[] SaveAsOptions { get; set; } + + public List Languages { get; set; } + + /// + /// Original file format SaveAs option for multiple files uploading + /// + public bool SaveAsOriginal { get; set; } + + #endregion + + /// + /// The possibility of changing the order of uploaded files. It is actual for Merger App. + /// + public bool UseSorting { get; set; } + + #region ViewSections + + public bool ShowExtensionInfo => ExtensionInfoModel != null; + public ExtensionInfoModel ExtensionInfoModel { get; set; } + public bool ShowExtensionInfo2 => ExtensionInfoModel2 != null; + public ExtensionInfoModel ExtensionInfoModel2 { get; set; } + + public bool ShowOtherFeatures => OtherFeaturesModel != null; + public OtherFeaturesModel OtherFeaturesModel { get; set; } + + public bool HowTo => HowToModel != null; + public HowToModel HowToModel { get; set; } + + public GeneratedPage GeneratedPage { get; set; } + + public IEnumerable OtherApps { get; set; } + + #endregion + + public string JSOptions => new JSOptions(this).ToString(); + + /// + /// The possibility of main button working with no files uploaded + /// + public bool CanWorkWithoutFiles { get; set; } + + public bool DefaultFileBlockDisabled { get; set; } + + public ViewModel(UIControllerBase controller, string app, string extension = null) + { + Controller = controller; + Resources = controller.Resources; + Extension = extension; + AppName = Resources.ContainsKey($"{app}APPName") ? Resources[$"{app}APPName"] : app; + Product = UIControllerBase.Product; + + AppUrl = controller.Request.Path.Value; + + ProductAppName = Product + app; + SetHtmlLocale(); + + UploadButtonText = GetFromResources(ProductAppName + "Button"); + ViewerButtonText = GetFromResources(ProductAppName + "Viewer"); + SuccessMessage = GetFromResources(ProductAppName + "SuccessMessage"); + AnotherFileText = GetFromResources(ProductAppName + "AnotherFile"); + CellsAnotherFileText = GetFromResources(ProductAppName + "AnotherFile"); + CellsWatermarkSuccessMessage = GetFromResources(ProductAppName + "SuccessMessage"); + + if (AppName.Equals("Merger")) + { + DeleteButtonText = GetFromResources(ProductAppName + "Delete"); + } + + InitOtherApps(Product.ToLower()); + SetExtensions(); + PrepareExtensionInfoModel(); + + if (!IsSupportedExtensions(Extension, Extension2) && !AppName.Equals("Conversion") && !AppName.Equals("Merger")) + { + RedirectToMainApp = true; + return; + } + + PrepareOtherFeaturesModel(); + PrepareHowToModel(); + + SetTitles(); + SetAppFeatures(app); + + if (_otherAppsStatic.ContainsKey(Product)) + OtherApps = _otherAppsStatic[Product].Values; + + ShowViewerButton = true; + SaveAsOriginal = true; + SaveAsComponent = false; + SetExtensionsString(); + AddFileFormatLinks(); + + PrepareStructuralDataJson(); + } + + private void SetExtensions() + { + var routeValues = Controller.RouteData.Values; + if (routeValues.ContainsKey("fileformat") && !string.IsNullOrEmpty(routeValues["fileformat"].ToString())) + { + var fileFormat = routeValues["fileformat"].ToString(); + if (fileFormat.Contains("-")) + { + var values = fileFormat.Split('-'); + Extension = values.First().ToLower(); + Extension2 = values.Last().ToLower(); + } + else + Extension = fileFormat.ToLower(); + + if (Extension.Equals("excel") && AppName != "Conversion") + { + Extension = "xlsx"; + } + + if (!Extension2.IsNullOrEmpty()) + { + switch (Extension2) + { + case "word": + Extension2 = "docx"; + break; + + case "ppt": + case "powerpoint": + Extension2 = "pptx"; + break; + + case "excel": + Extension2 = "xlsx"; + break; + } + } + + if (AppName.Equals("Chart")) + { + if (Resources[ProductAppName + "SaveAsOptions"].Contains(Extension.ToUpper())) + { + Extension2 = Extension; + Extension = "xlsx"; + } + + if (Extension.Equals("image") || Extension.Equals("to") && Extension2.Equals("image")) + { + Extension = "xlsx"; + Extension2 = "jpg"; + } + + if (Extension.Equals("to") && !Extension2.Equals("image")) + { + Extension = "xlsx"; + } + } + + try + { + GeneratedPage = GeneratedPage.GetByUrl(Controller.Request.Path.Value.ToLower()); + } + catch + { + GeneratedPage = null; + } + } + + IsCanonical = string.IsNullOrEmpty(Extension); + } + + private void PrepareExtensionInfoModel() + { + if (!string.IsNullOrEmpty(Extension) && !IsCanonical && Extension != "all") + try + { + ExtensionInfoModel = new ExtensionInfoModel(this, Extension); + } + catch // No generated extension info for this url + { + ExtensionInfoModel = null; + } + + if (string.IsNullOrEmpty(Extension2) || IsCanonical) return; + + try + { + ExtensionInfoModel2 = new ExtensionInfoModel(this, Extension2); + } + catch // No generated extension info for this url + { + ExtensionInfoModel2 = null; + } + } + + private void PrepareOtherFeaturesModel() + { + if (!Resources.ContainsKey(ProductAppName + "OtherFeaturesTitle")) return; + + try + { + OtherFeaturesModel = new OtherFeaturesModel(this); + } + catch // No other features for this page + { + OtherFeaturesModel = null; + } + } + + private void PrepareHowToModel() + { + if (string.IsNullOrEmpty(Extension) && !IsCanonical) return; + + try + { + HowToModel = new HowToModel(this); + } + catch + { + HowToModel = null; + } + } + + /// + /// Returns Excel, Markdown + /// + /// + /// + /// + internal string DesktopAppNameByExtension(string extension, string defaultValue = null) + { + if (string.IsNullOrEmpty(extension)) return defaultValue; + + switch (extension.ToLower()) + { + case "xlsx": + return "Excel"; + case "md": + return "Markdown"; + default: + return !string.IsNullOrEmpty(defaultValue) ? extension.ToUpper() : defaultValue; + } + } + + public string this[string key] + { + get + { + var res = GetAppResourceOrDefault(key) ?? + GetResourceOrDefault(key) ?? ($"NoKey:{ProductAppName + key}"); + if (res.Contains("{")) + { + res = string.Format(res, CellsDefaultTitleAddition); + } + + return res; + } + } + + public string GetResourceOrDefault(string resourceName) => Resources.GetValueOrDefault(resourceName); + public string GetAppResourceOrDefault(string resourceName) => Resources.GetValueOrDefault(ProductAppName + resourceName); + + public IList CellsCloudAPIDefs + { + get + { + IList cellsCloudAPIDefs = new List(); + string[] ApiMethods = Configuration.CellsCloudAPIMethod.Split(";"); + string[] ApiMethodUris = Configuration.CellsCloudAPIMethodURI.Split(";"); + string[] ApiMethodReferenceUris = Configuration.CellsCloudAPIReferenceURI.Split(";"); + for (int i = 0; i < ApiMethods.Length; i++) + { + CloudHelper.CellsCloudAPIDef cellsCloudAPIDef = new CloudHelper.CellsCloudAPIDef(); + cellsCloudAPIDef.ApiName = ApiMethods[i]; + cellsCloudAPIDef.ApiUri = ApiMethodUris[i]; + cellsCloudAPIDef.ApiReferenceUri = ApiMethodReferenceUris[i]; + cellsCloudAPIDefs.Add(cellsCloudAPIDef); + } + return cellsCloudAPIDefs; + } + } + + private void SetHtmlLocale() + { + var locale = "en-us"; + if ("en".Equals(locale, StringComparison.InvariantCultureIgnoreCase)) + locale = "en-us"; + HtmlLocale = locale; + } + + private void SetTitles() + { + SetTitles_Impl(); + } + + private void SetTitles_Impl() + { + // H1 and H4 texts are bad for SEO + //Title = Resources.ContainsKey(pm + "H1") ? Resources[pm + "H1"] : Resources[pm + "Title"]; + //TitleSub = Resources.ContainsKey(pm + "H4") ? Resources[pm + "H4"] : Resources[pm + "TitleSub"]; + + if (string.IsNullOrEmpty(Extension2)) + { + if (string.IsNullOrEmpty(Title)) + Title = Resources[ProductAppName + "Title"]; + if (string.IsNullOrEmpty(TitleSub)) + TitleSub = Resources[ProductAppName + "TitleSub"]; + + if (string.IsNullOrEmpty(PageTitle)) + PageTitle = Resources.ContainsKey(ProductAppName + "PageTitle") + ? Resources[ProductAppName + "PageTitle"] + : Title; + if (string.IsNullOrEmpty(MetaDescription)) + MetaDescription = Resources.ContainsKey(ProductAppName + "MetaDescription") + ? Resources[ProductAppName + "MetaDescription"] + : Title; + if (string.IsNullOrEmpty(MetaKeywords)) + MetaKeywords = Resources.ContainsKey(ProductAppName + "MetaKeywords") + ? Resources[ProductAppName + "MetaKeywords"] + : ""; + + var additional = CellsDefaultTitleAddition; // Excel + if (!string.IsNullOrEmpty(Extension)) + { + additional = Extension.ToUpper(); + // don't specify Extension2 + //Extension2 = additional; + } + + if (PageTitle.Contains("{")) + PageTitle = string.Format(PageTitle, additional); + if (MetaDescription.Contains("{")) + MetaDescription = string.Format(MetaDescription, additional); + if (Title.Contains("{")) + Title = string.Format(Title, additional); + if (TitleSub.Contains("{")) + TitleSub = string.Format(TitleSub, additional); + } + + if (!string.IsNullOrEmpty(Extension2)) + { + var additional = CellsDefaultTitleAddition; // Excel + var additional2 = Extension2.ToUpper(); + + if (!Extension.ToUpper().Equals("XLSX")) + additional = Extension.ToUpper(); + + if (Extension2.ToUpper().Equals("XLSX")) + additional2 = CellsDefaultTitleAddition; + + PageTitle = string.Format(Resources[ProductAppName + "PageTitle2"], additional, additional2); + MetaDescription = string.Format(Resources[ProductAppName + "MetaDescription2"], additional, additional2); + MetaKeywords = Resources.ContainsKey(ProductAppName + "MetaKeywords2") + ? string.Format(Resources[ProductAppName + "MetaKeywords2"], additional, additional2) + : ""; + Title = string.Format(Resources[ProductAppName + "Title2"], additional, additional2); + TitleSub = string.Format(Resources[ProductAppName + "TitleSub2"], additional, additional2); + } + + Controller.ViewBag.CanonicalTag = null; + } + + private void SetAppFeatures(string app) + { + AppFeatures = new List(); + + var i = 1; + while (Resources.ContainsKey($"{ProductAppName}LiFeature{i}")) + AppFeatures.Add(Resources[$"{ProductAppName}LiFeature{i++}"]); + + // Stop other developers to add unnecessary features. + if (AppFeatures.Count != 0) return; + i = 1; + while (Resources.ContainsKey($"{app}LiFeature{i}")) + { + if (!Resources[$"{app}LiFeature{i}"].Contains("Instantly download") || AppFeatures.Count == 0) + AppFeatures.Add(Resources[$"{app}LiFeature{i}"]); + i++; + } + } + + private string GetFromResources(string key, string defaultKey = null) + { + if (Resources.ContainsKey(key)) + return Resources[key]; + if (!string.IsNullOrEmpty(defaultKey) && Resources.ContainsKey(defaultKey)) + return Resources[defaultKey]; + return ""; + } + + private void SetExtensionsString() + { + if (!ShowExtensionInfo) + { + var key1 = $"{ProductAppName}ValidationExpression"; + // var key2 = $"{Product}ValidationExpression"; + // ExtensionsString = Resources.ContainsKey(key1) ? Resources[key1] : Resources[key2]; + ExtensionsString = Resources[key1]; + } + else + { + switch (Extension) + { + case "doc": + case "docx": + ExtensionsString = ".docx|.doc"; + break; + /*case "html": + case "htm": + case "mhtml": + case "mht": + ExtensionsString = ".htm|.html|.mht|.mhtml"; + break;*/ + default: + ExtensionsString = $".{Extension}"; + break; + } + + if (AppName == "Comparison" && !string.IsNullOrEmpty(Extension2)) + ExtensionsString += $"|.{Extension2}"; + } + } + + /// + /// Product, (AppName, AnotherApp) + /// + private readonly Dictionary> _otherAppsStatic = new Dictionary>(); + + private void InitOtherApps(string product) + { + var appList = new Dictionary(); + _otherAppsStatic.Add(product, appList); + + if (!product.Equals("cells")) return; + + var apps = new[] + { + "Editor", + "Viewer", + "Conversion", + "Merger", + "Unlock", + "Protect", + "Repair", + "Esign", + "Splitter", + "Comparison", + "Annotation", + "Parser", + "Metadata", + "Watermark", + "Search", + "Chart", + "Mortgage-Calculator", + "Assembly", + "Translation" + }; + if (Configuration.IsAsposeCloudApp) + { + apps = new[] + { + "Annotation", + "Assembly", + "Chart", + "Conversion", + "Merger", + "Metadata", + "Parser", + "Protect", + "Repair", + "Esign", + "Search", + "Splitter", + "Unlock", + "Watermark" + }; + } + + foreach (var appName in apps) + appList.Add(appName, new AnotherApp(AppName, appName)); + } + + private bool IsSupportedExtensions(string extFrom, string extTo) + { + if (string.IsNullOrEmpty(extFrom)) + { + return true; + } + + extTo = string.IsNullOrEmpty(extTo) ? "" : extTo.ToUpper(); + + var isValExist = Resources[ProductAppName + "ValidationExpression"].Contains(extFrom.ToLower()); + if (!isValExist) + return false; + + return string.IsNullOrEmpty(extTo) || Resources[ProductAppName + "SaveAsOptions"].Contains(extTo); + } + + private static readonly Dictionary FileFormatLinks = new Dictionary + { + {"DOC", "https://wiki.fileformat.com/word-processing/doc/"}, + {"DOCM", "https://wiki.fileformat.com/word-processing/docm/"}, + {"DOCX", "https://wiki.fileformat.com/word-processing/docx/"}, + {"DOT", "https://wiki.fileformat.com/word-processing/dot/"}, + {"DOTM", "https://wiki.fileformat.com/word-processing/dotm/"}, + {"DOTX", "https://wiki.fileformat.com/word-processing/dotx/"}, + {"ODT", "https://wiki.fileformat.com/word-processing/odt/"}, + {"MD", "https://wiki.fileformat.com/word-processing/md/"}, + {"OTT", "https://wiki.fileformat.com/word-processing/ott/"}, + {"RTF", "https://wiki.fileformat.com/word-processing/rtf/"}, + {"TXT", "https://wiki.fileformat.com/word-processing/txt/"}, + {"EPUB", "https://wiki.fileformat.com/ebook/epub/"}, + {"PDF", "https://wiki.fileformat.com/view/pdf/"}, + {"HTML", "https://wiki.fileformat.com/web/html/"}, + {"XHTML", "https://wiki.fileformat.com/web/xhtml/"}, + {"MHTML", "https://wiki.fileformat.com/web/mhtml/"}, + {"MHT", "https://wiki.fileformat.com/web/mhtml/"}, + {"JPG", "https://wiki.fileformat.com/image/jpeg/"}, + {"JPEG", "https://wiki.fileformat.com/image/jpeg/"}, + {"PNG", "https://wiki.fileformat.com/image/png/"}, + {"TEX", "https://wiki.fileformat.com/page-description-language/tex/"}, + {"XLS", "https://wiki.fileformat.com/spreadsheet/xls/"}, + {"XLSX", "https://wiki.fileformat.com/spreadsheet/xlsx/"}, + {"XLSM", "https://wiki.fileformat.com/spreadsheet/xlsm/"}, + {"XLSB", "https://wiki.fileformat.com/spreadsheet/xlsb/"}, + {"ODS", "https://wiki.fileformat.com/spreadsheet/ods/"}, + {"CSV", "https://wiki.fileformat.com/spreadsheet/csv/"}, + {"TSV", "https://wiki.fileformat.com/spreadsheet/tsv/"}, + {"PPTX", "https://wiki.fileformat.com/presentation/pptx/"}, + {"PS", "https://wiki.fileformat.com/page-description-language/ps/"}, + {"EPS", "https://wiki.fileformat.com/page-description-language/eps/"}, + {"XPS", "https://wiki.fileformat.com/page-description-language/xps/"}, + {"BMP", "https://wiki.fileformat.com/image/bmp/"}, + {"TIFF", "https://wiki.fileformat.com/image/tiff/"}, + {"SVG", "https://wiki.fileformat.com/page-description-language/svg/"} + }; + + private void AddFileFormatLinks() + { + if (AppFeatures == null) return; + if (!Resources.ContainsKey(ProductAppName + "Action")) return; + + var str = new StringBuilder($"{Resources[ProductAppName + "Action"]} "); + var extensions = ExtensionsString.Replace(".", "").ToUpper().Split('|'); + foreach (var ext in extensions) + str.Append(FileFormatLinks.ContainsKey(ext) + ? $"{ext}, " + : $"{ext}, "); + str.Remove(str.Length - 2, 2); + AppFeatures.Insert(0, str.ToString()); + } + + private string PrepareJsonLdSoftware() + { + var obj = new SoftwareApplication + { + Name = Title, + Description = MetaDescription, + SoftwareRequirements = new URL {Id = "https://docs.aspose.com/display/cellsnet/System+Requirements"}, + SoftwareHelp = "https://docs.aspose.com/display/cellsnet/Home" + }; + return JsonConvert.SerializeObject(obj); + } + + private string PrepareJsonLdHowTo() + { + var obj = new HowTo(HowToModel, TitleSub, Title); + return JsonConvert.SerializeObject(obj); + } + + private void PrepareStructuralDataJson() + { + if (AppName != "Merger" + && AppName != "Editor" + && AppName != "Splitter" + && AppName != "Protect") + { + return; + } + + var list = new List(); + try + { + list.Add(PrepareJsonLdSoftware()); + if (HowToModel != null) + { + list.Add(PrepareJsonLdHowTo()); + } + } + catch (Exception ex) + { + Controller.logger.LogError(ex.Message + "\n" + ex.StackTrace); + } + + Controller.ViewBag.JsonLd = list; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Error.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Error.cshtml new file mode 100644 index 000000000..b363fdc2e --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Error.cshtml @@ -0,0 +1,13 @@ + + + + + Error + + +
+

Error.

+

An error occurred while processing your request.

+
+ + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Download.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Download.cshtml new file mode 100644 index 000000000..2e9537f7f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Download.cshtml @@ -0,0 +1,55 @@ +@using Aspose.Cells.Common.Models +@model ViewModel + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/DynabicMenuFooter.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/DynabicMenuFooter.cshtml new file mode 100644 index 000000000..de11a822d --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/DynabicMenuFooter.cshtml @@ -0,0 +1,76 @@ +
+
+ +
+ +
+
+
+
+
+

© Aspose Pty Ltd 2001-@DateTime.Now.Year.ToString(). All Rights Reserved.

+
+ +
+
+
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/DynabicMenuInnerDiv.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/DynabicMenuInnerDiv.cshtml new file mode 100644 index 000000000..5de28a863 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/DynabicMenuInnerDiv.cshtml @@ -0,0 +1,352 @@ +@using Aspose.Cells.Common.Config +@using Aspose.Cells.Common.Models +@model Aspose.Cells.Common.Models.ViewModel + +
+
+ + + +
+
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/ExtensionInfo.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/ExtensionInfo.cshtml new file mode 100644 index 000000000..ab3fbab3b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/ExtensionInfo.cshtml @@ -0,0 +1,36 @@ +@using Aspose.Cells.Common.Models +@model ViewModel +@* Extension Description Box *@ +
+ @if (!Model.ShowExtensionInfo2) + { +
+

+ @Model.Extension.ToUpper() + @Model.ExtensionInfoModel.Name +

+

@Model.ExtensionInfoModel.Description

+ Read More +
+ } + else + { +
+

+ @Model.Extension.ToUpper() + @Model.ExtensionInfoModel.Name +

+

@Model.ExtensionInfoModel.Description

+ Read More +
+ +
+

+ @Model.Extension2.ToUpper() + @Model.ExtensionInfoModel2.Name +

+

@Model.ExtensionInfoModel2.Description

+ Read More +
+ } +
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/FooterProduct.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/FooterProduct.cshtml new file mode 100644 index 000000000..c9274d71f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/FooterProduct.cshtml @@ -0,0 +1,177 @@ +@using Aspose.Cells.Common.Models +@model ViewModel + +@await Html.PartialAsync("OtherApps") + +
+
+

+ + Aspose.Cells for .NET + + @Html.Raw(Model.PageProductTitleUrl) Excel @($"{Model.AppName}") +

+ +
 
+

+ @Html.Raw(Model["RawHtmlOverview"]) +

+ +
+
+ @Model.PageProductTitle +
+
    + @if (Model.AppFeatures != null) + { + foreach (var feature in Model.AppFeatures) + { +
  • @Html.Raw(feature)
  • + } + } +
+
+
+
+ +@if (Model.ShowExtensionInfo) +{ + @await Html.PartialAsync("ExtensionInfo") +} + +@if (Model.HowTo) +{ + @await Html.PartialAsync("HowTo", Model.HowToModel) +} + +@if (Model.IsCanonical) +{ +
+
+
+
+ @Model.Resources[$ +
+

@Model.Resources[$"{Model.Product}{Model.AppName}Feature1"]

+

@(Model.Resources[$"{Model.Product}{Model.AppName}Feature1Description"]).

+
+ +
+
+ @Model.Resources[$ +
+

@Model.Resources[$"{Model.Product}{Model.AppName}Feature2"]

+

@(Model.Resources[$"{Model.Product}{Model.AppName}Feature2Description"]).

+
+ +
+
+ @Model.Resources[$ +
+

@Model.Resources[$"{Model.Product}{Model.AppName}Feature3"]

+

@Model.Resources["PoweredBy"] @Model.PageProductTitle@(Model.Resources["Feature3Description"]).

+
+
+
+} + +@if (Model.ShowOtherFeatures) +{ + @await Html.PartialAsync("OtherFeatures", Model.OtherFeaturesModel) +} + + + + + + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/HowTo.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/HowTo.cshtml new file mode 100644 index 000000000..f14edbbe1 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/HowTo.cshtml @@ -0,0 +1,21 @@ +@using Aspose.Cells.Common.Models +@model HowToModel +@* HowTo Section *@ +
+
+
+ +
+
+
+

@Model.Title

+
    + @foreach (var el in Model.List) + { +
  • @Html.Raw(@el.Text)
  • + } +
+
+
+
+
diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Layout.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Layout.cshtml new file mode 100644 index 000000000..fa478358b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Layout.cshtml @@ -0,0 +1,108 @@ + + + + + + + + + @ViewBag.PageTitle + @if (Path.Contains("cells")) + { + + } + @if (!string.IsNullOrEmpty(ViewBag.CanonicalTag)) + { + @Html.Raw(ViewBag.CanonicalTag) + } + + + + + + + + + + + + + + + + + + + + @if (IsSectionDefined("styles")) + { + @await RenderSectionAsync("styles", false) + } + + @if (ViewBag.SaveAsComponent) + { + + + } + + @if (ViewBag.JsonLd != null) + { + foreach (var item in ViewBag.JsonLd as List) + { + + } + } + + @if (Aspose.Cells.Common.Config.Configuration.IsProduction) // products.aspose.app + { + + + } + + +
+ @await Html.PartialAsync("DynabicMenuInnerDiv") +
+ + @RenderBody() + +
+ + @if (Aspose.Cells.Common.Config.Configuration.IsAsposeCloudApp) + { + + } + else + { + + } + + @if (IsSectionDefined("scripts")) + { + @await RenderSectionAsync("scripts", false) + } + @if (ViewBag.SaveAsComponent) + { + + } + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Main.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Main.cshtml new file mode 100644 index 000000000..ca9fd52f9 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Main.cshtml @@ -0,0 +1,165 @@ +@using Aspose.Cells.Common.Config +@using Aspose.Cells.Common.Models +@model ViewModel + +
+
+
+
+ +

@Model.Title

+

@Model.TitleSub

+ + +
+
+ @if (Model.AppName.Equals("Viewer")) + { +
+ If you need to edit an Excel file, please use our + Editor +
+ } + + @if (false)@*Configuration.IsAsposeCloudApp*@ + { + @switch (Model.AppName) + { + case "Viewer": + case "Editor": + case "Translation": + break; + default: +
+

+ Use the following Aspose.Cells Cloud APIs to implement this App. Related + + online documents. + +

+ + + @foreach (var cellsCloudAPIDef in Model.CellsCloudAPIDefs) + { + + + + + + } + +
@cellsCloudAPIDef.ApiName + + @cellsCloudAPIDef.ApiUri + +
+
+ break; + } + } + +
+ *By uploading your files or using our service you agree with our + Terms of Service + and + Privacy Policy + . +
+ + @if (!string.IsNullOrEmpty(Model.ControlsView)) + { + @await Html.PartialAsync(Model.ControlsView) + } + + @if (!Model.UploadAndRedirect && !Model.AppName.Equals("Editor")) + { + if (Model.AppName.Equals("Merger")) + { +
+ @await Html.PartialAsync("MergeTo") +
+ } + + if (Model.AppName.Equals("Translation")) + { + @await Html.PartialAsync("TranslateTo") + } + else + { +
+ @if (Model.SaveAsOptions != null) + { + @await Html.PartialAsync("SaveAs") + } +
+ +
+
+ } + } + + @if (Model.AppName.Equals("Conversion")) + { +
+ Popular Converters: + Excel to Pdf +   + Excel to Jpg +   + Excel to Csv +   + Excel to Html +   + Jpg to Excel +
+ } + @if (Model.AppName.Equals("Editor")) + { +
+
+ +
+
+ +
+
+ } +
+
+ @if (!Model.UploadAndRedirect || Model.AppName == "Metadata") + { + @await Html.PartialAsync("Download") + } + + + + +
+
+ + +
+ +
+ +
+ +
+ +
+
+
+
+
+ diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/MainAssembly.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/MainAssembly.cshtml new file mode 100644 index 000000000..7b3caaa0d --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/MainAssembly.cshtml @@ -0,0 +1,151 @@ +@using Aspose.Cells.Common.Config +@model Aspose.Cells.Common.Models.ViewModel + +
+
+
+
+ +

@Model.Title

+

@Model.TitleSub

+ +
+
+ @if (false)@*Configuration.IsAsposeCloudApp*@ + { +
+

+ Use the following Aspose.Cells Cloud APIs to implement this App. Related + + online documents. + +

+ + + @foreach (var cellsCloudAPIDef in Model.CellsCloudAPIDefs) + { + + + + + + } + +
@cellsCloudAPIDef.ApiName + + @cellsCloudAPIDef.ApiUri + +
+
+ } +
+ *By uploading your files or using our service you agree with our + Terms of Service + and + Privacy Policy + . +
+
+
+ Data Source Name* +
+ Table Index +
+
+ Delimiter + +
+
+
+
+
+
+
+ +
+ +
+
+
+ @if (!Model.UploadAndRedirect || Model.AppName == "Metadata") + { + @await Html.PartialAsync("Download") + } +
+
+ + +
+ +
+ +
+ + + +
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/MergeTo.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/MergeTo.cshtml new file mode 100644 index 000000000..c5e47d939 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/MergeTo.cshtml @@ -0,0 +1,6 @@ +
+ + + + +
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherApps.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherApps.cshtml new file mode 100644 index 000000000..f45347a86 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherApps.cshtml @@ -0,0 +1,26 @@ +@using Aspose.Cells.Common.Models +@model ViewModel +@if (Model.OtherApps != null) +{ + +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherAppsPanel.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherAppsPanel.cshtml new file mode 100644 index 000000000..5bbbd1c84 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherAppsPanel.cshtml @@ -0,0 +1,14 @@ +@using Aspose.Cells.Common.Models +@model ViewModel +
+ @foreach (var app in Model.OtherApps) + { + + @app.DisplayName + + } +
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherFeatures.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherFeatures.cshtml new file mode 100644 index 000000000..d9941d8eb --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/OtherFeatures.cshtml @@ -0,0 +1,17 @@ +@using Aspose.Cells.Common.Models +@model OtherFeaturesModel + +
+
+

@Model.Title

+

@Model.TitleSub

+
    + @foreach (var item in Model.Items) + { +
  • + @item.Title +
  • + } +
+
+
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/SaveAs.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/SaveAs.cshtml new file mode 100644 index 000000000..99a730208 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/SaveAs.cshtml @@ -0,0 +1,19 @@ +@using Aspose.Cells.Common.Models +@model ViewModel +@* Section SaveToHeader must be in the Action View *@ + +
+ @Model.Resources["SaveAs"] +
+ +
+
\ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Social.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Social.cshtml new file mode 100644 index 000000000..d70259c78 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/Social.cshtml @@ -0,0 +1,83 @@ +@using Aspose.Cells.Common.Config + + + + + +@if (Configuration.IsAsposeCloudApp) +{ + +} +else +{ + +} + + + + + + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Pages/Shared/TranslateTo.cshtml b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/TranslateTo.cshtml new file mode 100644 index 000000000..9b2f19d7d --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Pages/Shared/TranslateTo.cshtml @@ -0,0 +1,68 @@ +@using Aspose.Cells.Common.Models +@model ViewModel + +
+
+ @Model.Resources["TranslateFrom"] +
+ +
+
+ +
+ @Model.Resources["TranslateTo"] +
+ +
+
+
+ +
+
+ Translated file format +
+ +
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/AwsStorageService.cs b/Demos/Apps/Aspose.Cells.Common/Services/AwsStorageService.cs new file mode 100644 index 000000000..aa455de31 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/AwsStorageService.cs @@ -0,0 +1,368 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using System.Web; +using Amazon; +using Amazon.Runtime; +using Amazon.S3; +using Amazon.S3.Model; +using Aspose.Cells.Common.Config; +using Aspose.Cells.Common.Models; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Services +{ + public class AwsConfig + { + public string RegionEndpoint { get; set; } + public string ServiceUrl { get; set; } + public bool? ForcePathStyle { get; set; } + public string AccessKeyId { get; set; } + public string SecretAccessKey { get; set; } + } + + public class AwsMetaInfo + { + private const string MetaTitle = "x-amz-meta-title"; + private const string MetaOriginalFilename = "x-amz-meta-original-file-name"; + + public string Title { get; set; } + public string OriginalFileName { get; set; } + + public Dictionary ToDict() + { + var result = new Dictionary(); + if (!string.IsNullOrEmpty(Title)) result.Add(MetaTitle, Title); + if (!string.IsNullOrEmpty(OriginalFileName)) result.Add(MetaOriginalFilename, OriginalFileName); + + return result; + } + + public static AwsMetaInfo FromDict(Dictionary dict) + { + var result = new AwsMetaInfo(); + + if (dict.ContainsKey(MetaTitle)) result.Title = dict[MetaTitle]; + if (dict.ContainsKey(MetaOriginalFilename)) result.OriginalFileName = dict[MetaOriginalFilename]; + return result; + } + } + + public class AwsObjectInfo + { + public string Path { get; set; } + public string Name { get; set; } + public long Size { get; set; } + public DateTime Modified { get; set; } + } + + public interface IStorageService + { + Task Upload(string objectPath, Stream stream, AwsMetaInfo metadata); + Task Upload(string objectPath, Stream stream); + Task<(Stream, string, AwsMetaInfo)> DownloadEx(string objectPath); + Task Download(string objectPath); + Task Delete(string objectPath); + Task<(AwsMetaInfo, string)> ObjectMetaInfoEx(string objectPath); + Task ObjectMetaInfo(string objectPath); + + Task> List(string path, int maxItems = -1); + Task> ListNames(string path, int maxItems = -1); + Task CheckStatus(string path); + Task UpdateStatus(Response data); + Task CheckExists(string objectPath); + Task DeleteDirectory(string id); + Task> GetS3Objects(string objectPath); + Task CopyingObjectAsync(string sourceKey, string destinationKey); + + string GetUrl(double durationHours, string p); + } + + public class AwsStorageService : IStorageService + { + private readonly ILogger _logger; + private AmazonS3Client _client; + private readonly string _bucket; + + public AwsStorageService(AwsConfig config, string bucket, ILogger logger) + { + _logger = logger; + _bucket = bucket; + Configure(config); + } + + private void Configure(AwsConfig config) + { + var regionEndpoint = RegionEndpoint.GetBySystemName(config.ServiceUrl); + var credentials = new BasicAWSCredentials(config.AccessKeyId, config.SecretAccessKey); + _client = new AmazonS3Client(credentials, regionEndpoint); + } + + /// + /// Uploads content specified by stream to object specified by path + /// + /// object (file) path + /// stream to upload + /// metadata custom fields + public async Task Upload(string objectPath, Stream stream, AwsMetaInfo metadata) + { + var request = new PutObjectRequest + { + BucketName = _bucket, + Key = GetObjectPath(objectPath), + InputStream = stream, + AutoCloseStream = true + }; + + if (null != metadata) + foreach (var (key, value) in metadata.ToDict()) + request.Metadata.Add(key.ToLower(), HttpUtility.UrlEncode(value)); + try + { + await _client.PutObjectAsync(request); + } + catch (Exception e) + { + _logger.AWSUploadStatusError(e); + throw; + } + } + + public async Task Upload(string objectPath, Stream stream) + { + await Upload(objectPath, stream, null); + } + + private static Dictionary Metadata(MetadataCollection m) + { + var dict = new Dictionary(); + if (null == m) return dict; + foreach (var k in m.Keys) + dict.Add(k.ToLower(), HttpUtility.UrlDecode(m[k])); + return dict; + } + + private static string GetObjectPath(string objectPath) => objectPath; + //objectPath.StartsWith('/') ? objectPath : $"/{objectPath}"; + + public static string Join(params string[] items) => string.Join('/', items.Where(x => !string.IsNullOrEmpty(x))); + + /// + /// Downloads object(file) specified by objectPath + /// + /// object(file) path to download + /// + /// Tuple: + /// Item1: file content stream + /// Item2: content type + /// Item3: metadata custom fields, associated with object + /// + public async Task<(Stream, string, AwsMetaInfo)> DownloadEx(string objectPath) + { + var request = new GetObjectRequest + { + BucketName = _bucket, + Key = GetObjectPath(objectPath) + }; + using var response = await _client.GetObjectAsync(request); + await using var responseStream = response.ResponseStream; + var ms = new MemoryStream(); + await responseStream.CopyToAsync(ms); + ms.Position = 0; + return (ms, response.Headers["Content-Type"], AwsMetaInfo.FromDict(Metadata(response.Metadata))); + } + + public async Task CheckExists(string objectPath) + { + var key = GetObjectPath(objectPath); + var request = new ListObjectsRequest {BucketName = _bucket, Prefix = key}; + var response = await _client.ListObjectsAsync(request); + return response.S3Objects.Any(o => o.Key == key); + } + + public async Task> GetS3Objects(string objectPath) + { + var key = GetObjectPath(objectPath); + var request = new ListObjectsRequest {BucketName = _bucket, Prefix = key}; + var response = await _client.ListObjectsAsync(request); + return response.S3Objects; + } + + /// + /// Downloads object(file) specified by objectPath + /// + /// object(file) path to download + /// + /// Tuple: + /// Item1: file content stream + /// Item2: content type + /// + public async Task<(Stream, string)> Download1(string objectPath) + { + var (stream, contentType, _) = await DownloadEx(objectPath); + return (stream, contentType); + } + + /// + /// Downloads object(file) specified by objectPath + /// + /// object(file) path to download + /// file content stream + public async Task Download(string objectPath) => (await DownloadEx(objectPath)).Item1; + + /// + /// Delete object(file) specified by objectPath + /// + /// object(file) path to download + public async Task Delete(string objectPath) + { + var request = new DeleteObjectRequest + { + BucketName = _bucket, + Key = GetObjectPath(objectPath) + }; + await _client.DeleteObjectAsync(request); + } + + /// + /// Returns Metadata info specified by objectPath + /// + /// object(file) path + /// + /// Tuple: + /// Item1: metadata custom fields, associated with object + /// Item2: content type + /// + public async Task<(AwsMetaInfo, string)> ObjectMetaInfoEx(string objectPath) + { + var request = new GetObjectMetadataRequest + { + BucketName = _bucket, + Key = GetObjectPath(objectPath) + }; + var response = await _client.GetObjectMetadataAsync(request); + return (AwsMetaInfo.FromDict(Metadata(response.Metadata)), response.Headers["Content-Type"]); + } + + /// + /// Returns Metadata info specified by objectPath + /// + /// object(file) path + /// Metadata custom fields associated with the object + public async Task ObjectMetaInfo(string objectPath) => (await ObjectMetaInfoEx(objectPath)).Item1; + + /// + /// List objects within the path + /// + /// Root path + /// max items returned (-1 - no restrictions) + /// AWSObjectInfo enumeration + public async Task> List(string path, int maxItems = -1) + { + var result = new List(); + var request = new ListObjectsRequest + { + BucketName = _bucket, + Prefix = GetObjectPath(path), + MaxKeys = 100 + }; + ListObjectsResponse response; + do + { + response = await _client.ListObjectsAsync(request); + + result.AddRange(response.S3Objects.Select(o => new AwsObjectInfo + { + Path = o.Key, + Name = o.Key.StartsWith(request.Prefix) ? o.Key.Substring(request.Prefix.Length).TrimStart('/') : o.Key.TrimStart('/'), + Size = o.Size, + Modified = o.LastModified + })); + + request.Marker = response.NextMarker; + } while (response.IsTruncated && (maxItems == -1 || maxItems > 0 && result.Count < maxItems)); + + return result; + } + + /// + /// List names within the path + /// + /// Root path + /// max items returned (-1 - no restrictions) + /// names enumeration + public async Task> ListNames(string path, int maxItems = -1) => (await List(path, maxItems)).Select(o => o.Name); + + public async Task CheckStatus(string path) + { + var (stream, _, _) = await DownloadEx(Join(path, "status.json")); + var serializer = new JsonSerializer(); + + using var sr = new StreamReader(stream); + using var jsonTextReader = new JsonTextReader(sr); + return serializer.Deserialize(jsonTextReader); + } + + public async Task UpdateStatus(Response data) + { + await using var ms = new MemoryStream(); + await using var writer = new StreamWriter(ms); + using var jsonWriter = new JsonTextWriter(writer); + var ser = new JsonSerializer(); + ser.Serialize(jsonWriter, data); + await jsonWriter.FlushAsync(); + await Upload(Join(data.FolderName, "status.json"), ms); + } + + public async Task DeleteDirectory(string id) + { + var key = GetObjectPath(id + "/"); + var request = new ListObjectsRequest {BucketName = _bucket, Prefix = key}; + var response = await _client.ListObjectsAsync(request); + foreach (var o in response.S3Objects) + { + await Delete(o.Key); + } + + await Delete(id + "/"); + } + + public async Task CopyingObjectAsync(string sourceKey, string destinationKey) + { + try + { + var request = new CopyObjectRequest + { + SourceBucket = _bucket, + SourceKey = GetObjectPath(sourceKey), + DestinationBucket = _bucket, + DestinationKey = GetObjectPath(destinationKey) + }; + await _client.CopyObjectAsync(request); + } + catch (AmazonS3Exception e) + { + _logger.LogError("Error encountered on server. Message:{Message} when writing an object", e.Message); + } + catch (Exception e) + { + _logger.LogError("Unknown encountered on server. Message:{Message} when writing an object", e.Message); + } + } + + public string GetUrl(double duration, string objectPath) + { + var request = new GetPreSignedUrlRequest + { + BucketName = _bucket, + Key = GetObjectPath(objectPath), + Expires = DateTime.UtcNow.AddHours(duration) + }; + var urlString = _client.GetPreSignedURL(request); + return urlString; + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/BaseApiCacheService.cs b/Demos/Apps/Aspose.Cells.Common/Services/BaseApiCacheService.cs new file mode 100644 index 000000000..be607b1b4 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/BaseApiCacheService.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Aspose.Cells.Common.Services +{ + public abstract class BaseApiCacheService + { + protected TV GetCached(Dictionary dict, TK key, Func> refresh) + { + lock (dict) + { + if (dict.ContainsKey(key)) return dict[key]; + + var result = Task.Run(async () => await refresh()).Result; + dict.Add(key, result); + + return dict[key]; + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/FileFormatService.cs b/Demos/Apps/Aspose.Cells.Common/Services/FileFormatService.cs new file mode 100644 index 000000000..490340c5f --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/FileFormatService.cs @@ -0,0 +1,39 @@ +using Aspose.Cells.Common.Models.DTO.SEOApi; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Services +{ + public class FileFormatService : BaseApiCacheService + { + public async Task GetFromLocal(string extension) + { + var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "App_Data/file_format.json"); + using (var sr = new StreamReader(jsonFilePath)) + { + var json = await sr.ReadToEndAsync(); + var formats = JsonConvert.DeserializeObject>(json); + + return formats.Keys.Contains(extension) ? formats[extension] : null; + } + } + + public async Task> GetAllFromLocal() + { + var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "App_Data/file_format.json"); + using (var sr = new StreamReader(jsonFilePath)) + { + var json = await sr.ReadToEndAsync(); + return JsonConvert.DeserializeObject>(json); + } + } + + public FileFormat GetCached(string extension) => GetCached(FileFormats, extension, async () => await GetFromLocal(extension)); + + private static readonly Dictionary FileFormats = new Dictionary(); + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/GeneratedPagesService.cs b/Demos/Apps/Aspose.Cells.Common/Services/GeneratedPagesService.cs new file mode 100644 index 000000000..cb6e9ecd6 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/GeneratedPagesService.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Aspose.Cells.Common.Models.DTO.SEOApi; +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Services +{ + public class GeneratedPagesService : BaseApiCacheService + { + public async Task GetByUrlFromLocal(string url) + { + var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "App_Data/generated_pages.json"); + using (var sr = new StreamReader(jsonFilePath)) + { + var json = await sr.ReadToEndAsync(); + var list = JsonConvert.DeserializeObject>(json); + + foreach (var generatedPage in list.Where(generatedPage => generatedPage.Url.Equals(url))) + { + return generatedPage; + } + + return new GeneratedPage(); + } + } + + public async Task> GetByAppUrlFromLocal(string appUrl) + { + var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "App_Data/generated_pages.json"); + using (var sr = new StreamReader(jsonFilePath)) + { + var json = await sr.ReadToEndAsync(); + var list = JsonConvert.DeserializeObject>(json); + + return list.Where(generatedPage => generatedPage.AppUrl.Equals(appUrl)).ToList(); + } + } + + public GeneratedPage GetCachedByUrl(string url) => GetCached(ByUrls, url, async () => await GetByUrlFromLocal(url)); + + public List GetCachedByAppUrl(string appUrl) => GetCached(ByAppUrls, appUrl, async () => await GetByAppUrlFromLocal(appUrl)); + + public static readonly Dictionary ByUrls = new Dictionary(); + public static readonly Dictionary> ByAppUrls = new Dictionary>(); + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/InternalLinkService.cs b/Demos/Apps/Aspose.Cells.Common/Services/InternalLinkService.cs new file mode 100644 index 000000000..0588de354 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/InternalLinkService.cs @@ -0,0 +1,26 @@ +using System; +using System.Threading.Tasks; +using System.Web; +using Microsoft.AspNetCore.Http; + +namespace Aspose.Cells.Common.Services +{ + public class InternalLinkService + { + private readonly IStorageService _service; + + public InternalLinkService(IStorageService service) + { + _service = service; + } + + public async Task Upload(string url) + { + var arr = url.Split("/", StringSplitOptions.RemoveEmptyEntries); + var id = HttpUtility.UrlDecode(arr[^1].Replace("?file=", "/")); + + var (stream, _, awsMetaInfo) = await _service.DownloadEx(id); + return new FormFile(stream, 0, stream.Length, awsMetaInfo.OriginalFileName, awsMetaInfo.OriginalFileName); + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/ReportService.cs b/Demos/Apps/Aspose.Cells.Common/Services/ReportService.cs new file mode 100644 index 000000000..919442eee --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/ReportService.cs @@ -0,0 +1,155 @@ +using System; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; +using Aspose.Cells.Common.Config; +using Newtonsoft.Json; + +namespace Aspose.Cells.Common.Services +{ + public static class ReportService + { + public static ReportResult Submit(ReportModel model, IStorageService storage) + { + Task.WaitAll(UploadFile(model, storage)); + var httpClient = new HttpClient(); + httpClient.DefaultRequestHeaders.Add("X-FORUM-API-Key", Configuration.ForumKey); + var requestData = ForumTopic.GetTopic(model); + HttpContent content = new StringContent(JsonConvert.SerializeObject(requestData)); + //content.Headers.Add("X-FORUM-API-Key", Configuration.ForumKey); + content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); + var task = httpClient.PostAsync(Configuration.ForumUrl, content); + task.Wait(); + var response = task.Result; + + var jsonResult = response.Content.ReadAsStringAsync().Result; + var data = JsonConvert.DeserializeObject(jsonResult); + + if (response.StatusCode != HttpStatusCode.OK) + { + if (data.error != null) + { + throw new Exception("forum bad gateway:" + data.error); + } + + throw new Exception("forum bad gateway"); + } + + if (data.error != null) + { + return new ReportResult + { + StatusCode = 500, + Status = data.error, + }; + } + + if (data.url != null) + { + return new ReportResult + { + StatusCode = 200, + ForumLink = data.url, + }; + } + + throw new Exception("forum api result error"); + } + + private static async Task UploadFile(ReportModel model, IStorageService storage) + { + var sourcePath = $"{Configuration.SourceFolder}/{model.ErrorFolderName}"; + var reportPath = $"{Configuration.ReportFolder}/{model.ErrorFolderName}"; + var task = storage.GetS3Objects(sourcePath); + task.Wait(); + var s3Objects = task.Result; + if (!s3Objects.Any(o => o.Key.Contains(sourcePath))) return; + + foreach (var s3Object in s3Objects) + { + var (stream, _, awsMetaInfo) = await storage.DownloadEx(s3Object.Key); + var url = AwsStorageService.Join(reportPath, awsMetaInfo.OriginalFileName); + await storage.Upload(url, stream, awsMetaInfo); + } + } + } + + public class ForumRequest + { + public ForumTopic topic { get; set; } + } + + public class CustomFields + { + public bool is_private { get; set; } + } + + public class ForumTopic + { + public string title { get; set; } + public int category_id { get; set; } + public bool notification { get; set; } + public ForumUser user { get; set; } + public Forumposts[] posts { get; set; } + public CustomFields custom_fields { get; set; } + + public static ForumRequest GetTopic(ReportModel model) + { + var user = new ForumUser + { + username = model.Email.Replace("@", "_at_"), + email = model.Email, + }; + var topic = new ForumTopic + { + title = model.ErrorAction.Replace(" ", "-") + "-" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss"), + category_id = int.Parse(Configuration.ForumCategoryId), + notification = true, + posts = new[] + { + new Forumposts + { + user = user, + raw = $"SessionId->{model.ErrorFolderName}->{model.ErrorAction}->{model.ErrorMessage}" + } + }, + custom_fields = new CustomFields + { + is_private = model.Private, + }, + user = user, + }; + return new ForumRequest { topic = topic }; + } + } + + public class ForumUser + { + public string email { get; set; } + public string username { get; set; } + } + + public class Forumposts + { + public string raw { get; set; } + public ForumUser user { get; set; } + } + + public class ReportModel + { + public string Email { get; set; } + public string ErrorFolderName { get; set; } + public string ErrorAction { get; set; } + public string ErrorMessage { get; set; } + public bool Private { get; set; } + } + + public class ReportResult + { + public int StatusCode { get; set; } + public string ForumLink { get; set; } + public string Status { get; set; } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/Services/WebClientService.cs b/Demos/Apps/Aspose.Cells.Common/Services/WebClientService.cs new file mode 100644 index 000000000..9e217667b --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/Services/WebClientService.cs @@ -0,0 +1,92 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.IO; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using MimeKit; + +namespace Aspose.Cells.Common.Services +{ + public class WebClientService + { + private const int MaxFileSizeBytes = 50000000; + + public async Task Upload(string url) + { + if (!Uri.IsWellFormedUriString(url, UriKind.Absolute)) + { + return null; + } + + var reader = new UriBuilder(url); + if (reader.Host.Contains("drive.google.com") && reader.Path.Contains("file/d/")) + { + var s = reader.Scheme; + var h = reader.Host; + var p = reader.Path.Split('/').Skip(3).FirstOrDefault(); + if (!string.IsNullOrEmpty(p)) + { + var builder = new UriBuilder {Scheme = s, Host = h, Path = "uc", Query = "export=download&id=" + p}; + url = builder.Uri.AbsoluteUri; + } + } + else if (reader.Host.Contains("dropbox.com")) + { + reader.Query = "dl=1"; + url = reader.Uri.AbsoluteUri; + } + + var client = new WebClient(); + client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); + + client.DownloadProgressChanged += DownloadProgressChanged; + + byte[] data; + try + { + data = await client.DownloadDataTaskAsync(url); + } + catch (Exception ex) + { + throw new ValidationException($"Can not parse link '{url}' {ex.Message}"); + } + + var header = client.ResponseHeaders["Content-Disposition"]; + string filename; + if (header != null) + { + var contentDisposition = new System.Net.Mime.ContentDisposition(header); + filename = contentDisposition.FileName; + } + else if (client.ResponseHeaders.AllKeys.Any(k => k == "Content-Type") && + MimeTypes.TryGetExtension(client.ResponseHeaders["Content-Type"], out var ext)) + { + filename = Guid.NewGuid() + ext; + } + else + { + filename = Guid.NewGuid() + ".html"; + } + + if (data.Length > MaxFileSizeBytes) + { + throw new ValidationException($"Link '{url}' has file '{filename}' larger when limit"); + } + + var content = new MemoryStream(data); + + return new FormFile(content, 0, content.Length, filename, filename); + } + + private static void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) + { + var webClient = (WebClient) sender; + if (e.TotalBytesToReceive > MaxFileSizeBytes) + { + webClient.CancelAsync(); + } + } + } +} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Assembly/SampleTemplates/Data.xlsx b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/SampleTemplates/Data.xlsx new file mode 100644 index 000000000..3714368d5 Binary files /dev/null and b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/SampleTemplates/Data.xlsx differ diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Assembly/SampleTemplates/Template.xlsx b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/SampleTemplates/Template.xlsx new file mode 100644 index 000000000..b52e384b3 Binary files /dev/null and b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/SampleTemplates/Template.xlsx differ diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Assembly/cellsHelpDataSource.html b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/cellsHelpDataSource.html new file mode 100644 index 000000000..b5909278d --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/cellsHelpDataSource.html @@ -0,0 +1,217 @@ + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Assembly/cellsHelpTemplate.html b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/cellsHelpTemplate.html new file mode 100644 index 000000000..77eacfbde --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Assembly/cellsHelpTemplate.html @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/Site.css b/Demos/Apps/Aspose.Cells.Common/resources/Content/Site.css new file mode 100644 index 000000000..6ea5d8f6c --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/Site.css @@ -0,0 +1,24 @@ +body { + padding-top: 50px; + padding-bottom: 20px; +} + +/* Set padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Override the default bootstrap behavior where horizontal description lists + will truncate terms that are too long to fit in the left column +*/ +.dl-horizontal dt { + white-space: normal; +} + +/* Set width on the form input elements since they're 100% wide by default */ +input, +select, +textarea { + max-width: 280px; +} diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.css b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.css new file mode 100644 index 000000000..31d888266 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.css.map b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.css.map new file mode 100644 index 000000000..d876f60fb --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.min.css b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.min.css new file mode 100644 index 000000000..5e3940195 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.min.css.map b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.min.css.map new file mode 100644 index 000000000..94813e900 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap-theme.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap.css b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap.css new file mode 100644 index 000000000..6167622ce --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap.css @@ -0,0 +1,6757 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap.css.map b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap.css.map new file mode 100644 index 000000000..f010c82d1 --- /dev/null +++ b/Demos/Apps/Aspose.Cells.Common/resources/Content/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,iBAAA;CH8O9C;AG7OmC;EAAW,iBAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EEnDA,2CAAA;EACA,qBAAA;CNokCD;AIvgCD;EACE,UAAA;CJygCD;AIngCD;EACE,uBAAA;CJqgCD;AIjgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CP+kCD;AIrgCD;EACE,mBAAA;CJugCD;AIjgCD;EACE,aAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CP+lCD;AIjgCD;EACE,mBAAA;CJmgCD;AI7/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJ+/BD;AIv/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJy/BD;AIj/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJm/BH;AIx+BD;EACE,gBAAA;CJ0+BD;AQjoCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR6oCD;AQlpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRmqCH;AQ/pCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRoqCD;AQxqCD;;;;;;;;;;;;EAQI,eAAA;CR8qCH;AQ3qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRgrCD;AQprCD;;;;;;;;;;;;EAQI,eAAA;CR0rCH;AQtrCD;;EAAU,gBAAA;CR0rCT;AQzrCD;;EAAU,gBAAA;CR6rCT;AQ5rCD;;EAAU,gBAAA;CRgsCT;AQ/rCD;;EAAU,gBAAA;CRmsCT;AQlsCD;;EAAU,gBAAA;CRssCT;AQrsCD;;EAAU,gBAAA;CRysCT;AQnsCD;EACE,iBAAA;CRqsCD;AQlsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRosCD;AQ/rCD;EAwOA;IA1OI,gBAAA;GRqsCD;CACF;AQ7rCD;;EAEE,eAAA;CR+rCD;AQ5rCD;;EAEE,0BAAA;EACA,cAAA;CR8rCD;AQ1rCD;EAAuB,iBAAA;CR6rCtB;AQ5rCD;EAAuB,kBAAA;CR+rCtB;AQ9rCD;EAAuB,mBAAA;CRisCtB;AQhsCD;EAAuB,oBAAA;CRmsCtB;AQlsCD;EAAuB,oBAAA;CRqsCtB;AQlsCD;EAAuB,0BAAA;CRqsCtB;AQpsCD;EAAuB,0BAAA;CRusCtB;AQtsCD;EAAuB,2BAAA;CRysCtB;AQtsCD;EACE,eAAA;CRwsCD;AQtsCD;ECrGE,eAAA;CT8yCD;AS7yCC;;EAEE,eAAA;CT+yCH;AQ1sCD;ECxGE,eAAA;CTqzCD;ASpzCC;;EAEE,eAAA;CTszCH;AQ9sCD;EC3GE,eAAA;CT4zCD;AS3zCC;;EAEE,eAAA;CT6zCH;AQltCD;EC9GE,eAAA;CTm0CD;ASl0CC;;EAEE,eAAA;CTo0CH;AQttCD;ECjHE,eAAA;CT00CD;ASz0CC;;EAEE,eAAA;CT20CH;AQttCD;EAGE,YAAA;EE3HA,0BAAA;CVk1CD;AUj1CC;;EAEE,0BAAA;CVm1CH;AQxtCD;EE9HE,0BAAA;CVy1CD;AUx1CC;;EAEE,0BAAA;CV01CH;AQ5tCD;EEjIE,0BAAA;CVg2CD;AU/1CC;;EAEE,0BAAA;CVi2CH;AQhuCD;EEpIE,0BAAA;CVu2CD;AUt2CC;;EAEE,0BAAA;CVw2CH;AQpuCD;EEvIE,0BAAA;CV82CD;AU72CC;;EAEE,0BAAA;CV+2CH;AQnuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRquCD;AQ7tCD;;EAEE,cAAA;EACA,oBAAA;CR+tCD;AQluCD;;;;EAMI,iBAAA;CRkuCH;AQ3tCD;EACE,gBAAA;EACA,iBAAA;CR6tCD;AQztCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR4tCD;AQ9tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR4tCH;AQvtCD;EACE,cAAA;EACA,oBAAA;CRytCD;AQvtCD;;EAEE,wBAAA;CRytCD;AQvtCD;EACE,kBAAA;CRytCD;AQvtCD;EACE,eAAA;CRytCD;AQhsCD;EA6EA;IAvFM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXq6CC;EQ7nCH;IAhFM,mBAAA;GRgtCH;CACF;AQvsCD;;EAGE,aAAA;EACA,kCAAA;CRwsCD;AQtsCD;EACE,eAAA;EA9IqB,0BAAA;CRu1CtB;AQpsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRssCD;AQjsCG;;;EACE,iBAAA;CRqsCL;AQ/sCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRisCH;AQ/rCG;;;EACE,uBAAA;CRmsCL;AQ3rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR6rCD;AQvrCG;;;;;;EAAW,YAAA;CR+rCd;AQ9rCG;;;;;;EACE,uBAAA;CRqsCL;AQ/rCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRisCD;AYv+CD;;;;EAIE,+DAAA;CZy+CD;AYr+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZu+CD;AYn+CD;EACE,iBAAA;EACA,eAAA;EACA,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZq+CD;AY3+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZq+CH;AYh+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;CZk+CD;AY7+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZi+CH;AY59CD;EACE,kBAAA;EACA,mBAAA;CZ89CD;AaxhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd8hDD;AaxhDC;EAqEF;IAvEI,aAAA;Gb8hDD;CACF;Aa1hDC;EAkEF;IApEI,aAAA;GbgiDD;CACF;Aa5hDD;EA+DA;IAjEI,cAAA;GbkiDD;CACF;AazhDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdmjDD;AathDD;ECvBE,mBAAA;EACA,oBAAA;CdgjDD;AehjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfgjDL;AehiDG;EACE,YAAA;CfkiDL;Ae3hDC;EACE,YAAA;Cf6hDH;Ae9hDC;EACE,oBAAA;CfgiDH;AejiDC;EACE,oBAAA;CfmiDH;AepiDC;EACE,WAAA;CfsiDH;AeviDC;EACE,oBAAA;CfyiDH;Ae1iDC;EACE,oBAAA;Cf4iDH;Ae7iDC;EACE,WAAA;Cf+iDH;AehjDC;EACE,oBAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,WAAA;CfwjDH;AezjDC;EACE,oBAAA;Cf2jDH;Ae5jDC;EACE,mBAAA;Cf8jDH;AehjDC;EACE,YAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,oBAAA;CfwjDH;AezjDC;EACE,WAAA;Cf2jDH;Ae5jDC;EACE,oBAAA;Cf8jDH;Ae/jDC;EACE,oBAAA;CfikDH;AelkDC;EACE,WAAA;CfokDH;AerkDC;EACE,oBAAA;CfukDH;AexkDC;EACE,oBAAA;Cf0kDH;Ae3kDC;EACE,WAAA;Cf6kDH;Ae9kDC;EACE,oBAAA;CfglDH;AejlDC;EACE,mBAAA;CfmlDH;Ae/kDC;EACE,YAAA;CfilDH;AejmDC;EACE,WAAA;CfmmDH;AepmDC;EACE,mBAAA;CfsmDH;AevmDC;EACE,mBAAA;CfymDH;Ae1mDC;EACE,UAAA;Cf4mDH;Ae7mDC;EACE,mBAAA;Cf+mDH;AehnDC;EACE,mBAAA;CfknDH;AennDC;EACE,UAAA;CfqnDH;AetnDC;EACE,mBAAA;CfwnDH;AeznDC;EACE,mBAAA;Cf2nDH;Ae5nDC;EACE,UAAA;Cf8nDH;Ae/nDC;EACE,mBAAA;CfioDH;AeloDC;EACE,kBAAA;CfooDH;AehoDC;EACE,WAAA;CfkoDH;AepnDC;EACE,kBAAA;CfsnDH;AevnDC;EACE,0BAAA;CfynDH;Ae1nDC;EACE,0BAAA;Cf4nDH;Ae7nDC;EACE,iBAAA;Cf+nDH;AehoDC;EACE,0BAAA;CfkoDH;AenoDC;EACE,0BAAA;CfqoDH;AetoDC;EACE,iBAAA;CfwoDH;AezoDC;EACE,0BAAA;Cf2oDH;Ae5oDC;EACE,0BAAA;Cf8oDH;Ae/oDC;EACE,iBAAA;CfipDH;AelpDC;EACE,0BAAA;CfopDH;AerpDC;EACE,yBAAA;CfupDH;AexpDC;EACE,gBAAA;Cf0pDH;Aa1pDD;EElCI;IACE,YAAA;Gf+rDH;EexrDD;IACE,YAAA;Gf0rDD;Ee3rDD;IACE,oBAAA;Gf6rDD;Ee9rDD;IACE,oBAAA;GfgsDD;EejsDD;IACE,WAAA;GfmsDD;EepsDD;IACE,oBAAA;GfssDD;EevsDD;IACE,oBAAA;GfysDD;Ee1sDD;IACE,WAAA;Gf4sDD;Ee7sDD;IACE,oBAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,WAAA;GfqtDD;EettDD;IACE,oBAAA;GfwtDD;EeztDD;IACE,mBAAA;Gf2tDD;Ee7sDD;IACE,YAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,oBAAA;GfqtDD;EettDD;IACE,WAAA;GfwtDD;EeztDD;IACE,oBAAA;Gf2tDD;Ee5tDD;IACE,oBAAA;Gf8tDD;Ee/tDD;IACE,WAAA;GfiuDD;EeluDD;IACE,oBAAA;GfouDD;EeruDD;IACE,oBAAA;GfuuDD;EexuDD;IACE,WAAA;Gf0uDD;Ee3uDD;IACE,oBAAA;Gf6uDD;Ee9uDD;IACE,mBAAA;GfgvDD;Ee5uDD;IACE,YAAA;Gf8uDD;Ee9vDD;IACE,WAAA;GfgwDD;EejwDD;IACE,mBAAA;GfmwDD;EepwDD;IACE,mBAAA;GfswDD;EevwDD;IACE,UAAA;GfywDD;Ee1wDD;IACE,mBAAA;Gf4wDD;Ee7wDD;IACE,mBAAA;Gf+wDD;EehxDD;IACE,UAAA;GfkxDD;EenxDD;IACE,mBAAA;GfqxDD;EetxDD;IACE,mBAAA;GfwxDD;EezxDD;IACE,UAAA;Gf2xDD;Ee5xDD;IACE,mBAAA;Gf8xDD;Ee/xDD;IACE,kBAAA;GfiyDD;Ee7xDD;IACE,WAAA;Gf+xDD;EejxDD;IACE,kBAAA;GfmxDD;EepxDD;IACE,0BAAA;GfsxDD;EevxDD;IACE,0BAAA;GfyxDD;Ee1xDD;IACE,iBAAA;Gf4xDD;Ee7xDD;IACE,0BAAA;Gf+xDD;EehyDD;IACE,0BAAA;GfkyDD;EenyDD;IACE,iBAAA;GfqyDD;EetyDD;IACE,0BAAA;GfwyDD;EezyDD;IACE,0BAAA;Gf2yDD;Ee5yDD;IACE,iBAAA;Gf8yDD;Ee/yDD;IACE,0BAAA;GfizDD;EelzDD;IACE,yBAAA;GfozDD;EerzDD;IACE,gBAAA;GfuzDD;CACF;Aa/yDD;EE3CI;IACE,YAAA;Gf61DH;Eet1DD;IACE,YAAA;Gfw1DD;Eez1DD;IACE,oBAAA;Gf21DD;Ee51DD;IACE,oBAAA;Gf81DD;Ee/1DD;IACE,WAAA;Gfi2DD;Eel2DD;IACE,oBAAA;Gfo2DD;Eer2DD;IACE,oBAAA;Gfu2DD;Eex2DD;IACE,WAAA;Gf02DD;Ee32DD;IACE,oBAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,WAAA;Gfm3DD;Eep3DD;IACE,oBAAA;Gfs3DD;Eev3DD;IACE,mBAAA;Gfy3DD;Ee32DD;IACE,YAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,oBAAA;Gfm3DD;Eep3DD;IACE,WAAA;Gfs3DD;Eev3DD;IACE,oBAAA;Gfy3DD;Ee13DD;IACE,oBAAA;Gf43DD;Ee73DD;IACE,WAAA;Gf+3DD;Eeh4DD;IACE,oBAAA;Gfk4DD;Een4DD;IACE,oBAAA;Gfq4DD;Eet4DD;IACE,WAAA;Gfw4DD;Eez4DD;IACE,oBAAA;Gf24DD;Ee54DD;IACE,mBAAA;Gf84DD;Ee14DD;IACE,YAAA;Gf44DD;Ee55DD;IACE,WAAA;Gf85DD;Ee/5DD;IACE,mBAAA;Gfi6DD;Eel6DD;IACE,mBAAA;Gfo6DD;Eer6DD;IACE,UAAA;Gfu6DD;Eex6DD;IACE,mBAAA;Gf06DD;Ee36DD;IACE,mBAAA;Gf66DD;Ee96DD;IACE,UAAA;Gfg7DD;Eej7DD;IACE,mBAAA;Gfm7DD;Eep7DD;IACE,mBAAA;Gfs7DD;Eev7DD;IACE,UAAA;Gfy7DD;Ee17DD;IACE,mBAAA;Gf47DD;Ee77DD;IACE,kBAAA;Gf+7DD;Ee37DD;IACE,WAAA;Gf67DD;Ee/6DD;IACE,kBAAA;Gfi7DD;Eel7DD;IACE,0BAAA;Gfo7DD;Eer7DD;IACE,0BAAA;Gfu7DD;Eex7DD;IACE,iBAAA;Gf07DD;Ee37DD;IACE,0BAAA;Gf67DD;Ee97DD;IACE,0BAAA;Gfg8DD;Eej8DD;IACE,iBAAA;Gfm8DD;Eep8DD;IACE,0BAAA;Gfs8DD;Eev8DD;IACE,0BAAA;Gfy8DD;Ee18DD;IACE,iBAAA;Gf48DD;Ee78DD;IACE,0BAAA;Gf+8DD;Eeh9DD;IACE,yBAAA;Gfk9DD;Een9DD;IACE,gBAAA;Gfq9DD;CACF;Aa18DD;EE9CI;IACE,YAAA;Gf2/DH;Eep/DD;IACE,YAAA;Gfs/DD;Eev/DD;IACE,oBAAA;Gfy/DD;Ee1/DD;IACE,oBAAA;Gf4/DD;Ee7/DD;IACE,WAAA;Gf+/DD;EehgED;IACE,oBAAA;GfkgED;EengED;IACE,oBAAA;GfqgED;EetgED;IACE,WAAA;GfwgED;EezgED;IACE,oBAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,WAAA;GfihED;EelhED;IACE,oBAAA;GfohED;EerhED;IACE,mBAAA;GfuhED;EezgED;IACE,YAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,oBAAA;GfihED;EelhED;IACE,WAAA;GfohED;EerhED;IACE,oBAAA;GfuhED;EexhED;IACE,oBAAA;Gf0hED;Ee3hED;IACE,WAAA;Gf6hED;Ee9hED;IACE,oBAAA;GfgiED;EejiED;IACE,oBAAA;GfmiED;EepiED;IACE,WAAA;GfsiED;EeviED;IACE,oBAAA;GfyiED;Ee1iED;IACE,mBAAA;Gf4iED;EexiED;IACE,YAAA;Gf0iED;Ee1jED;IACE,WAAA;Gf4jED;Ee7jED;IACE,mBAAA;Gf+jED;EehkED;IACE,mBAAA;GfkkED;EenkED;IACE,UAAA;GfqkED;EetkED;IACE,mBAAA;GfwkED;EezkED;IACE,mBAAA;Gf2kED;Ee5kED;IACE,UAAA;Gf8kED;Ee/kED;IACE,mBAAA;GfilED;EellED;IACE,mBAAA;GfolED;EerlED;IACE,UAAA;GfulED;EexlED;IACE,mBAAA;Gf0lED;Ee3lED;IACE,kBAAA;Gf6lED;EezlED;IACE,WAAA;Gf2lED;Ee7kED;IACE,kBAAA;Gf+kED;EehlED;IACE,0BAAA;GfklED;EenlED;IACE,0BAAA;GfqlED;EetlED;IACE,iBAAA;GfwlED;EezlED;IACE,0BAAA;Gf2lED;Ee5lED;IACE,0BAAA;Gf8lED;Ee/lED;IACE,iBAAA;GfimED;EelmED;IACE,0BAAA;GfomED;EermED;IACE,0BAAA;GfumED;EexmED;IACE,iBAAA;Gf0mED;Ee3mED;IACE,0BAAA;Gf6mED;Ee9mED;IACE,yBAAA;GfgnED;EejnED;IACE,gBAAA;GfmnED;CACF;AgBvrED;EACE,8BAAA;ChByrED;AgBvrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChByrED;AgBvrED;EACE,iBAAA;ChByrED;AgBnrED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBqrED;AgBxrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChBqrEP;AgBnsED;EAoBI,uBAAA;EACA,8BAAA;ChBkrEH;AgBvsED;;;;;;EA8BQ,cAAA;ChBirEP;AgB/sED;EAoCI,2BAAA;ChB8qEH;AgBltED;EAyCI,uBAAA;ChB4qEH;AgBrqED;;;;;;EAOQ,aAAA;ChBsqEP;AgB3pED;EACE,uBAAA;ChB6pED;AgB9pED;;;;;;EAQQ,uBAAA;ChB8pEP;AgBtqED;;EAeM,yBAAA;ChB2pEL;AgBjpED;EAEI,0BAAA;ChBkpEH;AgBzoED;EAEI,0BAAA;ChB0oEH;AgBjoED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBmoED;AgB9nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBioEL;AiB7wEC;;;;;;;;;;;;EAOI,0BAAA;CjBoxEL;AiB9wEC;;;;;EAMI,0BAAA;CjB+wEL;AiBlyEC;;;;;;;;;;;;EAOI,0BAAA;CjByyEL;AiBnyEC;;;;;EAMI,0BAAA;CjBoyEL;AiBvzEC;;;;;;;;;;;;EAOI,0BAAA;CjB8zEL;AiBxzEC;;;;;EAMI,0BAAA;CjByzEL;AiB50EC;;;;;;;;;;;;EAOI,0BAAA;CjBm1EL;AiB70EC;;;;;EAMI,0BAAA;CjB80EL;AiBj2EC;;;;;;;;;;;;EAOI,0BAAA;CjBw2EL;AiBl2EC;;;;;EAMI,0BAAA;CjBm2EL;AgBjtED;EACE,iBAAA;EACA,kBAAA;ChBmtED;AgBtpED;EACA;IA3DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBotED;EgB7pEH;IAnDM,iBAAA;GhBmtEH;EgBhqEH;;;;;;IA1CY,oBAAA;GhBktET;EgBxqEH;IAlCM,UAAA;GhB6sEH;EgB3qEH;;;;;;IAzBY,eAAA;GhB4sET;EgBnrEH;;;;;;IArBY,gBAAA;GhBgtET;EgB3rEH;;;;IARY,iBAAA;GhBysET;CACF;AkBn6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBk6ED;AkB/5ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBi6ED;AkB95ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBg6ED;AkBr5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL43ET;AkBr5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBu5ED;AkBp5ED;EACE,eAAA;ClBs5ED;AkBl5ED;EACE,eAAA;EACA,YAAA;ClBo5ED;AkBh5ED;;EAEE,aAAA;ClBk5ED;AkB94ED;;;EZrEE,2CAAA;EACA,qBAAA;CNw9ED;AkB74ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClB+4ED;AkBr3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CLwzET;AmBh8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CLy7ET;AKx5EC;EACE,YAAA;EACA,WAAA;CL05EH;AKx5EC;EAA0B,YAAA;CL25E3B;AK15EC;EAAgC,YAAA;CL65EjC;AkBj4EC;EACE,UAAA;EACA,8BAAA;ClBm4EH;AkB33EC;;;EAGE,0BAAA;EACA,WAAA;ClB63EH;AkB13EC;;EAEE,oBAAA;ClB43EH;AkBx3EC;EACE,aAAA;ClB03EH;AkB92ED;EACE,yBAAA;ClBg3ED;AkBx0ED;EAtBI;;;;IACE,kBAAA;GlBo2EH;EkBj2EC;;;;;;;;IAEE,kBAAA;GlBy2EH;EkBt2EC;;;;;;;;IAEE,kBAAA;GlB82EH;CACF;AkBp2ED;EACE,oBAAA;ClBs2ED;AkB91ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBg2ED;AkBr2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2EH;AkB91ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBg2ED;AkB71ED;;EAEE,iBAAA;ClB+1ED;AkB31ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClB61ED;AkB31ED;;EAEE,cAAA;EACA,kBAAA;ClB61ED;AkBp1EC;;;;;;EAGE,oBAAA;ClBy1EH;AkBn1EC;;;;EAEE,oBAAA;ClBu1EH;AkBj1EC;;;;EAGI,oBAAA;ClBo1EL;AkBz0ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClBy0ED;AkBv0EC;;EAEE,gBAAA;EACA,iBAAA;ClBy0EH;AkB5zED;ECnQE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBkkFD;AmBhkFC;EACE,aAAA;EACA,kBAAA;CnBkkFH;AmB/jFC;;EAEE,aAAA;CnBikFH;AkBx0ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClBy0EH;AkB/0ED;EASI,aAAA;EACA,kBAAA;ClBy0EH;AkBn1ED;;EAcI,aAAA;ClBy0EH;AkBv1ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClBy0EH;AkBr0ED;EC/RE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBumFD;AmBrmFC;EACE,aAAA;EACA,kBAAA;CnBumFH;AmBpmFC;;EAEE,aAAA;CnBsmFH;AkBj1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBk1EH;AkBx1ED;EASI,aAAA;EACA,kBAAA;ClBk1EH;AkB51ED;;EAcI,aAAA;ClBk1EH;AkBh2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBk1EH;AkBz0ED;EAEE,mBAAA;ClB00ED;AkB50ED;EAMI,sBAAA;ClBy0EH;AkBr0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBn0ED;;;;;;;;;;EC1ZI,eAAA;CnByuFH;AkB/0ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL0rFT;AmBxuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL+rFT;AkBz1ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBwuFH;AkB91ED;ECtYI,eAAA;CnBuuFH;AkB91ED;;;;;;;;;;EC7ZI,eAAA;CnBuwFH;AkB12ED;ECzZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwtFT;AmBtwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6tFT;AkBp3ED;EC/YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBswFH;AkBz3ED;ECzYI,eAAA;CnBqwFH;AkBz3ED;;;;;;;;;;EChaI,eAAA;CnBqyFH;AkBr4ED;EC5ZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLsvFT;AmBpyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2vFT;AkB/4ED;EClZI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBoyFH;AkBp5ED;EC5YI,eAAA;CnBmyFH;AkBh5EC;EACE,UAAA;ClBk5EH;AkBh5EC;EACE,OAAA;ClBk5EH;AkBx4ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB04ED;AkBvzED;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBy3EH;EkBrvEH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBu3EH;EkB1vEH;IAxHM,sBAAA;GlBq3EH;EkB7vEH;IApHM,sBAAA;IACA,uBAAA;GlBo3EH;EkBjwEH;;;IA9GQ,YAAA;GlBo3EL;EkBtwEH;IAxGM,YAAA;GlBi3EH;EkBzwEH;IApGM,iBAAA;IACA,uBAAA;GlBg3EH;EkB7wEH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB62EH;EkBpxEH;;IAtFQ,gBAAA;GlB82EL;EkBxxEH;;IAjFM,mBAAA;IACA,eAAA;GlB62EH;EkB7xEH;IA3EM,OAAA;GlB22EH;CACF;AkBj2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClB81EH;AkBz2ED;;EAiBI,iBAAA;ClB41EH;AkB72ED;EJthBE,mBAAA;EACA,oBAAA;Cds4FD;AkB10EC;EAyBF;IAnCM,kBAAA;IACA,iBAAA;IACA,iBAAA;GlBw1EH;CACF;AkBx3ED;EAwCI,YAAA;ClBm1EH;AkBr0EC;EAUF;IAdQ,kBAAA;IACA,gBAAA;GlB60EL;CACF;AkBn0EC;EAEF;IANQ,iBAAA;IACA,gBAAA;GlB20EL;CACF;AoBp6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC0CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB+JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL+tFT;AoBv6FG;;;;;;EdnBF,2CAAA;EACA,qBAAA;CNk8FD;AoB16FC;;;EAGE,YAAA;EACA,sBAAA;CpB46FH;AoBz6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLi5FT;AoBz6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CL05FT;AoBz6FG;;EAEE,qBAAA;CpB26FL;AoBl6FD;EC3DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBg+FD;AqB99FC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBs+FT;AqBn+FC;;;EAGE,uBAAA;CrBq+FH;AqBh+FG;;;;;;;;;EAGE,uBAAA;EACI,mBAAA;CrBw+FT;AoBv9FD;ECZI,YAAA;EACA,uBAAA;CrBs+FH;AoBx9FD;EC9DE,YAAA;EACA,0BAAA;EACA,sBAAA;CrByhGD;AqBvhGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB+hGT;AqB5hGC;;;EAGE,uBAAA;CrB8hGH;AqBzhGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBiiGT;AoB7gGD;ECfI,eAAA;EACA,uBAAA;CrB+hGH;AoB7gGD;EClEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBklGD;AqBhlGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBwlGT;AqBrlGC;;;EAGE,uBAAA;CrBulGH;AqBllGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB0lGT;AoBlkGD;ECnBI,eAAA;EACA,uBAAA;CrBwlGH;AoBlkGD;ECtEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB2oGD;AqBzoGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBipGT;AqB9oGC;;;EAGE,uBAAA;CrBgpGH;AqB3oGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBmpGT;AoBvnGD;ECvBI,eAAA;EACA,uBAAA;CrBipGH;AoBvnGD;EC1EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBosGD;AqBlsGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB0sGT;AqBvsGC;;;EAGE,uBAAA;CrBysGH;AqBpsGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB4sGT;AoB5qGD;EC3BI,eAAA;EACA,uBAAA;CrB0sGH;AoB5qGD;EC9EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6vGD;AqB3vGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBmwGT;AqBhwGC;;;EAGE,uBAAA;CrBkwGH;AqB7vGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBqwGT;AoBjuGD;EC/BI,eAAA;EACA,uBAAA;CrBmwGH;AoB5tGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpB8tGD;AoB5tGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLkwGT;AoB7tGC;;;;EAIE,0BAAA;CpB+tGH;AoB7tGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpB+tGH;AoB3tGG;;;;EAEE,eAAA;EACA,sBAAA;CpB+tGL;AoBttGD;;ECxEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBkyGD;AoBztGD;;EC5EE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrByyGD;AoB5tGD;;EChFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBgzGD;AoB3tGD;EACE,eAAA;EACA,YAAA;CpB6tGD;AoBztGD;EACE,gBAAA;CpB2tGD;AoBptGC;;;EACE,YAAA;CpBwtGH;AuBl3GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLisGT;AuBr3GC;EACE,WAAA;CvBu3GH;AuBn3GD;EACE,cAAA;CvBq3GD;AuBn3GC;EAAY,eAAA;CvBs3Gb;AuBr3GC;EAAY,mBAAA;CvBw3Gb;AuBv3GC;EAAY,yBAAA;CvB03Gb;AuBv3GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CL2sGT;AwBr5GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxBu5GD;AwBn5GD;;EAEE,mBAAA;CxBq5GD;AwBj5GD;EACE,WAAA;CxBm5GD;AwB/4GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBk5GD;AwB74GC;EACE,SAAA;EACA,WAAA;CxB+4GH;AwBx6GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBo8GD;AwB96GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB84GH;AwBx4GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB04GH;AwBp4GC;;;EAGE,YAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxBs4GH;AwB73GC;;;EAGE,eAAA;CxB+3GH;AwB33GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxB63GH;AwBx3GD;EAGI,eAAA;CxBw3GH;AwB33GD;EAQI,WAAA;CxBs3GH;AwB92GD;EACE,WAAA;EACA,SAAA;CxBg3GD;AwBx2GD;EACE,QAAA;EACA,YAAA;CxB02GD;AwBt2GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBw2GD;AwBp2GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxBs2GD;AwBl2GD;EACE,SAAA;EACA,WAAA;CxBo2GD;AwB51GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxB41GH;AwBn2GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB41GH;AwBv0GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB05GC;EwBv1GD;IA1DA,QAAA;IACA,YAAA;GxBo5GC;CACF;A2BpiHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3BsiHD;A2B1iHD;;EAMI,mBAAA;EACA,YAAA;C3BwiHH;A2BtiHG;;;;;;;;EAIE,WAAA;C3B4iHL;A2BtiHD;;;;EAKI,kBAAA;C3BuiHH;A2BliHD;EACE,kBAAA;C3BoiHD;A2BriHD;;;EAOI,YAAA;C3BmiHH;A2B1iHD;;;EAYI,iBAAA;C3BmiHH;A2B/hHD;EACE,iBAAA;C3BiiHD;A2B7hHD;EACE,eAAA;C3B+hHD;A2B9hHC;EClDA,8BAAA;EACG,2BAAA;C5BmlHJ;A2B7hHD;;EC/CE,6BAAA;EACG,0BAAA;C5BglHJ;A2B5hHD;EACE,YAAA;C3B8hHD;A2B5hHD;EACE,iBAAA;C3B8hHD;A2B5hHD;;ECnEE,8BAAA;EACG,2BAAA;C5BmmHJ;A2B3hHD;ECjEE,6BAAA;EACG,0BAAA;C5B+lHJ;A2B1hHD;;EAEE,WAAA;C3B4hHD;A2B3gHD;EACE,kBAAA;EACA,mBAAA;C3B6gHD;A2B3gHD;EACE,mBAAA;EACA,oBAAA;C3B6gHD;A2BxgHD;EtB/CE,yDAAA;EACQ,iDAAA;CL0jHT;A2BxgHC;EtBnDA,yBAAA;EACQ,iBAAA;CL8jHT;A2BrgHD;EACE,eAAA;C3BugHD;A2BpgHD;EACE,wBAAA;EACA,uBAAA;C3BsgHD;A2BngHD;EACE,wBAAA;C3BqgHD;A2B9/GD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3B+/GH;A2BtgHD;EAcM,YAAA;C3B2/GL;A2BzgHD;;;;EAsBI,iBAAA;EACA,eAAA;C3By/GH;A2Bp/GC;EACE,iBAAA;C3Bs/GH;A2Bp/GC;EC3KA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B4pHF;A2Bt/GC;EC/KA,2BAAA;EACC,0BAAA;EAOD,gCAAA;EACC,+BAAA;C5BkqHF;A2Bv/GD;EACE,iBAAA;C3By/GD;A2Bv/GD;;EC/KE,8BAAA;EACC,6BAAA;C5B0qHF;A2Bt/GD;EC7LE,2BAAA;EACC,0BAAA;C5BsrHF;A2Bl/GD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3Bo/GD;A2Bx/GD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3Bq/GH;A2B9/GD;EAYI,YAAA;C3Bq/GH;A2BjgHD;EAgBI,WAAA;C3Bo/GH;A2Bn+GD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3Bo+GL;A6B9sHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BgtHD;A6B7sHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7B+sHH;A6BxtHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7BusHH;A6BrsHG;EACE,WAAA;C7BusHL;A6B7rHD;;;EV0BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwqHD;AmBtqHC;;;EACE,aAAA;EACA,kBAAA;CnB0qHH;AmBvqHC;;;;;;EAEE,aAAA;CnB6qHH;A6B/sHD;;;EVqBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+rHD;AmB7rHC;;;EACE,aAAA;EACA,kBAAA;CnBisHH;AmB9rHC;;;;;;EAEE,aAAA;CnBosHH;A6B7tHD;;;EAGE,oBAAA;C7B+tHD;A6B7tHC;;;EACE,iBAAA;C7BiuHH;A6B7tHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7B+tHD;A6B1tHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7B4tHD;A6BztHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6BztHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6B/uHD;;EA0BI,cAAA;C7BytHH;A6BptHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;C5Bi0HJ;A6BrtHD;EACE,gBAAA;C7ButHD;A6BrtHD;;;;;;;EDxGE,6BAAA;EACG,0BAAA;C5Bs0HJ;A6BttHD;EACE,eAAA;C7BwtHD;A6BntHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BmtHD;A6BxtHD;EAUI,mBAAA;C7BitHH;A6B3tHD;EAYM,kBAAA;C7BktHL;A6B/sHG;;;EAGE,WAAA;C7BitHL;A6B5sHC;;EAGI,mBAAA;C7B6sHL;A6B1sHC;;EAGI,WAAA;EACA,kBAAA;C7B2sHL;A8B12HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B42HD;A8B/2HD;EAOI,mBAAA;EACA,eAAA;C9B22HH;A8Bn3HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B22HL;A8B12HK;;EAEE,sBAAA;EACA,0BAAA;C9B42HP;A8Bv2HG;EACE,eAAA;C9By2HL;A8Bv2HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By2HP;A8Bl2HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo2HL;A8B74HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm5HD;A8Bn5HD;EA0DI,gBAAA;C9B41HH;A8Bn1HD;EACE,8BAAA;C9Bq1HD;A8Bt1HD;EAGI,YAAA;EAEA,oBAAA;C9Bq1HH;A8B11HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo1HL;A8Bn1HK;EACE,mCAAA;C9Bq1HP;A8B/0HK;;;EAGE,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;EACA,gBAAA;C9Bi1HP;A8B50HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6vHD;A8Bh1HC;EAwDE,YAAA;C9B2xHH;A8Bn1HC;EA0DI,mBAAA;EACA,mBAAA;C9B4xHL;A8Bv1HC;EAgEE,UAAA;EACA,WAAA;C9B0xHH;A8B9wHD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9ByxHH;E8BztHH;IA9DQ,iBAAA;G9B0xHL;CACF;A8Bp2HC;EAuFE,gBAAA;EACA,mBAAA;C9BgxHH;A8Bx2HC;;;EA8FE,uBAAA;C9B+wHH;A8BjwHD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9B8wHH;E8B3uHH;;;IA9BM,0BAAA;G9B8wHH;CACF;A8B/2HD;EAEI,YAAA;C9Bg3HH;A8Bl3HD;EAMM,mBAAA;C9B+2HL;A8Br3HD;EASM,iBAAA;C9B+2HL;A8B12HK;;;EAGE,YAAA;EACA,0BAAA;C9B42HP;A8Bp2HD;EAEI,YAAA;C9Bq2HH;A8Bv2HD;EAIM,gBAAA;EACA,eAAA;C9Bs2HL;A8B11HD;EACE,YAAA;C9B41HD;A8B71HD;EAII,YAAA;C9B41HH;A8Bh2HD;EAMM,mBAAA;EACA,mBAAA;C9B61HL;A8Bp2HD;EAYI,UAAA;EACA,WAAA;C9B21HH;A8B/0HD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B01HH;E8B1xHH;IA9DQ,iBAAA;G9B21HL;CACF;A8Bn1HD;EACE,iBAAA;C9Bq1HD;A8Bt1HD;EAKI,gBAAA;EACA,mBAAA;C9Bo1HH;A8B11HD;;;EAYI,uBAAA;C9Bm1HH;A8Br0HD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9Bk1HH;E8B/yHH;;;IA9BM,0BAAA;G9Bk1HH;CACF;A8Bz0HD;EAEI,cAAA;C9B00HH;A8B50HD;EAKI,eAAA;C9B00HH;A8Bj0HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8iIF;A+BxiID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0iID;A+BliID;EA8nBA;IAhoBI,mBAAA;G/BwiID;CACF;A+BzhID;EAgnBA;IAlnBI,YAAA;G/B+hID;CACF;A+BjhID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkhID;A+BhhIC;EACE,iBAAA;C/BkhIH;A+Bt/HD;EA6jBA;IArlBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkhID;E+BhhIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkhIH;E+B/gIC;IACE,oBAAA;G/BihIH;E+B5gIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8gIH;CACF;A+B1gID;;EAGI,kBAAA;C/B2gIH;A+BtgIC;EAmjBF;;IArjBM,kBAAA;G/B6gIH;CACF;A+BpgID;;;;EAII,oBAAA;EACA,mBAAA;C/BsgIH;A+BhgIC;EAgiBF;;;;IAniBM,gBAAA;IACA,eAAA;G/B0gIH;CACF;A+B9/HD;EACE,cAAA;EACA,sBAAA;C/BggID;A+B3/HD;EA8gBA;IAhhBI,iBAAA;G/BigID;CACF;A+B7/HD;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+/HD;A+Bz/HD;EAggBA;;IAlgBI,iBAAA;G/BggID;CACF;A+B9/HD;EACE,OAAA;EACA,sBAAA;C/BggID;A+B9/HD;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BggID;A+B1/HD;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4/HD;A+B1/HC;;EAEE,sBAAA;C/B4/HH;A+BrgID;EAaI,eAAA;C/B2/HH;A+Bl/HD;EALI;;IAEE,mBAAA;G/B0/HH;CACF;A+Bh/HD;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/Bm/HD;A+B/+HC;EACE,WAAA;C/Bi/HH;A+B//HD;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B++HH;A+BrgID;EAyBI,gBAAA;C/B++HH;A+Bz+HD;EAqbA;IAvbI,cAAA;G/B++HD;CACF;A+Bt+HD;EACE,oBAAA;C/Bw+HD;A+Bz+HD;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/Bw+HH;A+B58HC;EA2YF;IAjaM,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/Bs+HH;E+B3kHH;;IAxZQ,2BAAA;G/Bu+HL;E+B/kHH;IArZQ,kBAAA;G/Bu+HL;E+Bt+HK;;IAEE,uBAAA;G/Bw+HP;CACF;A+Bt9HD;EA+XA;IA1YI,YAAA;IACA,UAAA;G/Bq+HD;E+B5lHH;IAtYM,YAAA;G/Bq+HH;E+B/lHH;IApYQ,kBAAA;IACA,qBAAA;G/Bs+HL;CACF;A+B39HD;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4vID;AkBtuHD;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBwyHH;EkBpqHH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBsyHH;EkBzqHH;IAxHM,sBAAA;GlBoyHH;EkB5qHH;IApHM,sBAAA;IACA,uBAAA;GlBmyHH;EkBhrHH;;;IA9GQ,YAAA;GlBmyHL;EkBrrHH;IAxGM,YAAA;GlBgyHH;EkBxrHH;IApGM,iBAAA;IACA,uBAAA;GlB+xHH;EkB5rHH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB4xHH;EkBnsHH;;IAtFQ,gBAAA;GlB6xHL;EkBvsHH;;IAjFM,mBAAA;IACA,eAAA;GlB4xHH;EkB5sHH;IA3EM,OAAA;GlB0xHH;CACF;A+BpgIC;EAmWF;IAzWM,mBAAA;G/B8gIH;E+B5gIG;IACE,iBAAA;G/B8gIL;CACF;A+B7/HD;EAoVA;IA5VI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmwIP;CACF;A+BngID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B00IF;A+BngID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By0IF;A+B//HD;EChVE,gBAAA;EACA,mBAAA;ChCk1ID;A+BhgIC;ECnVA,iBAAA;EACA,oBAAA;ChCs1ID;A+BjgIC;ECtVA,iBAAA;EACA,oBAAA;ChC01ID;A+B3/HD;EChWE,iBAAA;EACA,oBAAA;ChC81ID;A+Bv/HD;EAsSA;IA1SI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+/HD;CACF;A+Bl+HD;EAhBE;IExWA,uBAAA;GjC81IC;E+Br/HD;IE5WA,wBAAA;IF8WE,oBAAA;G/Bu/HD;E+Bz/HD;IAKI,gBAAA;G/Bu/HH;CACF;A+B9+HD;EACE,0BAAA;EACA,sBAAA;C/Bg/HD;A+Bl/HD;EAKI,YAAA;C/Bg/HH;A+B/+HG;;EAEE,eAAA;EACA,8BAAA;C/Bi/HL;A+B1/HD;EAcI,YAAA;C/B++HH;A+B7/HD;EAmBM,YAAA;C/B6+HL;A+B3+HK;;EAEE,YAAA;EACA,8BAAA;C/B6+HP;A+Bz+HK;;;EAGE,YAAA;EACA,0BAAA;C/B2+HP;A+Bv+HK;;;EAGE,YAAA;EACA,8BAAA;C/By+HP;A+BjhID;EA8CI,mBAAA;C/Bs+HH;A+Br+HG;;EAEE,uBAAA;C/Bu+HL;A+BxhID;EAoDM,uBAAA;C/Bu+HL;A+B3hID;;EA0DI,sBAAA;C/Bq+HH;A+B99HK;;;EAGE,0BAAA;EACA,YAAA;C/Bg+HP;A+B/7HC;EAoKF;IA7LU,YAAA;G/B49HP;E+B39HO;;IAEE,YAAA;IACA,8BAAA;G/B69HT;E+Bz9HO;;;IAGE,YAAA;IACA,0BAAA;G/B29HT;E+Bv9HO;;;IAGE,YAAA;IACA,8BAAA;G/By9HT;CACF;A+B3jID;EA8GI,YAAA;C/Bg9HH;A+B/8HG;EACE,YAAA;C/Bi9HL;A+BjkID;EAqHI,YAAA;C/B+8HH;A+B98HG;;EAEE,YAAA;C/Bg9HL;A+B58HK;;;;EAEE,YAAA;C/Bg9HP;A+Bx8HD;EACE,uBAAA;EACA,sBAAA;C/B08HD;A+B58HD;EAKI,eAAA;C/B08HH;A+Bz8HG;;EAEE,YAAA;EACA,8BAAA;C/B28HL;A+Bp9HD;EAcI,eAAA;C/By8HH;A+Bv9HD;EAmBM,eAAA;C/Bu8HL;A+Br8HK;;EAEE,YAAA;EACA,8BAAA;C/Bu8HP;A+Bn8HK;;;EAGE,YAAA;EACA,0BAAA;C/Bq8HP;A+Bj8HK;;;EAGE,YAAA;EACA,8BAAA;C/Bm8HP;A+B3+HD;EA+CI,mBAAA;C/B+7HH;A+B97HG;;EAEE,uBAAA;C/Bg8HL;A+Bl/HD;EAqDM,uBAAA;C/Bg8HL;A+Br/HD;;EA2DI,sBAAA;C/B87HH;A+Bx7HK;;;EAGE,0BAAA;EACA,YAAA;C/B07HP;A+Bn5HC;EAwBF;IAvDU,sBAAA;G/Bs7HP;E+B/3HH;IApDU,0BAAA;G/Bs7HP;E+Bl4HH;IAjDU,eAAA;G/Bs7HP;E+Br7HO;;IAEE,YAAA;IACA,8BAAA;G/Bu7HT;E+Bn7HO;;;IAGE,YAAA;IACA,0BAAA;G/Bq7HT;E+Bj7HO;;;IAGE,YAAA;IACA,8BAAA;G/Bm7HT;CACF;A+B3hID;EA+GI,eAAA;C/B+6HH;A+B96HG;EACE,YAAA;C/Bg7HL;A+BjiID;EAsHI,eAAA;C/B86HH;A+B76HG;;EAEE,YAAA;C/B+6HL;A+B36HK;;;;EAEE,YAAA;C/B+6HP;AkCzjJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2jJD;AkChkJD;EAQI,sBAAA;ClC2jJH;AkCnkJD;EAWM,kBAAA;EACA,eAAA;EACA,YAAA;ClC2jJL;AkCxkJD;EAkBI,eAAA;ClCyjJH;AmC7kJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+kJD;AmCnlJD;EAOI,gBAAA;CnC+kJH;AmCtlJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,kBAAA;CnCglJL;AmC9kJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2lJJ;AmC7kJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwmJJ;AmCxkJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC4kJL;AmCtkJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2kJL;AmCloJD;;;;;;EAkEM,eAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;CnCwkJL;AmC/jJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8oJL;AoC5oJG;;ERKF,+BAAA;EACG,4BAAA;C5B2oJJ;AoC3oJG;;ERTF,gCAAA;EACG,6BAAA;C5BwpJJ;AmC1kJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8pJL;AoC5pJG;;ERKF,+BAAA;EACG,4BAAA;C5B2pJJ;AoC3pJG;;ERTF,gCAAA;EACG,6BAAA;C5BwqJJ;AqC3qJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6qJD;AqCjrJD;EAOI,gBAAA;CrC6qJH;AqCprJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrC8qJL;AqC5rJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6qJL;AqCjsJD;;EA2BM,aAAA;CrC0qJL;AqCrsJD;;EAkCM,YAAA;CrCuqJL;AqCzsJD;;;;EA2CM,eAAA;EACA,uBAAA;EACA,oBAAA;CrCoqJL;AsCltJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCotJD;AsChtJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtCktJL;AsC7sJC;EACE,cAAA;CtC+sJH;AsC3sJC;EACE,mBAAA;EACA,UAAA;CtC6sJH;AsCtsJD;ECtCE,0BAAA;CvC+uJD;AuC5uJG;;EAEE,0BAAA;CvC8uJL;AsCzsJD;EC1CE,0BAAA;CvCsvJD;AuCnvJG;;EAEE,0BAAA;CvCqvJL;AsC5sJD;EC9CE,0BAAA;CvC6vJD;AuC1vJG;;EAEE,0BAAA;CvC4vJL;AsC/sJD;EClDE,0BAAA;CvCowJD;AuCjwJG;;EAEE,0BAAA;CvCmwJL;AsCltJD;ECtDE,0BAAA;CvC2wJD;AuCxwJG;;EAEE,0BAAA;CvC0wJL;AsCrtJD;EC1DE,0BAAA;CvCkxJD;AuC/wJG;;EAEE,0BAAA;CvCixJL;AwCnxJD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCqxJD;AwClxJC;EACE,cAAA;CxCoxJH;AwChxJC;EACE,mBAAA;EACA,UAAA;CxCkxJH;AwC/wJC;;EAEE,OAAA;EACA,iBAAA;CxCixJH;AwC5wJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxC8wJL;AwCzwJC;;EAEE,eAAA;EACA,uBAAA;CxC2wJH;AwCxwJC;EACE,aAAA;CxC0wJH;AwCvwJC;EACE,kBAAA;CxCywJH;AwCtwJC;EACE,iBAAA;CxCwwJH;AyCl0JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo0JD;AyCz0JD;;EASI,eAAA;CzCo0JH;AyC70JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm0JH;AyCl1JD;EAmBI,0BAAA;CzCk0JH;AyC/zJC;;EAEE,mBAAA;EACA,mBAAA;EACA,oBAAA;CzCi0JH;AyC31JD;EA8BI,gBAAA;CzCg0JH;AyC9yJD;EACA;IAfI,kBAAA;IACA,qBAAA;GzCg0JD;EyC9zJC;;IAEE,mBAAA;IACA,oBAAA;GzCg0JH;EyCvzJH;;IAJM,gBAAA;GzC+zJH;CACF;A0C52JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL8rJT;A0Cx3JD;;EAaI,kBAAA;EACA,mBAAA;C1C+2JH;A0C32JC;;;EAGE,sBAAA;C1C62JH;A0Cl4JD;EA0BI,aAAA;EACA,eAAA;C1C22JH;A2Cp4JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Cs4JD;A2C14JD;EAQI,cAAA;EAEA,eAAA;C3Co4JH;A2C94JD;EAeI,kBAAA;C3Ck4JH;A2Cj5JD;;EAqBI,iBAAA;C3Cg4JH;A2Cr5JD;EAyBI,gBAAA;C3C+3JH;A2Cv3JD;;EAEE,oBAAA;C3Cy3JD;A2C33JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cy3JH;A2Cj3JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C26JD;A2Ct3JD;EClDI,0BAAA;C5C26JH;A2Cz3JD;EC/CI,eAAA;C5C26JH;A2Cx3JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cs7JD;A2C73JD;ECtDI,0BAAA;C5Cs7JH;A2Ch4JD;ECnDI,eAAA;C5Cs7JH;A2C/3JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Ci8JD;A2Cp4JD;EC1DI,0BAAA;C5Ci8JH;A2Cv4JD;ECvDI,eAAA;C5Ci8JH;A2Ct4JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C48JD;A2C34JD;EC9DI,0BAAA;C5C48JH;A2C94JD;EC3DI,eAAA;C5C48JH;A6C98JD;EACE;IAAQ,4BAAA;G7Ci9JP;E6Ch9JD;IAAQ,yBAAA;G7Cm9JP;CACF;A6Ch9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6Cx9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6C98JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CL26JT;A6C78JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL+zJT;A6C18JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C88JD;A6Cv8JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLu/JT;A6Cp8JD;EErEE,0BAAA;C/C4gKD;A+CzgKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C49JH;A6Cx8JD;EEzEE,0BAAA;C/CohKD;A+CjhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co+JH;A6C58JD;EE7EE,0BAAA;C/C4hKD;A+CzhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C4+JH;A6Ch9JD;EEjFE,0BAAA;C/CoiKD;A+CjiKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co/JH;AgD5iKD;EAEE,iBAAA;ChD6iKD;AgD3iKC;EACE,cAAA;ChD6iKH;AgDziKD;;EAEE,QAAA;EACA,iBAAA;ChD2iKD;AgDxiKD;EACE,eAAA;ChD0iKD;AgDviKD;EACE,eAAA;ChDyiKD;AgDtiKC;EACE,gBAAA;ChDwiKH;AgDpiKD;;EAEE,mBAAA;ChDsiKD;AgDniKD;;EAEE,oBAAA;ChDqiKD;AgDliKD;;;EAGE,oBAAA;EACA,oBAAA;ChDoiKD;AgDjiKD;EACE,uBAAA;ChDmiKD;AgDhiKD;EACE,uBAAA;ChDkiKD;AgD9hKD;EACE,cAAA;EACA,mBAAA;ChDgiKD;AgD1hKD;EACE,gBAAA;EACA,iBAAA;ChD4hKD;AiDnlKD;EAEE,oBAAA;EACA,gBAAA;CjDolKD;AiD5kKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjD6kKD;AiD1kKC;ErB3BA,6BAAA;EACC,4BAAA;C5BwmKF;AiD3kKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BqmKF;AiDpkKD;;EAEE,YAAA;CjDskKD;AiDxkKD;;EAKI,YAAA;CjDukKH;AiDnkKC;;;;EAEE,sBAAA;EACA,YAAA;EACA,0BAAA;CjDukKH;AiDnkKD;EACE,YAAA;EACA,iBAAA;CjDqkKD;AiDhkKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDkkKH;AiDvkKC;;;EASI,eAAA;CjDmkKL;AiD5kKC;;;EAYI,eAAA;CjDqkKL;AiDhkKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDkkKH;AiDxkKC;;;;;;;;;EAYI,eAAA;CjDukKL;AiDnlKC;;;EAeI,eAAA;CjDykKL;AkD3qKC;EACE,eAAA;EACA,0BAAA;ClD6qKH;AkD3qKG;;EAEE,eAAA;ClD6qKL;AkD/qKG;;EAKI,eAAA;ClD8qKP;AkD3qKK;;;;EAEE,eAAA;EACA,0BAAA;ClD+qKP;AkD7qKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDkrKP;AkDxsKC;EACE,eAAA;EACA,0BAAA;ClD0sKH;AkDxsKG;;EAEE,eAAA;ClD0sKL;AkD5sKG;;EAKI,eAAA;ClD2sKP;AkDxsKK;;;;EAEE,eAAA;EACA,0BAAA;ClD4sKP;AkD1sKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD+sKP;AkDruKC;EACE,eAAA;EACA,0BAAA;ClDuuKH;AkDruKG;;EAEE,eAAA;ClDuuKL;AkDzuKG;;EAKI,eAAA;ClDwuKP;AkDruKK;;;;EAEE,eAAA;EACA,0BAAA;ClDyuKP;AkDvuKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD4uKP;AkDlwKC;EACE,eAAA;EACA,0BAAA;ClDowKH;AkDlwKG;;EAEE,eAAA;ClDowKL;AkDtwKG;;EAKI,eAAA;ClDqwKP;AkDlwKK;;;;EAEE,eAAA;EACA,0BAAA;ClDswKP;AkDpwKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDywKP;AiDxqKD;EACE,cAAA;EACA,mBAAA;CjD0qKD;AiDxqKD;EACE,iBAAA;EACA,iBAAA;CjD0qKD;AmDpyKD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL6uKT;AmDnyKD;EACE,cAAA;CnDqyKD;AmDhyKD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5BuzKF;AmDtyKD;EAMI,eAAA;CnDmyKH;AmD9xKD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDgyKD;AmDpyKD;;;;;EAWI,eAAA;CnDgyKH;AmD3xKD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bs0KF;AmDrxKD;;EAGI,iBAAA;CnDsxKH;AmDzxKD;;EAMM,oBAAA;EACA,iBAAA;CnDuxKL;AmDnxKG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B61KF;AmDjxKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5B21KF;AmD1yKD;EvB1DE,2BAAA;EACC,0BAAA;C5Bu2KF;AmD7wKD;EAEI,oBAAA;CnD8wKH;AmD3wKD;EACE,oBAAA;CnD6wKD;AmDrwKD;;;EAII,iBAAA;CnDswKH;AmD1wKD;;;EAOM,mBAAA;EACA,oBAAA;CnDwwKL;AmDhxKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B63KF;AmDrxKD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDwwKP;AmD5xKD;;;;;;;;EAwBU,4BAAA;CnD8wKT;AmDtyKD;;;;;;;;EA4BU,6BAAA;CnDoxKT;AmDhzKD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bq5KF;AmDrzKD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDkxKP;AmD5zKD;;;;;;;;EA8CU,+BAAA;CnDwxKT;AmDt0KD;;;;;;;;EAkDU,gCAAA;CnD8xKT;AmDh1KD;;;;EA2DI,2BAAA;CnD2xKH;AmDt1KD;;EA+DI,cAAA;CnD2xKH;AmD11KD;;EAmEI,UAAA;CnD2xKH;AmD91KD;;;;;;;;;;;;EA0EU,eAAA;CnDkyKT;AmD52KD;;;;;;;;;;;;EA8EU,gBAAA;CnD4yKT;AmD13KD;;;;;;;;EAuFU,iBAAA;CnD6yKT;AmDp4KD;;;;;;;;EAgGU,iBAAA;CnD8yKT;AmD94KD;EAsGI,UAAA;EACA,iBAAA;CnD2yKH;AmDjyKD;EACE,oBAAA;CnDmyKD;AmDpyKD;EAKI,iBAAA;EACA,mBAAA;CnDkyKH;AmDxyKD;EASM,gBAAA;CnDkyKL;AmD3yKD;EAcI,iBAAA;CnDgyKH;AmD9yKD;;EAkBM,2BAAA;CnDgyKL;AmDlzKD;EAuBI,cAAA;CnD8xKH;AmDrzKD;EAyBM,8BAAA;CnD+xKL;AmDxxKD;EC1PE,mBAAA;CpDqhLD;AoDnhLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDqhLH;AoDxhLC;EAMI,uBAAA;CpDqhLL;AoD3hLC;EASI,eAAA;EACA,0BAAA;CpDqhLL;AoDlhLC;EAEI,0BAAA;CpDmhLL;AmDvyKD;EC7PE,sBAAA;CpDuiLD;AoDriLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpDuiLH;AoD1iLC;EAMI,0BAAA;CpDuiLL;AoD7iLC;EASI,eAAA;EACA,uBAAA;CpDuiLL;AoDpiLC;EAEI,6BAAA;CpDqiLL;AmDtzKD;EChQE,sBAAA;CpDyjLD;AoDvjLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDyjLH;AoD5jLC;EAMI,0BAAA;CpDyjLL;AoD/jLC;EASI,eAAA;EACA,0BAAA;CpDyjLL;AoDtjLC;EAEI,6BAAA;CpDujLL;AmDr0KD;ECnQE,sBAAA;CpD2kLD;AoDzkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2kLH;AoD9kLC;EAMI,0BAAA;CpD2kLL;AoDjlLC;EASI,eAAA;EACA,0BAAA;CpD2kLL;AoDxkLC;EAEI,6BAAA;CpDykLL;AmDp1KD;ECtQE,sBAAA;CpD6lLD;AoD3lLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6lLH;AoDhmLC;EAMI,0BAAA;CpD6lLL;AoDnmLC;EASI,eAAA;EACA,0BAAA;CpD6lLL;AoD1lLC;EAEI,6BAAA;CpD2lLL;AmDn2KD;ECzQE,sBAAA;CpD+mLD;AoD7mLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD+mLH;AoDlnLC;EAMI,0BAAA;CpD+mLL;AoDrnLC;EASI,eAAA;EACA,0BAAA;CpD+mLL;AoD5mLC;EAEI,6BAAA;CpD6mLL;AqD7nLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD+nLD;AqDpoLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD+nLH;AqD1nLD;EACE,uBAAA;CrD4nLD;AqDxnLD;EACE,oBAAA;CrD0nLD;AsDrpLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CLgmLT;AsD/pLD;EASI,mBAAA;EACA,kCAAA;CtDypLH;AsDppLD;EACE,cAAA;EACA,mBAAA;CtDspLD;AsDppLD;EACE,aAAA;EACA,mBAAA;CtDspLD;AuD5qLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBqrLD;AuD7qLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB6rLD;AuDzqLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvD2qLH;AwDhsLD;EACE,iBAAA;CxDksLD;AwD9rLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD6rLD;AwD1rLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL6gLT;AwDhsLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLwlLT;AwDpsLD;EACE,mBAAA;EACA,iBAAA;CxDssLD;AwDlsLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDosLD;AwDhsLD;EACE,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDksLD;AwD9rLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxDgsLD;AwD9rLC;ElCrEA,WAAA;EAGA,yBAAA;CtBowLD;AwDjsLC;ElCtEA,aAAA;EAGA,0BAAA;CtBwwLD;AwDhsLD;EACE,cAAA;EACA,iCAAA;CxDksLD;AwD9rLD;EACE,iBAAA;CxDgsLD;AwD5rLD;EACE,UAAA;EACA,wBAAA;CxD8rLD;AwDzrLD;EACE,mBAAA;EACA,cAAA;CxD2rLD;AwDvrLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDyrLD;AwD5rLD;EAQI,iBAAA;EACA,iBAAA;CxDurLH;AwDhsLD;EAaI,kBAAA;CxDsrLH;AwDnsLD;EAiBI,eAAA;CxDqrLH;AwDhrLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDkrLD;AwDhqLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD+qLD;EwD7qLD;InDvEA,kDAAA;IACQ,0CAAA;GLuvLP;EwD5qLD;IAAY,aAAA;GxD+qLX;CACF;AwD1qLD;EAFE;IAAY,aAAA;GxDgrLX;CACF;AyD/zLD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBs1LD;AyD30LC;EnCdA,aAAA;EAGA,0BAAA;CtB01LD;AyD90LC;EAAW,iBAAA;EAAmB,eAAA;CzDk1L/B;AyDj1LC;EAAW,iBAAA;EAAmB,eAAA;CzDq1L/B;AyDp1LC;EAAW,gBAAA;EAAmB,eAAA;CzDw1L/B;AyDv1LC;EAAW,kBAAA;EAAmB,eAAA;CzD21L/B;AyDv1LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzDy1LD;AyDr1LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDu1LD;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;A2Dl7LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,uBAAA;EACA,qCAAA;UAAA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLk5LT;A2D77LC;EAAY,kBAAA;C3Dg8Lb;A2D/7LC;EAAY,kBAAA;C3Dk8Lb;A2Dj8LC;EAAY,iBAAA;C3Do8Lb;A2Dn8LC;EAAY,mBAAA;C3Ds8Lb;A2Dn8LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Dq8LD;A2Dl8LD;EACE,kBAAA;C3Do8LD;A2D57LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D87LH;A2D37LD;EACE,mBAAA;C3D67LD;A2D37LD;EACE,mBAAA;EACA,YAAA;C3D67LD;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;C3D47LL;A2Dz7LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;C3D47LL;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,0BAAA;C3D47LL;A2Dx7LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D07LH;A2Dz7LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,wBAAA;EACA,cAAA;C3D27LL;A4DpjMD;EACE,mBAAA;C5DsjMD;A4DnjMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DqjMD;A4DxjMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLy4LT;A4D/jMD;;EAcM,eAAA;C5DqjML;A4D3hMC;EA4NF;IvD3DE,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL86LP;E4DzjMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D4jML;E4D1jMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D6jML;E4D3jMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D8jML;CACF;A4DpmMD;;;EA6CI,eAAA;C5D4jMH;A4DzmMD;EAiDI,QAAA;C5D2jMH;A4D5mMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5D0jMH;A4DlnMD;EA4DI,WAAA;C5DyjMH;A4DrnMD;EA+DI,YAAA;C5DyjMH;A4DxnMD;;EAmEI,QAAA;C5DyjMH;A4D5nMD;EAuEI,YAAA;C5DwjMH;A4D/nMD;EA0EI,WAAA;C5DwjMH;A4DhjMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;C5DmjMD;A4D9iMC;EdnGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CopMH;A4DljMC;EACE,WAAA;EACA,SAAA;EdxGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C6pMH;A4DpjMC;;EAEE,WAAA;EACA,YAAA;EACA,sBAAA;EtCvHF,aAAA;EAGA,0BAAA;CtB4qMD;A4DtlMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DqjMH;A4DhmMD;;EA+CI,UAAA;EACA,mBAAA;C5DqjMH;A4DrmMD;;EAoDI,WAAA;EACA,oBAAA;C5DqjMH;A4D1mMD;;EAyDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DqjMH;A4DhjMG;EACE,iBAAA;C5DkjML;A4D9iMG;EACE,iBAAA;C5DgjML;A4DtiMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DwiMD;A4DjjMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D8hMH;A4D7jMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;C5D8hMH;A4DvhMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5DyhMD;A4DxhMC;EACE,kBAAA;C5D0hMH;A4Dj/LD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DmhMH;E4D3hMD;;IAYI,mBAAA;G5DmhMH;E4D/hMD;;IAgBI,oBAAA;G5DmhMH;E4D9gMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5DghMD;E4D5gMD;IACE,aAAA;G5D8gMD;CACF;A6D7wMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7D6yMH;A6D3yMC;;;;;;;;;;;;;;;;EACE,YAAA;C7D4zMH;AiCp0MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D+0MD;AiCt0MD;EACE,wBAAA;CjCw0MD;AiCt0MD;EACE,uBAAA;CjCw0MD;AiCh0MD;EACE,yBAAA;CjCk0MD;AiCh0MD;EACE,0BAAA;CjCk0MD;AiCh0MD;EACE,mBAAA;CjCk0MD;AiCh0MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/D41MD;AiC9zMD;EACE,yBAAA;CjCg0MD;AiCzzMD;EACE,gBAAA;CjC2zMD;AgE51MD;EACE,oBAAA;ChE81MD;AgEx1MD;;;;ECdE,yBAAA;CjE42MD;AgEv1MD;;;;;;;;;;;;EAYE,yBAAA;ChEy1MD;AgEl1MD;EA6IA;IC7LE,0BAAA;GjEs4MC;EiEr4MD;IAAU,0BAAA;GjEw4MT;EiEv4MD;IAAU,8BAAA;GjE04MT;EiEz4MD;;IACU,+BAAA;GjE44MT;CACF;AgE51MD;EAwIA;IA1II,0BAAA;GhEk2MD;CACF;AgE51MD;EAmIA;IArII,2BAAA;GhEk2MD;CACF;AgE51MD;EA8HA;IAhII,iCAAA;GhEk2MD;CACF;AgE31MD;EAwHA;IC7LE,0BAAA;GjEo6MC;EiEn6MD;IAAU,0BAAA;GjEs6MT;EiEr6MD;IAAU,8BAAA;GjEw6MT;EiEv6MD;;IACU,+BAAA;GjE06MT;CACF;AgEr2MD;EAmHA;IArHI,0BAAA;GhE22MD;CACF;AgEr2MD;EA8GA;IAhHI,2BAAA;GhE22MD;CACF;AgEr2MD;EAyGA;IA3GI,iCAAA;GhE22MD;CACF;AgEp2MD;EAmGA;IC7LE,0BAAA;GjEk8MC;EiEj8MD;IAAU,0BAAA;GjEo8MT;EiEn8MD;IAAU,8BAAA;GjEs8MT;EiEr8MD;;IACU,+BAAA;GjEw8MT;CACF;AgE92MD;EA8FA;IAhGI,0BAAA;GhEo3MD;CACF;AgE92MD;EAyFA;IA3FI,2BAAA;GhEo3MD;CACF;AgE92MD;EAoFA;IAtFI,iCAAA;GhEo3MD;CACF;AgE72MD;EA8EA;IC7LE,0BAAA;GjEg+MC;EiE/9MD;IAAU,0BAAA;GjEk+MT;EiEj+MD;IAAU,8BAAA;GjEo+MT;EiEn+MD;;IACU,+BAAA;GjEs+MT;CACF;AgEv3MD;EAyEA;IA3EI,0BAAA;GhE63MD;CACF;AgEv3MD;EAoEA;IAtEI,2BAAA;GhE63MD;CACF;AgEv3MD;EA+DA;IAjEI,iCAAA;GhE63MD;CACF;AgEt3MD;EAyDA;ICrLE,yBAAA;GjEs/MC;CACF;AgEt3MD;EAoDA;ICrLE,yBAAA;GjE2/MC;CACF;AgEt3MD;EA+CA;ICrLE,yBAAA;GjEggNC;CACF;AgEt3MD;EA0CA;ICrLE,yBAAA;GjEqgNC;CACF;AgEn3MD;ECnJE,yBAAA;CjEygND;AgEh3MD;EA4BA;IC7LE,0BAAA;GjEqhNC;EiEphND;IAAU,0BAAA;GjEuhNT;EiEthND;IAAU,8BAAA;GjEyhNT;EiExhND;;IACU,+BAAA;GjE2hNT;CACF;AgE93MD;EACE,yBAAA;ChEg4MD;AgE33MD;EAqBA;IAvBI,0BAAA;GhEi4MD;CACF;AgE/3MD;EACE,yBAAA;ChEi4MD;AgE53MD;EAcA;IAhBI,2BAAA;GhEk4MD;CACF;AgEh4MD;EACE,yBAAA;ChEk4MD;AgE73MD;EAOA;IATI,iCAAA;GhEm4MD;CACF;AgE53MD;EACA;ICrLE,yBAAA;GjEojNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on