protected void btnexportexcel_Click(object
sender, EventArgs e)
{
DataTable TableName1= new DataTable();
DataTable TableName2= new DataTable();
DataSet ds = new DataSet();
ds.Merge(TableName1);
ds.Merge(TableName2);
ds.Tables[0].TableName = "TableName1";
ds.Tables[1].TableName = "TableName2";
ToExcel(ds, "" + filename + ".xls",
Page.Response);
}
private static string
getWorkbookTemplate()
{
var sb = new StringBuilder(818);
sb.AppendFormat(@"{0}", Environment.NewLine);
sb.AppendFormat(@"{0}", Environment.NewLine);
sb.AppendFormat(@"
Environment.NewLine);
sb.AppendFormat(@" xmlns:o=""urn:schemas-microsoft-com:office:office""{0}",
Environment.NewLine);
sb.AppendFormat(@"
xmlns:x=""urn:schemas-microsoft-com:office:excel""{0}",
Environment.NewLine);
sb.AppendFormat(@"
xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""{0}",
Environment.NewLine);
sb.AppendFormat(@"
xmlns:html=""http://www.w3.org/TR/REC-html40"">{0}",
Environment.NewLine);
sb.AppendFormat(@"
sb.AppendFormat(@" {0}", Environment.NewLine);
sb.AppendFormat(@" {0}", Environment.NewLine);
sb.AppendFormat(@" {0}", Environment.NewLine);
sb.AppendFormat(@" {0}", Environment.NewLine);
sb.Append(@"{0}\r\n");
return
sb.ToString();
}
private static string
replaceXmlChar(string input)
{
input = input.Replace("&", "&");
input = input.Replace("<", "<");
input = input.Replace(">", ">");
input = input.Replace("\"", """);
input = input.Replace("'", "'");
return input;
}
private static string
getCell(Type type, object
cellData)
{
var data =
(cellData is DBNull)
? "" : cellData;
if
(type.Name.Contains("Int") ||
type.Name.Contains("Double") ||
type.Name.Contains("Decimal")) return string.Format("
if
(type.Name.Contains("Date")
&& data.ToString() != string.Empty)
{
return string.Format("
}
return string.Format("
replaceXmlChar(data.ToString()));
}
private static string
getWorksheets(DataSet source)
{
var sw = new StringWriter();
if (source ==
null || source.Tables.Count == 0)
{
sw.Write("
\r\n
\r\n");
return
sw.ToString();
}
foreach (DataTable dt in
source.Tables)
{
if
(dt.Rows.Count == 0)
sw.Write("
replaceXmlChar(dt.TableName) + "\">\r\n
\r\n
\r\n");
else
{
//write each row
data
var sheetCount
= 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
if ((i %
rowLimit) == 0)
{
//add close tags
for previous sheet of the same data table
if ((i /
rowLimit) > sheetCount)
{
sw.Write("\r\n\r\n");
sheetCount = (i / rowLimit);
}
sw.Write("\r\n
replaceXmlChar(dt.TableName) +
(((i / rowLimit) == 0) ? "" : Convert.ToString(i
/ rowLimit)) + "\">\r\n
");
//write column
name row
sw.Write("\r\n
foreach (DataColumn dc in
dt.Columns)
sw.Write(string.Format("
replaceXmlChar(dc.ColumnName)));
sw.Write("");
}
sw.Write("\r\n
foreach (DataColumn dc in
dt.Columns)
sw.Write(getCell(dc.DataType,
dt.Rows[i][dc.ColumnName]));
sw.Write("");
}
sw.Write("\r\n
\r\n");
}
}
return
sw.ToString();
}
public static string
GetExcelXml(DataTable dtInput, string filename)
{
var
excelTemplate = getWorkbookTemplate();
var ds = new DataSet();
ds.Tables.Add(dtInput.Copy());
var worksheets
= getWorksheets(ds);
var excelXml =
string.Format(excelTemplate, worksheets);
return excelXml;
}
public static string
GetExcelXml(DataSet dsInput, string filename)
{
var
excelTemplate = getWorkbookTemplate();
var worksheets
= getWorksheets(dsInput);
var excelXml =
string.Format(excelTemplate, worksheets);
return excelXml;
}
public static void ToExcel(DataSet dsInput, string
filename, HttpResponse response)
{
var excelXml =
GetExcelXml(dsInput, filename);
response.Clear();
response.Buffer = true;
response.BufferOutput = true;
//
response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
response.Charset = "UTF-8";
response.ContentEncoding =
System.Text.Encoding.UTF8;
//response.ContentType
= "application/vnd.ms-excel";
response.AppendHeader("Content-Type", "application/ms-excel");
response.AppendHeader("Content-disposition", "attachment; filename=" + filename);
response.Write(excelXml);
response.Flush();
response.End();
}
public static void ToExcel(DataTable dtInput, string
filename, HttpResponse response)
{
var ds = new DataSet();
ds.Tables.Add(dtInput.Copy());
ToExcel(ds, filename,
response);
}
0 comments:
Post a Comment