|
|
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Дорабатываю вэб сайт, проект MVC 3, нужно добавить формирование небольшого файла Excel на основе шаблона и выдачу его пользователю. Эксель на данном вэб серваке стоит (стоял уже). Отчет формируется последством OLE Automation, т.е. Microsoft.Office.Interop.Excel.Application exc = new Application(); exc.DisplayAlerts = false; exc.Workbooks.Open("ТестШаблон.xlt"); exc.Cells[1, 1] = barcode; exc.Run("CreateReport"); Вопрос собственно вот в чем: Делаю вот так: httpResponse.ContentType = "application/vnd.ms-excel"; httpResponse.AddHeader("Content-Disposition inline", "attachment;filename=\"Report.xls\""); using (MemoryStream memoryStream = new MemoryStream()) { exc.ActiveWorkbook.SaveAs(memoryStream); memoryStream.WriteTo(httpResponse.OutputStream); memoryStream.Close(); } httpResponse.End(); специально проверил установив сво-во Visible проверил что отчет нормально формируется, но пользователю отправляется пустой лист, даже не шаблон (без шапки). Если сохраняю не в поток, а в файлик на диске, а затем httpResponse.WriteFile то все ок. Почему может не сохраняться в поток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 07:35 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
гость05052012, memoryS 1) как создается объект httpResponse? 2) Пробовали ли вы сохранить сначала файл на диск, а потом закинуть в респонз (просто в качестве теста конечно)? httpResponse.ContentType = "application/vnd.ms-excel"; httpResponse.WriteFile("~/rep1.xls"); 3) Проверьте еще такую комбинацию: memoryStream.Position = 0; httpResponse.ContentType = "application/vnd.ms-excel"; httpResponse.AddHeader("content-disposition", "attachment; filename=\"rep1.xls\""); httpResponse.BinaryWrite(memoryStream.ToArray()); httResponse.CompleteRequest(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 08:47 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
n3wb13, 1) HttpResponseBase httpResponse = Response; httpResponse.Clear(); 2) Да, так и заработало. Хочу просто от сохранений отказаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 15:58 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
3) httpResponse.CompleteRequest(); // ругается, что такой метод не определен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:31 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
гость05052012, хм, может я чего подзабыл, используйте тогда старый End(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:35 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
n3wb13, Попробовал, так то же самое. Пустой файл выдает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 16:49 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
только сейчас заметил опечатку у вас в 1м сообщении: и inline и attachment одновременно, честно говоря не помню кидает ли в таком случае эксепшены или нет. Хотя раз файл сохраненный на диск отправляется, то видимо такой опечатки в реальном коде нет, или есть? httpResponse.AddHeader("Content-Disposition inline", "attachment;filename=\"Report.xls\""); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2012, 22:20 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
n3wb13, спасибо за ответ. Inline нет в рабочей версии, опечатался. Впечатление такое, что просто эксель в поток не сохраняет. Заметил что после отработки данного кода, в папке мои документы появляется файлик с именем "System.IO.MemoryStream", если к нему приделать расширение XLS, то выясняется что это и есть мой отчет...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 15:34 |
|
||
|
формирование Excel файла
|
|||
|---|---|---|---|
|
#18+
гость05052012, Workbook.SaveAs - метод void SaveAs( Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local ) нигде не указано, что поддерживается сохранение в MemoryStream, в результате он вашу мемориСтрим конвертирует в стринг и сохраняет в папке по умолчанию, т.е. моих документах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2012, 16:02 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=37783922&tid=1359605]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 464ms |

| 0 / 0 |
