Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
05.07.2013, 11:41
|
|||
|---|---|---|---|
|
|||
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
Всем доброго дня. Сразу хочу сказать, что с ASP.NET очень на «ВЫ», т.к. всю жизнь проработала с VFP. Так что ответы типа «ГУГЛ в помощь» прошу оставить при себе. Проблема такая. Есть вебприложение. На форме грид с данными. Необходимо вывести в EXCEL данные грида с сохранением сложной шапки и объединенными ячейками в теле грида. Вариант с RenderControl не подходит, т.к. в случае многостраничного грида выводится только текущая страница. Пробую другой способ. Пример нашла в Инете. По отзывам - работающий. -------------------------------------------------------------------------------------------------------------------------- protected void ImButExel_Click(object sender, ImageClickEventArgs e) { System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; string filePath = "c:\\InputValuesExcel.xls"; //Если не существует файла то создать его bool isFileExist; FileInfo fInfo = new FileInfo(filePath); if (!fInfo.Exists) { xlWorkBook = xlApp.Workbooks.Add(misValue);//Добавить новый book в файл isFileExist = false; } else { //Открыть существующий файл xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); isFileExist = true; } //Открытие первой вкладки xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); //Запись значения в самую первую ячейку xlWorkSheet.Cells[1, 1] = "Client Name"; //Получить количество используемых столбцов int columnsCount = xlWorkSheet.UsedRange.Columns.Count; //Получить количество используемых строк int usedRowsCount = xlWorkSheet.UsedRange.Rows.Count; //Проверить значение последней используемой ячейки в последней исползуеймой строке и //последнем используемом столбце. Если значение этой ячейки равно "Привет", изменить его на "Пока". if ((xlWorkSheet.UsedRange.Cells[usedRowsCount, columnsCount] as Microsoft.Office.Interop.Excel.Range).Value2 != null) { if ((xlWorkSheet.UsedRange.Cells[usedRowsCount, columnsCount] as Microsoft.Office.Interop.Excel.Range).Value2.ToString() == "Привет") (xlWorkSheet.UsedRange.Cells[usedRowsCount, columnsCount] as Microsoft.Office.Interop.Excel.Range).Value2 = "Пока"; } //Если файл существовал, просто сохранить его по умолчанию. Иначе сохранить в указанную директорию if (isFileExist) { xlWorkBook.Save(); } else { xlWorkBook.SaveAs(filePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); } xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); //Освобождение ресурсов releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; Console.Write("Exception Occured while releasing object " + ex.ToString()); } finally { GC.Collect(); } } -------------------------------------------------------------------------------------------------------------------------------- Снимается на строке xlWorkBook.SaveAs(filePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); Сообщение Exception from HRESULT: 0x800A03EC. М.б. более светлые головы помогут понять, что я не так делаю. Про то, что "никакого запуска из сервиса интерактивных приложений через COM быть не должно."(с) - знаю. Но какие тогда еще можно использовать варианты? Кроме Reporting Services? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 12:01
|
|||
|---|---|---|---|
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 12:19
|
|||
|---|---|---|---|
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
Vas_i_lisaВариант с RenderControl не подходит, т.к. в случае многостраничного грида выводится только текущая страница. . ... выводите при экспорте грид в другой странице без пейджинга, да и рендерите ... А потом - домой .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 13:13
|
|||
|---|---|---|---|
|
|||
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
carrotik, Это уже пройденный этап. В связи с большими объемами данных (100 000 записей - это "не очень много", как считает заказчик), без пейджинга грид не биндится - выдается сообщение: Ошибка HTTP 404.13 - Not Found Модуль фильтрации запросов настроен для блокировки запросов, длина содержимого которых превосходит установленный предел. Попытка добавить в web.config блок <system.webServer> ... <security> <requestFiltering> <requestLimits maxAllowedContentLength="102400000"></requestLimits> </requestFiltering> </security> ... </system.webServer> приводит к катастрофическому замедлению работы всей системы. Потому и ищу другие варианты. Но за ответ все равно спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 13:22
|
|||
|---|---|---|---|
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
Vas_i_lisa, если б не было объединенных ячеек в теле данных экселя, я бы вам посоветовал работать с екселькой, как с базой данной, через ADO. давненько как-то так и работал, очень даже шустро, по сравнению с другими методами разница в скорости различается даже не в десятки раз, а больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 13:28
|
|||
|---|---|---|---|
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
Vas_i_lisa, ...может быть, через XML попробуете? http://aspalliance.com/471_Convert_XML_To_an_Excel_Spreadsheet_Using_XSL.all ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 13:34
|
|||
|---|---|---|---|
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
.. так это что, и Эксель генерится с сотней тысяч строк? .. изрядно .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.07.2013, 15:42
|
|||
|---|---|---|---|
|
|||
Как определить ошибку при выводе в EXCEL |
|||
|
#18+
carrotik, "так это что, и Эксель генерится с сотней тысяч строк? " - да. И как они собираются работать в EXCEL с таким объемом - ума не приложу. Но наше дело подневольное... Спасибо за ссылку. попробую разобраться. Большое Вам спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=18&mobile=1&tid=1358298]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
81ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 365ms |

| 0 / 0 |
