Сохранение Excel в клиентской машине с использованием Interop

Я использую Interop Excel для автоматизации excel в моем коде С#, но во время его сохранения я хочу, чтобы он выдавал пользователю всплывающее окно (точно так же, как мы получаем, когда загружаем файл из Интернета с возможностью открытия и сохранения)

Я пробовал следующее, но он сохраняет его только на жестком диске сервера.

xlWorksheet.Save();
xlWorksheet.SaveAs(parameters);

кто-нибудь может предложить, что можно сделать (пожалуйста, смотрите: я не хочу использовать файловый поток)


person 1Mayur    schedule 03.11.2011    source источник
comment
Это веб-сайт или настольное приложение?   -  person Eduardo Molteni    schedule 03.11.2011
comment
Это веб-сайт, использующий asp.net-mvc   -  person 1Mayur    schedule 03.11.2011


Ответы (3)


Вам необходимо инициировать загрузку файла после сохранения файла на сервере

public FilePathResult GetFile()
{
    string name = System.IO.Path.GetTempPath()+Guid.NewGuid().ToString()+".xls";
    // do the work
    xlWorksheet.Save(name);
    return File(name, "Application/x-msexcel");
}

Отредактировано для сохранения файла во временной папке. Имейте в виду, что это не гарантирует очистку файла.

person Eduardo Molteni    schedule 03.11.2011
comment
Я думаю, он также сначала сохранится на сервере. Есть ли способ сохранить его во временной папке сервера, чтобы его можно было автоматически удалить во время сеанса обслуживания? - person 1Mayur; 03.11.2011
comment
Вы можете сохранить файл в поток памяти, если вы не хотите иметь дело с временными файлами, но вы говорите, что НЕ хотите использовать потоки .... - person Eduardo Molteni; 03.11.2011
comment
Отредактировано, чтобы сохранить файл во временной папке - person Eduardo Molteni; 03.11.2011
comment
Это было действительно полезно. Наверно на серверах периодически чистят временную папку, да? - person 1Mayur; 04.11.2011
comment
Обратитесь к ИТ-специалистам или внедрите процедуру очистки файлов старше 1 дня или что-то в этом роде. - person Eduardo Molteni; 04.11.2011

Я не знаю, поможет ли это вам. Но однажды я написал WebService, который возвращает мой xls в виде массива байтов, и мое клиентское приложение анализирует его обратно в xls.

public byte[] doSomething() { 
   try {
      var xl = new ExcelWorksheet();
      //...blablabla...
      xl.SaveAs(parameters...);
      if (File.Exists(pathOfXlsDoc)) return File.ReadAllBytes(pathOfXlsDoc);
      return null;
   } finally {
      if (File.Exists) File.Delete(pathOfXlsDoc);
   }
}


----------

В клиентском приложении это выглядит так:

private void BuildXls() {
   try {
      File.WriteAllBytes(clientsXlsPath, doSomething());
   } catch (Exception e) {
      throw new Exception("Error!", e);
   }
}
person kyjan    schedule 03.11.2011
comment
В этом случае он также должен быть сначала создан на жестком диске сервера. если это временная папка сервера, то есть вероятность, что она будет периодически удаляться как часть графика обслуживания. - person 1Mayur; 03.11.2011

вы, вероятно, ищете диалоговое окно сохранения/открытия файла, подобное этому: http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog%28v=VS.85%29.aspx они откройте диалоговое окно с вопросом, где сохранить файл, и после того, как вы выберете место, эта информация вернется в вашу программу, чтобы вы могли сохранить файл там.

person Alex    schedule 03.11.2011
comment
Это веб-сайт, а не приложение WinForm - person 1Mayur; 03.11.2011