Boa tarde pessoal, abaixo tem alguns métodos que utilizei para exportar um datatable, que na minha aplicação está preenchendo um gridview. Nester métodos abaixo o datatable pode ser exportado para os seguintes formatos: .pdf, .txt, .xls, .doc e .csv.
///
/// M‚todo que exporta um datatable para documento Excel
///
public void ExportarExcel()
{
System.Data.DataTable tb = (System.Data.DataTable)Session["tb"];
StringBuilder str = new StringBuilder();
str.Append("Relat¢rio de Itens da Solicita‡Æo ");
int borderWidth = 1;
string boldTagStart = "";
string boldTagEnd = " ";
str.Append(" ");
str.Append("");
foreach (DataColumn oDataColumn in tb.Columns)
{
str.Append("" + boldTagStart + oDataColumn.ColumnName + boldTagEnd + " ");
}
str.Append(" ");
foreach (DataRow oDataRow in tb.Rows)
{
str.Append("");
foreach (DataColumn oDataColumn in tb.Columns)
{
if (oDataRow[oDataColumn.ColumnName] is long)
{
str.Append("" + oDataRow[oDataColumn.ColumnName].ToString() + " ");
}
else
{
str.Append("" + oDataRow[oDataColumn.ColumnName].ToString() + " ");
}
}
str.Append(" ");
}
str.Append("
");
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=filename.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Response.Write(str.ToString());
Response.End();
}
///
/// M‚todo que exporta um datatable para documento Word
///
public void ExportarWord()
{
System.Data.DataTable tb = (System.Data.DataTable)Session["tb"];
StringBuilder str = new StringBuilder();
str.Append("Relat¢rio de Itens da Solicita‡Æo
");
int borderWidth = 1;
string boldTagStart = "
";
string boldTagEnd = " ";
str.Append("
");
str.Append("");
foreach (DataColumn oDataColumn in tb.Columns)
{
str.Append("" + boldTagStart + oDataColumn.ColumnName + boldTagEnd + " ");
}
str.Append(" ");
foreach (DataRow oDataRow in tb.Rows)
{
str.Append("");
foreach (DataColumn oDataColumn in tb.Columns)
{
if (oDataRow[oDataColumn.ColumnName] is long)
{
str.Append("" + oDataRow[oDataColumn.ColumnName].ToString() + " ");
}
else
{
str.Append("" + oDataRow[oDataColumn.ColumnName].ToString() + " ");
}
}
str.Append(" ");
}
str.Append("
");
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.doc");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.word";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Response.Write(str.ToString());
Response.End();
}
///
/// M‚todo que exporta um datatable para .txt
///
public void ExportarTxt()
{
System.Data.DataTable dt = (System.Data.DataTable)Session["tb"];
StringBuilder str = new StringBuilder();
int[] maior = ObterMaiorString(); //obt‚m o vetor com as colunas com as maiores quantidades de caracteres.
str.Append("-------> RELATàRIO DE Itens da Solicita‡Æo <---------\r\n");
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j <= dt.Columns.Count - 1; j++)
{
int aux = maior[j] - dt.Rows[i][j].ToString().Length;
string espacos = "";
for (int x = 0; x < (maior[j] - dt.Rows[i][j].ToString().Length); x++)
{
espacos += " ";
}
str.Append(dt.Rows[i][j].ToString() + espacos + " ");
}
str.Append("\r\n");
}
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.txt");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.text";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Response.Write(str.ToString());
Response.End();
}
///
/// M‚todo que exportar um datatable para pdf usando a dll itextsharp
///
public void ExportarPDF()
{
Response.Clear();
Document document = new Document(PageSize.A4.Rotate(), 80, 50, 30, 65);
StringBuilder strData = new StringBuilder(string.Empty);
string strHTMLpath = Server.MapPath("MyHTML.html");
string strPDFpath = Server.MapPath("MyPDF.pdf");
try
{
System.Data.DataTable tb = (System.Data.DataTable)Session["tb"];
StringBuilder str = new StringBuilder();
str.Append("Relat¢rio de Itens da Solicita‡Æo
");
str.Append("
");
str.Append("");
foreach (DataColumn oDataColumn in tb.Columns)
{
str.Append("" + oDataColumn.ColumnName + " ");
}
str.Append(" ");
foreach (DataRow oDataRow in tb.Rows)
{
str.Append("");
foreach (DataColumn oDataColumn in tb.Columns)
{
if (oDataRow[oDataColumn.ColumnName] is long)
{
str.Append("" + oDataRow[oDataColumn.ColumnName].ToString() + " ");
}
else
{
str.Append("" + oDataRow[oDataColumn.ColumnName].ToString() + " ");
}
}
str.Append(" ");
}
str.Append("
");
StringWriter sw = new StringWriter();
sw.Write(str);
HtmlTextWriter htw = new HtmlTextWriter(sw);
StreamWriter strWriter = new StreamWriter(strHTMLpath, false, Encoding.UTF8);
strWriter.Write("
" + htw.InnerWriter.ToString() + "");
strWriter.Close();
strWriter.Dispose();
iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
styles.LoadTagStyle("ol", "leading", "16,0");
PdfWriter.GetInstance(document, new FileStream(strPDFpath, FileMode.Create));
document.Add(new Header(iTextSharp.text.html.Markup.HTML_ATTR_STYLESHEET, "Style.css"));
document.Open();
ArrayList objects;
styles.LoadTagStyle("li", "face", "garamond");
styles.LoadTagStyle("span", "size", "8px");
styles.LoadTagStyle("body", "font-family", "times new roman");
styles.LoadTagStyle("body", "font-size", "10px");
document.NewPage();
objects = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StreamReader(strHTMLpath, Encoding.Default), styles);
for (int k = 0; k < objects.Count; k++)
{
document.Add((IElement)objects[k]);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
document.Close();
Response.Write(Server.MapPath(".") + "\\MyPDF.pdf");
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment; filename=" + strPDFpath);
Response.ContentType = "application/octet-stream";
Response.WriteFile(Server.MapPath(".") + "\\MyPDF.pdf");
Response.Flush();
Response.Close();
if (File.Exists(Server.MapPath(".") + "\\MyPDF.pdf"))
{
File.Delete(Server.MapPath(".") +
\\MyPDF.pdf );
}
}
}
///
/// M‚todo que exporta um datatable para CSV
///
public void ExportarCSV()
{
System.Data.DataTable dt = (System.Data.DataTable)Session["tb"];
StringBuilder str = new StringBuilder();
str.AppendLine("Relat¢rio de Itens da Solicita‡Æo");
foreach (DataColumn oDataColumn in dt.Columns)
{
str.Append(oDataColumn.ColumnName + "");
}
foreach (DataRow oDataRow in dt.Rows)
{
str.AppendLine();
for (int i = 0; i < dt.Columns.Count; i++)
{
str.Append(oDataRow[i] + "");
}
}
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=FileName.csv");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "text/plain";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Response.Write(str.ToString());
Response.End();
}
Percebam que nós métodos acima o datatable estou passando através de uma session chamada session["tb"]. Agraços e até a próxima.
Nenhum comentário:
Postar um comentário