Лучшый способ экспротировать с сервера клиенту Excel file
От: TheAteist  
Дата: 05.10.10 09:07
Оценка:
Мне надо экспротировать с сервера клиенту Excel file.

Я могу воспользоватся Microsoft.Office.Interop.Excel и послать его клиенту через Response.Write. Но этот способ создает COM объекты(Workbook, Excel...) и надо будет их освобождать и вызвать в конце GC.Collect(), иначе Excel объект будет висеть.

2ой способ это создать DataGrid, заполнить его и тоже послать через Response.Write

1ый способ удобен, но мой вопрос — ничего что будут создаватся COM объекты и потом освобаждатся или лучше пользоватся 2ый способом?
Если есть другие предложения, то буду рад услышать
Re: Лучшый способ экспротировать с сервера клиенту Excel fil
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 05.10.10 09:38
Оценка:
Про первый и думать забудь, второй — нормуль.
Re: Лучшый способ экспротировать с сервера клиенту Excel fil
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 05.10.10 09:42
Оценка:
А еще можно попробовать и grid не заполнять, прямиком из DataSet.
типа как здесь
(если решите пробовать обратите внимание на камменты там ниже)
Re[2]: Лучшый способ экспротировать с сервера клиенту Excel
От: TheAteist  
Дата: 05.10.10 09:57
Оценка:
Здравствуйте, маген, Вы писали:

М>Про первый и думать забудь, второй — нормуль.

Про первый не из-за тех причин которые я написал? Если есть и другие причины, буду рад услышать.
Re[3]: Лучшый способ экспротировать с сервера клиенту Excel
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 05.10.10 10:21
Оценка:
TA>Про первый не из-за тех причин которые я написал? Если есть и другие причины, буду рад услышать.

Предоставим слово MS:
Considerations for server-side Automation of Office

...(жирный шрифт)
Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment. ...

Re[3]: Лучшый способ экспротировать с сервера клиенту Excel
От: Pavel_Agurov Россия  
Дата: 05.10.10 10:24
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Здравствуйте, маген, Вы писали:


М>>Про первый и думать забудь, второй — нормуль.

TA>Про первый не из-за тех причин которые я написал? Если есть и другие причины, буду рад услышать.

Я описал про Excel для ASP.NET здесь: ASP.NET. Сборник рецептов. В магазинах она есть.

Причины по которым не хорошо использовать библиотеки Excel для ASP.NET — раздел 15.1.1.

15.1.1. Использование библиотеки MS Excel
Использование библиотек самого Excel предоставляет полный доступ ко всем объектам и всем возможностям приложения и является наиболее полнофункциональным вариантом. С одной стороны, это хороший выбор, но с другой следует помнить о нескольких вещах.
1. Microsoft не рекомендует использовать библиотеки MS Excel на серверной стороне по нескольким причинам (см., например, статью http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2):
а. MS Excel является однопользовательским продуктом и никогда не предназначался и не тестировался в многопоточном режиме работы. При работе в ASP.NET нужно каким-то образом обеспечить однопоточный доступ к методам, работающим с Excel-библиотеками.
б. В случае использования библиотек на серверной стороне существуют некоторые лицензионные ограничения, на которые стоит обратить внимание (см. разд. 15.2 ).
в. MS Excel требует наличия пользователя, регистрационная запись которого будет использоваться для старта приложения. В ASP.NET приложениях таким пользователем будет учетная запись, настроенная в IIS. Замена "настоящего" пользователя "системным" может вызвать непредсказуемые проблемы.
г. В случае каких-либо проблем MS Excel выдает диалоговые окна, означающие необходимость нажать кнопку OK. Установка параметра DisplayAlerts в значение false (см. разд. 15.3.4 ) частично решает эту проблему, но следует помнить, что Microsoft не тестирует библиотеки в режиме отсутствия пользователя и не отвечает за возникающие в процессе непредусмотренного использования проблемы.
д. При открытии документа MS Excel (например, загруженного на сервер через сайт), на серверной стороне могут выполниться макросы, записанные в документе.


Варианты генерации Excel я тоже описал. Вариантов в общем-то много.
1. Если это просто одностраничный документ то можно использовать просто HTML таблицу, в ней в специальном формате пишутся формулы и т.д.
2. Если в документе более одной страницы, то можно использовать XML/Excel или HTML/XML Excel.
3. Можно использовать XML формат MS Office 2007.
4. Можно использовать OLE DB, но это не будет работать на x64, только x32.

Павел.
Re[4]: Лучшый способ экспротировать с сервера клиенту Excel
От: TheAteist  
Дата: 05.10.10 10:27
Оценка:
Здравствуйте, маген, Вы писали:

TA>>Про первый не из-за тех причин которые я написал? Если есть и другие причины, буду рад услышать.


М>Предоставим слово MS:

М>Considerations for server-side Automation of Office
М>

...(жирный шрифт)
М>Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment. ...


Сейчас почитаю.
Кстати есть еще вариант передать все через строку вот так

//конечно будет цикл, который все склеит, но для пример вот так строю строку
string s = "FName, LName, Email" + Environment.NewLine +
               "Igor", "Igor", "mail1"  + Environment.NewLine +
               "Igor2", "Igor2", "mail12"  + Environment.NewLine...

Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=test.csv");
Response.Write(s);

