Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Bravo.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<PackageReference Include="Dax.Vpax" Version="1.12.0" />
<PackageReference Include="Dax.Vpax.Obfuscator" Version="1.2.1" />
<PackageReference Include="Hellang.Middleware.ProblemDetails" Version="6.5.1" />
<PackageReference Include="LargeXlsx" Version="1.10.0" />
<PackageReference Include="LargeXlsx" Version="2.0.1" />
<PackageReference Include="Macross.Json.Extensions" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.22.0" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2739.15" />
Expand Down
8 changes: 2 additions & 6 deletions src/Controllers/ExportDataController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,9 @@ public async Task<IActionResult> ExportDelimitedTextFile(ExportDelimitedTextFrom
[ProducesDefaultResponseType]
public IActionResult ExportExcelFile(ExportExcelFromPBIReportRequest request, CancellationToken cancellationToken)
{
var useZip64 = CommonHelper.IsKeyDown(System.Windows.Forms.Keys.ControlKey);

if (WindowDialogHelper.SaveFileDialog(fileName: request.Report!.ReportName, filter: null, defaultExt: "XLSX", out var path, cancellationToken))
{
var job = _exportDataService.ExportExcelFile(request.Report, request.Settings!, path, useZip64, cancellationToken);
var job = _exportDataService.ExportExcelFile(request.Report, request.Settings!, path, cancellationToken);
return Ok(job);
}

Expand All @@ -132,14 +130,12 @@ public IActionResult ExportExcelFile(ExportExcelFromPBIReportRequest request, Ca
[ProducesDefaultResponseType]
public async Task<IActionResult> ExportExcelFile(ExportExcelFromPBICloudDatasetRequest request, CancellationToken cancellationToken)
{
var useZip64 = CommonHelper.IsKeyDown(System.Windows.Forms.Keys.ControlKey);

if (await _authenticationService.IsPBICloudSignInRequiredAsync(cancellationToken))
return Unauthorized();

if (WindowDialogHelper.SaveFileDialog(fileName: request.Dataset!.DisplayName, filter: null, defaultExt: "XLSX", out var path, cancellationToken))
{
var job = _exportDataService.ExportExcelFile(request.Dataset, request.Settings!, path, _authenticationService.PBICloudAuthentication.AccessToken, useZip64, cancellationToken);
var job = _exportDataService.ExportExcelFile(request.Dataset, request.Settings!, path, _authenticationService.PBICloudAuthentication.AccessToken, cancellationToken);
return Ok(job);
}

Expand Down
23 changes: 8 additions & 15 deletions src/Services/ExportDataService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@

ExportDataJob ExportDelimitedTextFile(PBICloudDataset dataset, ExportDelimitedTextSettings settings, string path, string accessToken, CancellationToken cancellationToken);

ExportDataJob ExportExcelFile(PBIDesktopReport report, ExportExcelSettings settings, string path, bool useZip64, CancellationToken cancellationToken);
ExportDataJob ExportExcelFile(PBIDesktopReport report, ExportExcelSettings settings, string path, CancellationToken cancellationToken);

ExportDataJob ExportExcelFile(PBICloudDataset dataset, ExportExcelSettings settings, string path, string accessToken, bool useZip64, CancellationToken cancellationToken);
ExportDataJob ExportExcelFile(PBICloudDataset dataset, ExportExcelSettings settings, string path, string accessToken, CancellationToken cancellationToken);

ExportDataJob? QueryExportJob(PBIDesktopReport report);

Expand Down Expand Up @@ -110,7 +110,7 @@
return job;
}

public ExportDataJob ExportExcelFile(PBIDesktopReport report, ExportExcelSettings settings, string path, bool useZip64, CancellationToken cancellationToken)
public ExportDataJob ExportExcelFile(PBIDesktopReport report, ExportExcelSettings settings, string path, CancellationToken cancellationToken)
{
settings.ExportPath = path;

Expand All @@ -119,7 +119,7 @@
{
using var connection = AdomdConnectionWrapper.ConnectTo(report);

ExportExcelFileImpl(job, settings, connection, useZip64, cancellationToken);
ExportExcelFileImpl(job, settings, connection, cancellationToken);
job.SetCompleted();
}
catch (OperationCanceledException)
Expand All @@ -139,7 +139,7 @@
return job;
}

public ExportDataJob ExportExcelFile(PBICloudDataset dataset, ExportExcelSettings settings, string path, string accessToken, bool useZip64, CancellationToken cancellationToken)
public ExportDataJob ExportExcelFile(PBICloudDataset dataset, ExportExcelSettings settings, string path, string accessToken, CancellationToken cancellationToken)
{
settings.ExportPath = path;

Expand All @@ -148,7 +148,7 @@
{
using var connection = AdomdConnectionWrapper.ConnectTo(dataset, accessToken);

ExportExcelFileImpl(job, settings, connection, useZip64, cancellationToken);
ExportExcelFileImpl(job, settings, connection, cancellationToken);
job.SetCompleted();
}
catch (OperationCanceledException)
Expand Down Expand Up @@ -303,7 +303,7 @@
}
}

private static void ExportExcelFileImpl(ExportDataJob job, ExportExcelSettings settings, AdomdConnectionWrapper connection, bool useZip64, CancellationToken cancellationToken)
private static void ExportExcelFileImpl(ExportDataJob job, ExportExcelSettings settings, AdomdConnectionWrapper connection, CancellationToken cancellationToken)
{
var xlsxFile = new FileInfo(settings.ExportPath);

Expand All @@ -313,15 +313,8 @@
using var command = connection.CreateAdomdCommand();
using var _ = cancellationToken.Register(() => command.Cancel());

if (useZip64 && AppEnvironment.IsDiagnosticLevelVerbose)
{
// Zip64 is an experimental feature in Bravo that must be explicitly enabled by the user and is not enabled by default because it may create a file that Excel or LibreOffice reports as corrupt.
// See https://github.com/salvois/LargeXlsx/issues/3#issuecomment-867675374 and https://github.com/salvois/LargeXlsx/issues/5#issuecomment-981072044
AppEnvironment.AddDiagnostics(DiagnosticMessageType.Text, name: $"{nameof(ExportDataService)}.{nameof(ExportExcelFileImpl)}", content: $"Experimental feature: useZip64 is enabled");
}

using var fileStream = new FileStream(xlsxFile.FullName, FileMode.Create, FileAccess.Write);
using var xlsxWriter = new XlsxWriter(fileStream, useZip64: useZip64);
using var xlsxWriter = new XlsxWriter(fileStream, compressionLevel: XlsxCompressionLevel.Fastest);

foreach (var (tableName, tableIndex) in settings.Tables.WithIndex())
{
Expand Down Expand Up @@ -534,7 +527,7 @@

foreach (var (tableName, tableIndex) in settings.Tables.WithIndex())
{
var table = job.Tables.Single((t) => t.Name.Equals(tableName));

Check warning on line 530 in src/Services/ExportDataService.cs

View workflow job for this annotation

GitHub Actions / build-and-test

Dereference of a possibly null reference.

Check warning on line 530 in src/Services/ExportDataService.cs

View workflow job for this annotation

GitHub Actions / build-and-test

Dereference of a possibly null reference.
var statusStyle = table.Status == ExportDataStatus.Truncated ? warningStyle : XlsxStyle.Default;
var worksheetName = GetWorksheetName(tableName, tableIndex);

Expand Down
Loading