Как программно выполнить пункт меню «Экспорт таблицы» в C #? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь выяснить, можно ли программно вызвать пункт меню " Экспорт таблицы ", который появляется, когда пользователь щелкает правой кнопкой мыши визуализацию таблицы в WebPlayer.

Причина, по которой я пытаюсь это сделать, заключается в том, что я пытаюсь разработать расширение CustomTool C # для загрузки данных, которые в настоящее время отображаются на карте . Для этого текущая реализация преобразует диаграмму Map в таблицу, чтобы я мог вызвать ее метод ExportData. Однако этот метод требует FileStream, который требует путь. Если я использую текущую реализацию, логика пытается сохранить полученный файл на сервере WebPlayer, а не передавать его в браузер пользователя.

Так что я думаю, есть ли способ выполнить пункт контекстного меню «Экспорт таблицы», который уже встроен в Spotfire WebPlayer из кода. Этот метод загружает полученный файл Excel для пользователя (т. Е. Обычное поведение загрузки из браузера)

enter image description here

Текущий фрагмент кода в моем CustomTool:

protected override void ExecuteCore(VisualContent map)
{
    map.Transactions.BeginAggregatedTransaction();

    var doc = map.Context.GetAncestor<Document>();
    AggregatedTransactionHandle transaction = doc.Transactions.BeginAggregatedTransaction();

    doc.Transactions.ExecuteTransaction(delegate
    {
       var visual = map.Visual;
       visual.TypeId = VisualTypeIdentifiers.Table;
       var table = visual.As<TablePlot>();

       var dm = doc.Data.Markings.DefaultMarkingReference;
       table.Data.Filterings.Add(dm);

       var pathWithEnv = @"%UserProfile%\Desktop\ExportData.xls";
       var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);

       if (!Directory.Exists(filePath))
       {
           Directory.CreateDirectory(filePath);
       }

       using (FileStream stream = File.Open(filePath, FileMode.Create))
       {
           table.ExportData(DataWriterTypeIdentifiers.ExcelXlsDataWriter, stream);
       }
   });

transaction.Rollback();
}
...