gpt4 book ai didi

c# - 将数据表导出到 Excel asp

转载 作者:行者123 更新时间:2023-11-30 22:18:15 24 4
gpt4 key购买 nike

我有一个将数据导出到 Excel 文件的网页。我遇到的唯一问题是,当我尝试打开 excel 文件时,我收到一条消息,提示“您尝试打开的文件的格式与文件扩展名指定的格式不同。请确认文件未损坏且来自打开文件之前的可信来源。”。我怎样才能摆脱这个消息。为了进行导出,我使用了在另一篇文章中找到的函数。这是代码...

private void ExporttoExcel(DataTable table)
{
//Response.Clear();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentType = "application/excel";
HttpContext.Current.Response.Write(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">");
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=TestingReports");
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1252");
// Sets font
HttpContext.Current.Response.Write("<font style='font-size:10.0pt; font-family:Calibri;'>");
HttpContext.Current.Response.Write("<BR><BR><BR>");
// Sets the table border, cell spacing, border color, font of the text, background, foreground, font height
HttpContext.Current.Response.Write("<Table bgColor='#ffffff' cellSpacing='0' cellPadding='0' style='font-size:10.0pt; font-family:Calibri; background:white;'> <TR>");
// Am getting my grid's column headers
int columnscount = table.Columns.Count;

// Write in new column
for (int j = 0; j < columnscount; j++)
{
HttpContext.Current.Response.Write("<Td style='font-size:15.0pt; text-align:center; width:80.0pt; border-width:1.0pt; border-color:#000000; border-style:solid; height:22.0pt;'>");
// Get column headers and make it as bold in excel columns
HttpContext.Current.Response.Write("<B>");
HttpContext.Current.Response.Write(table.Columns[j].ToString());
HttpContext.Current.Response.Write("</B>");
HttpContext.Current.Response.Write("</Td>");
}
HttpContext.Current.Response.Write("</TR>");

// Write in new row
foreach (DataRow row in table.Rows)
{
HttpContext.Current.Response.Write("<TR>");
for (int i = 0; i < table.Columns.Count; i++)
{
HttpContext.Current.Response.Write("<Td style='width:80.0pt; text-align:center; border-width:0.5pt; border-color:#000000; border-style:solid; height:22.0pt;'>");
HttpContext.Current.Response.Write(row[i].ToString());
HttpContext.Current.Response.Write("</Td>");
}
HttpContext.Current.Response.Write("</TR>");
}
HttpContext.Current.Response.Write("</Table>");
HttpContext.Current.Response.Write("</font>");
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();

//Response.Write("TestingReports.xls");
//Response.Flush();
//Response.End();
}

任何帮助将不胜感激。提前谢谢你。

最佳答案

以下方法用于从您的 C# 代码导出到 Excel。

// fileName = your file name like test.xls
// dt = your data table
// caption = it is caption which display on top of excel file.


public static void Export(string fileName, DataTable dt, string Caption)
{


HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1254");
HttpContext.Current.Response.Charset = "windows-1254"; //ISO-8859-13 ISO-8859-9 windows-1254

HttpContext.Current.Response.AddHeader(
"content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
string header = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1254\" />\n<style>\n</style>\n</head>\n<body>\n";

using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid

Table table = new Table();
table.GridLines = GridLines.Horizontal;
//table.CellSpacing = 17;

if (Caption.Trim() != "")
table.Caption = "<span style='background-color: #FFFFFF; color: #666666; font-size: 14pt; font-weight: bold; padding: 5px 0px; height: 30px;'>" + Caption + "</span>";

TableRow row = null;
row = new TableRow();
for (int i = 0; i < dt.Columns.Count; i++)
{
TableHeaderCell headerCell = new TableHeaderCell();
headerCell.Text = dt.Columns[i].ColumnName;
PrepareControlForExport(headerCell);
row.Cells.Add(headerCell);
}
table.Rows.Add(row);
foreach (DataRow rows in dt.Rows)
{
row = new TableRow();
for (int i = 0; i < dt.Columns.Count; i++)
{
TableCell RowCell = new TableCell();
RowCell.Text = rows[i].ToString();
PrepareControlForExport(RowCell);
row.Cells.Add(RowCell);
}
table.Rows.Add(row);
}

// render the table into the htmlwriter
table.RenderControl(htw);

// render the htmlwriter into the response
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.Write(header + sw.ToString());
HttpContext.Current.Response.End();

}
}
}

private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
}
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
}
else if (current is Label)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as Label).Text));
}

if (current.HasControls())
{
ReportExport.PrepareControlForExport(current);
}
}
}

关于c# - 将数据表导出到 Excel asp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16191895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com