Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как определить ошибку при выводе в EXCEL / 8 сообщений из 8, страница 1 из 1
05.07.2013, 11:41
    #38321634
Vas_i_lisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
Всем доброго дня.
Сразу хочу сказать, что с 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?

Спасибо.
...
Рейтинг: 0 / 0
05.07.2013, 12:01
    #38321672
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
...
Рейтинг: 0 / 0
05.07.2013, 12:19
    #38321703
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
Vas_i_lisaВариант с RenderControl не подходит, т.к. в случае многостраничного грида выводится только текущая страница.


.

... выводите при экспорте грид в другой странице без пейджинга, да и рендерите ... А потом - домой ....
...
Рейтинг: 0 / 0
05.07.2013, 13:13
    #38321789
Vas_i_lisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
carrotik,

Это уже пройденный этап. В связи с большими объемами данных (100 000 записей - это "не очень много", как считает заказчик), без пейджинга грид не биндится - выдается сообщение:


Ошибка HTTP 404.13 - Not Found
Модуль фильтрации запросов настроен для блокировки запросов, длина содержимого которых превосходит установленный предел.



Попытка добавить в web.config блок

<system.webServer>
...
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="102400000"></requestLimits>
</requestFiltering>
</security>
...
</system.webServer>


приводит к катастрофическому замедлению работы всей системы. Потому и ищу другие варианты.
Но за ответ все равно спасибо.
...
Рейтинг: 0 / 0
05.07.2013, 13:22
    #38321804
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
Vas_i_lisa,

если б не было объединенных ячеек в теле данных экселя, я бы вам посоветовал работать с екселькой, как с базой данной, через ADO. давненько как-то так и работал, очень даже шустро, по сравнению с другими методами разница в скорости различается даже не в десятки раз, а больше.
...
Рейтинг: 0 / 0
05.07.2013, 13:28
    #38321815
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
Vas_i_lisa,

...может быть, через XML попробуете?

http://aspalliance.com/471_Convert_XML_To_an_Excel_Spreadsheet_Using_XSL.all
...
Рейтинг: 0 / 0
05.07.2013, 13:34
    #38321824
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
.. так это что, и Эксель генерится с сотней тысяч строк? .. изрядно ....
...
Рейтинг: 0 / 0
05.07.2013, 15:42
    #38322086
Vas_i_lisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить ошибку при выводе в EXCEL
carrotik,

"так это что, и Эксель генерится с сотней тысяч строк? " - да.

И как они собираются работать в EXCEL с таким объемом - ума не приложу.
Но наше дело подневольное...
Спасибо за ссылку. попробую разобраться.

Большое Вам спасибо за ответы.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как определить ошибку при выводе в EXCEL / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]