Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Export на данни в Exel (asp.net mvc)

Featured Replies

Здравейте,

имам малко затруднение с експортването на данни в ексел.

Отворила съм приложение (asp.net mvc) имам списък от данни и искам да ги експортна в ЕКСЕЛ

public ActionResult ExportDataInEcel()
{
List<Някакъв тип> listToExport = new List<Някакъв тип>();
listToExport = sameData.ToList();

//Как да представя този лист listToExport
for(int i;i<listToExport.Count ;i++)
{
	//преобразуване на listToExport ,така че да го подам като таблица в ексел
}

string exportdata = "<?xml version="1.0"?>" +
						 "<?mso-application progid="Excel.Sheet"?>" +
						 "<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"" +
						 " xmlns:o="urn:schemas-microsoft-com:office:office"" +
						 " xmlns:x="urn:schemas-microsoft-com:office:excel"" +
						 " xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"" +
						 " xmlns:html="[url="http://www.w3.org/TR/REC-html40%22>"]http://www.w3.org/TR.../REC-html40">"[/url] +
						 listToExport+ "</Workbook>"

		 return new DelegatingResult(context =>
		 {
		 	 context.HttpContext.Response.Status = "200 OK";
			 context.HttpContext.Response.ContentType = "application/vnd.ms-excel";
			 context.HttpContext.Response.ContentEncoding = Encoding.UTF8;
			 context.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=report.xls");
			 context.HttpContext.Response.Write(exportdata);
		 });
	 }


Редактирано от helena 2 3 4 5 1 (преглед на промените)

Най-простият начин е, да ги експортнеш в CSV (comma separated value) формат. Всички версии на Ексела го поддържат! Още нещо! За да билдваш XML документ винаги ползвай или DomDocument, XmlWriter или XElement, ще ти спестят много главоболия!

  • Автор

Как да представя този лист "listToExport" в цикъла(както съм написала по-горе) ,за да е удобен за екпортване ?

Типа на листа, предполагам съдържа всички данни, които ще бъдат експортнати на един ред от документа. Простият и бърз начин - Овъррайдваш метода ToString(), да ти билдва един ред от документа, в избрания от теб формат и в цикъла за всеки елемент от листа викаш ToString метода и го нахакваш в един StringBuilder, като след него добавяш един керидж ритърн. След края на цикъла викаш ToString на StringBuilder-а и имаш готовия документ в текстов вид. Правилният начин - правиш два интерфейса IDocumentRowDataAdapter, IDocumentBuilder. За всеки тип документ правиш по една имплементация на втория интерфейс. Всяка имплементация на IDocumentBuilder ще борави с необходимата имплементация на втория интерфейс. И отново - вътре в тялото на билдера по описания по-горе начин, ще итерираш листа и ще билдваш редчетата от документа, но не през ToString метода, а през адаптера. Накрая слагаш едно Factory, което по някакъв квалификатор да ти инстанцира необходимият билдер и вече си готова в полет да си билдваш документи в произволен познат ти (и имплементиран от теб) формат.

  • Автор

Ето и Action - а в който се опитва да експортна файла в ексел :

public ActionResult Export(int? TypeID)
	 {
if(TypeID == 1)
{
List listToExportDAL = ReportDAL.ExportData_ReportForAUANs();
"<Worksheet ss:Name="Справка">" +
"<Table> " +
"<Row>" +
	 "<Cell>" + "<Data ss:Type="String">" + "№" + "</Data>" + "</Cell>" +
	 "<Cell>" + "<Data ss:Type="String">" + "Име1" + "</Data>" + "</Cell>" +
	 "<Cell>" + "<Data ss:Type="String">" + "Име2" + "</Data>" + "</Cell>" +
	 "<Cell>" + "<Data ss:Type="String">" + "Име3" + "</Data>" + "</Cell>" +
"</Row>"

	 int i = 1;
	 foreach (var item in listToExportDAL)
	 {
	 table = table + "<Row>" +
				 "<Cell>" + "<Data ss:Type="String">" + i + "</Data>" + "</Cell>" +
				 "<Cell>" + "<Data ss:Type="String">" + item.data1 + "</Data>" + "</Cell>" +
				 "<Cell>" + "<Data ss:Type="String">" + item.data2 + "</Data>" + "</Cell>" +
				 "<Cell>" + "<Data ss:Type="String">" + item.data3+ "</Data>" + "</Cell>" +
		 "</Row>";
		 i +=1;
	 }
table = table + " </Table>" +
										 "</Worksheet>" ;

exportdata = "<?xml version="1.0"?>" +
						 "<?mso-application progid="Excel.Sheet"?>" +
						 "<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" " +
						 " xmlns:o="urn:schemas-microsoft-com:office:office"" +
						 " xmlns:x="urn:schemas-microsoft-com:office:excel"" +
						 " xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"" +
						 " xmlns:html="http://www.w3.org/TR/REC-html40">"
									 + table +
						 "</Workbook>";
}
return new DelegatingResult(context =>
{
context.HttpContext.Response.Status = "200 OK";
context.HttpContext.Response.ContentType = "application/vnd.ms-excel";
context.HttpContext.Response.ContentEncoding = Encoding.UTF8;
context.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=report.xls");
context.HttpContext.Response.Write(exportdata);
});

}

И в JavaScript - а трябва да се подаде ето така :

//Export data to excel
$('#button-export').button().click(
function () {
$(document.body).append('	'<form id="exportform" method="post"><input type="hidden" name="TypeID" id="TypeID" value="" /></form>'
');
var ef = $('#exportform')[0];
ef.TypeID.value = 1;
ef.method = 'POST';
ef.action = '/Report/Export';
ef.submit();
$(document.body).remove('#exportform');
});

където с TypeID = 1 -> казвам от коя таблица да ходи да ми вземе данните(за да не пиша 100 контролера за 100 таблици

аз си пиша в един и си казвам коя е таблицата ,съответно ходи до сървъра взимам ми данните и ми ги връща в този му вид дето съм написала)

Нещо такова : -)

ПП Ако някой се интересува и му трябва ,да пише ще напиша цялостен примерн : )

Редактирано от helena 2 3 4 5 1 (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.