Могу ли я определить временный путь к открытой книге Excel?

#c# #asp.net #excel

#c# #asp.net #excel

Вопрос:

Я пытаюсь создать файл Excel из ASP.NET . Я предполагаю, что этот файл создан где-то временно, верно? Как я могу получить это местоположение?

Ответ №1:

Что вы используете для создания файла Excel? Поскольку у вас есть ASP.NET tag Надеюсь, вы не пытаетесь сделать это с помощью Office COM Automation, это не поддерживается и, поверьте мне, это очень, очень ненадежно. Смотрите эту ссылку от Microsoft http://support.microsoft.com/kb/257757

Ключевое сообщение по ссылке

В настоящее время Корпорация Майкрософт не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любого автоматического неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET , Службы DCOM и NT), поскольку Office может демонстрировать нестабильное поведение и / или взаимоблокировку при запуске Office в этой среде.

Я бы посоветовал вам взглянуть на использование библиотеки NPOI, это очень быстро и надежно работает на стороне сервера. И затем вы можете управлять тем, где создается файл.

Комментарии:

1. Что я могу добавить, так это то, что также может быть большая разница между средой разработки и продуктивной системой.

2. я прочитал эту статью, которую вы мне ранее дали!!! я не знаком с NPOI…..is есть какое-либо другое решение???

3. @user726895, не существует решения с использованием Office Automation, которое будет работать надежно. Я бы настоятельно рекомендовал вам взглянуть на NPOI, это действительно не очень сложно запустить, на самом деле проще, чем пробираться через API автоматизации.

Ответ №2:

Если вы используете временный путь или временный файл, вас не должно волновать, где он находится. Если вам нужна осторожность, вы должны использовать конкретный путь с конкретным файлом. Вы также можете использовать MemoryStream, чтобы сделать все это без жесткого диска.

РЕДАКТИРОВАТЬ: В дополнение к комментарию я рекомендую вам использовать Open XML для создания листа Excel. Если это вариант, дайте мне знать, чем я опубликую больше об этом.

Я должен сказать, что я не знал эту статью из сообщения Криса Тейлора, и если бы я нашел это в прошлом году, это сэкономило бы мне много времени. Но что я должен сказать на этом этапе; возможно запустить серверное решение, использующее interop, и оно понадобилось мне в прошлом году. Но это было непросто, пока это не сработало, и если кто-то хочет попробовать, вот несколько советов:

  • вам не следует использовать interop непосредственно из приложения ASP
  • вы не можете использовать олицетворение (это может привести к непредвиденному сбою)
  • вам понадобится служба, которая запускается как System
  • вам нужен исполняемый файл, который запускает взаимодействие
  • вы должны управлять выполнением через службу (и я имею в виду управление, а не просто запуск)

И еще раз; Я не рекомендую этого делать. Используйте любое другое решение, если вы. (MS поддерживает службы автоматизации с SharePoint2010)

Комментарии:

1. я использую Interop. Excel, во время которого я открываю книгу с помощью ‘Excelapp.workbooks.add [1]’ … но на сервере, куда именно он будет записывать данные???

2. Крис Тейлор объясняет все это в своем посте. Я не рекомендую использовать Interop из-за проблем с разрешениями в производственных системах. И если вы все еще хотите его использовать, создайте службу, которая управляет одним или несколькими рабочими процессами, которые заботятся о взаимодействии.