Как насчет такого способа?
Re: Лучшый способ экспротировать с сервера клиенту Excel fil
От: Аноним  
Дата: 05.10.10 10:29
Оценка:
Здравствуйте, TheAteist, Вы писали:

A>Если есть другие предложения, то буду рад услышать


Office Open XML SDK 2.0
Re[5]: Лучшый способ экспротировать с сервера клиенту Excel
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 05.10.10 10:43
Оценка:
TA>Как насчет такого способа?

Ну если результат Вас устраивает, то в чем проблема?
Re[6]: Лучшый способ экспротировать с сервера клиенту Excel
От: TheAteist  
Дата: 05.10.10 10:56
Оценка:
Здравствуйте, маген, Вы писали:


TA>>Как насчет такого способа?


М>Ну если результат Вас устраивает, то в чем проблема?

Склеивание 2000 строк через sting s += "..." или даже через StringBuilder не снизить производительность?
Re[7]: Лучшый способ экспротировать с сервера клиенту Excel
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 05.10.10 11:25
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Здравствуйте, маген, Вы писали:



TA>>>Как насчет такого способа?


М>>Ну если результат Вас устраивает, то в чем проблема?

TA>Склеивание 2000 строк через sting s += "..." или даже через StringBuilder не снизить производительность?

Вообще говоря, склеивать не обязательно, на каждую строку можно вызывать Response.Write.
Этот способ мне представляется максимально быстрым из рассматриваемых, если говорить о производительности.
Re[4]: Лучшый способ экспротировать с сервера клиенту Excel
От: TheAteist  
Дата: 06.10.10 13:56
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

P_A>Варианты генерации Excel я тоже описал. Вариантов в общем-то много.

P_A>1. Если это просто одностраничный документ то можно использовать просто HTML таблицу, в ней в специальном формате пишутся формулы и т.д.
P_A>2. Если в документе более одной страницы, то можно использовать XML/Excel или HTML/XML Excel.
что значит "можно использовать XML/Excel или HTML/XML Excel"?
P_A>3. Можно использовать XML формат MS Office 2007.
ты имеешь ввиду Open xml sdk?
P_A>4. Можно использовать OLE DB, но это не будет работать на x64, только x32.


P_A>Павел.
Re[5]: Лучшый способ экспротировать с сервера клиенту Excel
От: Pavel_Agurov Россия  
Дата: 07.10.10 06:43
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Здравствуйте, Pavel_Agurov, Вы писали:


TA>что значит "можно использовать XML/Excel или HTML/XML Excel"?


Формат XML подразумевает чистый XML:


<?xml version="1.0" ?>
<?mso-application progid="Excel.Sheet"?>
<Workbook 
      xmlns="urn:schemas-microsoft-com:office:spreadsheet"
      xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
  <Worksheet ss:Name="Sheet1">
    <Table>
      <Row ss:Index="1">
        <Cell ss:Index="1">
          <Data ss:Type="Number">1</Data>
        </Cell>
      </Row>
    </Table>
  </Worksheet>
</Workbook>


XML/HTML — это HTML со вставками-командами XML:


<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>

<style>
<!--table
   {mso-displayed-decimal-separator:"\,";
    mso-displayed-thousand-separator:" ";}
@page
   {margin:1.0in .75in 1.0in .75in;
    mso-header-margin:.5in;
    mso-footer-margin:.5in;
    mso-page-orientation:landscape;}
-->
</style>

<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>Report</x:Name>
    <x:WorksheetOptions>
     <x:Print>
      <x:ValidPrinterInfo/>
      <x:PaperSizeIndex>9</x:PaperSizeIndex>
     </x:Print>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>

<body>

<table>
 <tr><td>1</td><td>2</td></tr>
</table>

</body>

</html>




P_A>>3. Можно использовать XML формат MS Office 2007.

TA>ты имеешь ввиду Open xml sdk?
Не обязательно. Есть куча сторонних библиотек, которые пишут в этом формате. SDK из них не самая удобная. Мне понравилась например CarlosAg.ExcelXmlWriter.
Re[7]: Лучшый способ экспротировать с сервера клиенту Excel
От: Аноним  
Дата: 12.10.10 15:15
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Здравствуйте, маген, Вы писали:



TA>>>Как насчет такого способа?


М>>Ну если результат Вас устраивает, то в чем проблема?

TA>Склеивание 2000 строк через sting s += "..." или даже через StringBuilder не снизить производительность?

Мне кажется это будет гораздо быстрее, чем общаться с экселем.
Re: Лучшый способ экспротировать с сервера клиенту Excel fil
От: Горбач Алексей Украина http://gorbach.wordpress.com/
Дата: 12.10.10 15:23
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Мне надо экспротировать с сервера клиенту Excel file.


TA>Я могу воспользоватся Microsoft.Office.Interop.Excel и послать его клиенту через Response.Write. Но этот способ создает COM объекты(Workbook, Excel...) и надо будет их освобождать и вызвать в конце GC.Collect(), иначе Excel объект будет висеть.


TA>2ой способ это создать DataGrid, заполнить его и тоже послать через Response.Write


TA>1ый способ удобен, но мой вопрос — ничего что будут создаватся COM объекты и потом освобаждатся или лучше пользоватся 2ый способом?

TA>Если есть другие предложения, то буду рад услышать

Есть еще компоненты от Aspose, и гриды от DevExrpess тоже умеет экспортировать в эксель. А с автоматизацией лучше не связываться — потярянные нервы и время.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.