Von Justine Napalang Ответов: 2

Экспорт excel на ASP.NET ничего не происходит никакой ошибки


Я пытаюсь экспортировать данные с моего уровня доступа к данным
но ничего не происходит, никаких ошибок и не экспортируется. довольно трудно понять, что не так, потому что ошибки нет

Что я уже пробовал:

<pre>if (dt.Rows.Count > 0){
          dgv.DataSource = dt;
         dgv.DataBind();

         Response.ClearContent();
         Response.AppendHeader("content-disposition","attachement;filename=transaction.xls");
         Response.ContentType = "application/excel";
         StringWriter stringWritter = new StringWriter();
         HtmlTextWriter htmlTextWritter = new HtmlTextWriter(stringWritter);

        dgv.RenderControl(htmlTextWritter);
        Response.Write(stringWritter.ToString());

        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.SuppressContent = true;
        HttpContext.Current.ApplicationInstance.CompleteRequest();
}

и попробовал это сделать
Html32TextWriter osHtmlTextWritter = new Html32TextWriter(osStringWritter);
       DataTable dt = new DataTable();
       DataGrid dgv = new DataGrid();

       Response.Clear();
       Response.Buffer = false;
       Response.ContentType = "application/vnd.ms-excel";
       Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.xls", "TransactionReport"));
       Response.Charset = "";

       dgv.DataSource = dt;
       dgv.DataBind();

       dgv.RenderControl(osHtmlTextWritter);
       Response.Write("Report Datw:" + DateTime.Now);
       Response.Write(osStringWritter.ToString());
       //Response.End();
       HttpContext.Current.Response.Flush();
       HttpContext.Current.Response.SuppressContent = true;
       HttpContext.Current.ApplicationInstance.CompleteRequest();

      dgv = null;
      osStringWritter = null;
      osHtmlTextWritter = null;

но все равно ничего не происходит, никакой ошибки.
кроме того, в моем gridView есть данные

F-ES Sitecore

Вы ничего не экспортируете в Excel, вы просто отправляете html клиенту. Если клиент является браузером и у пользователя установлен Excel, то браузер заставит Excel попытаться интерпретировать данные в виде электронной таблицы, но если клиент является чем-то другим, это не сработает.

Также попробуйте удалить строку SuppressContent.

Von Justine Napalang

извините я не понял что вы имеете в виду я вроде как новичок в этом деле asp.net

2 Ответов

Рейтинг:
2

OriginalGriff

"Нет ошибки" просто означает, что ничего фатального для приложения не было обнаружено, это не значит, что приложение каким-либо образом делает то, что вы ожидали!

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

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!
И мы не можем помочь вам здесь: ему нужен ваш код, работающий с вашими данными, возможно, в вашей системе, чтобы увидеть, что именно происходит - и у нас нет никакого доступа ни к одному из них.


Рейтинг:
0

Dave Kreskowiak

Вы не создаете книгу Excel. Ваш код записывает HTML в поток ответов с помощью MIME-типа "application/excel". Это не допустимая книга Excel.

Использовать SDK для создания действительного действительного книге Excel, как в инструкции OpenXML SDK или ClosedXML SDK, или похожие, для создания файла рабочей книги и направить, что вместо.


Von Justine Napalang

извините я не понимаю что вы имеете в виду я вроде как новичок в программировании

Dave Kreskowiak

Я не знаю, откуда вы взяли этот код, но это:

StringWriter stringWritter = new StringWriter();
HtmlTextWriter htmlTextWritter = new HtmlTextWriter(stringWritter);
dgv.RenderControl(htmlTextWritter);
Response.Write(stringWritter.ToString());

не генерирует файл validate Excel или что-то еще, что понимает Excel.

Von Justine Napalang

теперь мой код выглядит так
Свойство HttpContext.Тока.Ответ.ClearContent();
Свойство HttpContext.Тока.Ответ.Буфер = false;
Свойство HttpContext.Тока.Ответ.Значение contentType = "применение/донгов.в MS-Excel с";
Свойство HttpContext.Тока.Ответ.AddHeader("Content-Disposition", string.Формат("вложение;имя файла = trans.xls"));
Свойство HttpContext.Тока.Ответ.Кодировка = "";

dgv.Источник данных = ДТ;
dgv.Привязку();
использование (StringWriter sw = new StringWriter())
{
использование (HtmlTextWriter hsw = new HtmlTextWriter(sw))
{

dgv.RenderControl(ТБО);
Свойство HttpContext.Тока.Ответ.Выход.Писать(ув.Метод toString());
Свойство HttpContext.Тока.Ответ.Промывать();
Свойство HttpContext.Тока.ApplicationInstance.CompleteRequest();
}
}

но все равно ничего не происходит. можете ли вы помочь мне с этим? я застрял в этом на 3 дня

Dave Kreskowiak

Даже близко нет. Если вам нужно вызвать RenderControl, вы вообще не генерируете содержимое файла Excel. Вы все еще просто сбрасываете HTML обратно в поток, и клиентский браузер и Excel не будут знать, что с ним делать.

Для создания правильного файла Excel потребуется гораздо больше кода.

Нажмите на первую ссылку в этом списке: https://www.google.com/search?source=hp&ei=6y5bXcrFFJGJggev66vQBg&q=OpenXML+sdk&oq=OpenXML+sdk&gs_l=psy-ab.3..0l10.498.14221..16198...10.0..0.129.1845.9j9......0....1..gws-wiz.....10..35i39j0i131j0i10.4G7vwttdk9k&ved=0ahUKEwiK57nFiZDkAhWRhOAKHa_1Cmoq4dudcac&uact=5

Von Justine Napalang

почему код обучающие ролики на YouTube посмотреть как это и его работа

Dave Kreskowiak

Спросите парня, который написал учебник.

Von Justine Napalang

не волнуйтесь, вам просто нужно сделать полный пост назад , кстати, спасибо