Asp.net 将DataReader行写入Excel文件
我有SQLServer2000中的数据,并且有一个指向传递表单的超链接,该表单的代码将数据输出到Excel文件。我一直在学习本教程: 我已经成功地从DataReader输出了一些示例值。我遇到的第一个问题是1.1中没有DataTable加载方法。我有数据通过DataReader返回,但我需要的帮助是如何创建标题并将其与数据行一起输出到Excel文件Asp.net 将DataReader行写入Excel文件,asp.net,ado.net,asp.net-1.1,Asp.net,Ado.net,Asp.net 1.1,我有SQLServer2000中的数据,并且有一个指向传递表单的超链接,该表单的代码将数据输出到Excel文件。我一直在学习本教程: 我已经成功地从DataReader输出了一些示例值。我遇到的第一个问题是1.1中没有DataTable加载方法。我有数据通过DataReader返回,但我需要的帮助是如何创建标题并将其与数据行一起输出到Excel文件 Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Respon
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
string attachment
= "attachment;filename=Report_" + DateTime.Now.ToString() + ".xls";
Response.AddHeader("content-disposition", attachment);
Response.Charset = string.Empty;
Response.Cache.SetCacheability(System.Web.HttpCacheability.Public);
Response.ContentType = "application/ms-excel";
DataTable dt = new DataTable();
dt.Columns.Add("Company");
dt.Columns.Add("Address1");
dt.Columns.Add("Address2");
dt.Columns.Add("City");
dt.Columns.Add("State");
dt.Columns.Add("ZipCode");
SqlConnection con = new SqlConnection();
SqlCommand com = new SqlCommand();
con.ConnectionString = "myconnstring";
com.Connection = con;
com.CommandText
= "SELECT DISTINCT Company, Address1, Address2, City, State, ZipCode" +
" FROM Vendor_View";
con.Open();
SqlDataReader dr = com.ExecuteReader();
while(dr.Read())
{
// how to grab and output data to Excel?
}
如果是简单的数据,那么只需发出一个CSV文件。Excel可以配置为非常容易地打开这些文件 下面的内容可以帮助您开始:
response.ContentType = "text/csv";
response.AddHeader("Content-Disposition", "attachment;filename=report.csv;");
response.AddHeader("Pragma", "no-cache");
response.AddHeader("Expires", "0");
// 1. output columns
Boolean addComma = false;
response.Write("\"");
foreach (DataColumn column in _dataToProcess.Columns) {
if (addComma) {
response.Write("\",\"");
} else {
addComma = true;
}
response.Write(column.ColumnName.ToString());
} // foreach column
response.Write("\"");
response.Write(System.Environment.NewLine);
// 2. output data
foreach (DataRow row in _dataToProcess.Rows) {
addComma = false;
response.Write("\"");
foreach (Object value in row.ItemArray) {
// handle any embedded quotes.
String outValue = Convert.ToString(value).Replace("\"", String.Empty);
if (addComma) {
response.Write("\",\"");
} else {
addComma = true;
}
response.Write(outValue);
}
response.Write("\"");
response.Write(System.Environment.NewLine);
} // foreach row
如果是简单的数据,那么只需发出一个CSV文件。Excel可以配置为非常容易地打开这些文件 下面的内容可以帮助您开始:
response.ContentType = "text/csv";
response.AddHeader("Content-Disposition", "attachment;filename=report.csv;");
response.AddHeader("Pragma", "no-cache");
response.AddHeader("Expires", "0");
// 1. output columns
Boolean addComma = false;
response.Write("\"");
foreach (DataColumn column in _dataToProcess.Columns) {
if (addComma) {
response.Write("\",\"");
} else {
addComma = true;
}
response.Write(column.ColumnName.ToString());
} // foreach column
response.Write("\"");
response.Write(System.Environment.NewLine);
// 2. output data
foreach (DataRow row in _dataToProcess.Rows) {
addComma = false;
response.Write("\"");
foreach (Object value in row.ItemArray) {
// handle any embedded quotes.
String outValue = Convert.ToString(value).Replace("\"", String.Empty);
if (addComma) {
response.Write("\",\"");
} else {
addComma = true;
}
response.Write(outValue);
}
response.Write("\"");
response.Write(System.Environment.NewLine);
} // foreach row
我自己写了一篇博客。基本上有三种选择。但我推荐这个:
//Make sure you add this reference and have it imported
Using Excel = Microsoft.Office.Interop.Excel;
protected void xlsWorkBook()
{
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
Excel.Range oRange;
// Start Excel and get Application object.
oXL = new Excel.Application();
// Set some properties
oXL.Visible = true;
oXL.DisplayAlerts = false;
// Get a new workbook.
oWB = oXL.Workbooks.Add(Missing.Value);
// Get the active sheet
oSheet = (Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name = “Customers”;
// Process the DataTable
// BE SURE TO CHANGE THIS LINE TO USE *YOUR* DATATABLE
//DataTable dt = Customers.RetrieveAsDataTable();//commented
DataTable dt = Table;//added
Session["dt"] = dt;//added
int rowCount = 1;
foreach (DataRow dr in dt.Rows)
{
rowCount += 1;
for (int i = 1; i < dt.Columns.Count + 1; i++)
{
// Add the header the first time through
if (rowCount == 2)
{
oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
}
oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
}
}
// Resize the columns
oRange = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[rowCount, dt.Columns.Count]);
oRange.EntireColumn.AutoFit();
// Save the sheet and close
oSheet = null;
oRange = null;
oWB.SaveAs(“test.xls”, Excel.XlFileFormat.xlWorkbookNormal,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Excel.XlSaveAsAccessMode.xlExclusive,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
oWB.Close(Missing.Value, Missing.Value, Missing.Value);
oWB = null;
oXL.Quit();
// Clean up
// NOTE: When in release mode, this does the trick
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
我自己写了一篇博客。基本上有三种选择。但我推荐这个:
//Make sure you add this reference and have it imported
Using Excel = Microsoft.Office.Interop.Excel;
protected void xlsWorkBook()
{
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
Excel.Range oRange;
// Start Excel and get Application object.
oXL = new Excel.Application();
// Set some properties
oXL.Visible = true;
oXL.DisplayAlerts = false;
// Get a new workbook.
oWB = oXL.Workbooks.Add(Missing.Value);
// Get the active sheet
oSheet = (Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name = “Customers”;
// Process the DataTable
// BE SURE TO CHANGE THIS LINE TO USE *YOUR* DATATABLE
//DataTable dt = Customers.RetrieveAsDataTable();//commented
DataTable dt = Table;//added
Session["dt"] = dt;//added
int rowCount = 1;
foreach (DataRow dr in dt.Rows)
{
rowCount += 1;
for (int i = 1; i < dt.Columns.Count + 1; i++)
{
// Add the header the first time through
if (rowCount == 2)
{
oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
}
oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
}
}
// Resize the columns
oRange = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[rowCount, dt.Columns.Count]);
oRange.EntireColumn.AutoFit();
// Save the sheet and close
oSheet = null;
oRange = null;
oWB.SaveAs(“test.xls”, Excel.XlFileFormat.xlWorkbookNormal,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Excel.XlSaveAsAccessMode.xlExclusive,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
oWB.Close(Missing.Value, Missing.Value, Missing.Value);
oWB = null;
oXL.Quit();
// Clean up
// NOTE: When in release mode, this does the trick
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
那么标题列名呢?谢谢Chris,从您的代码示例中得到了一个解决方案,再加上这个:那么标题列名呢?谢谢Chris,从您的代码示例中得到了一个解决方案,再加上这个:谢谢,我明天再试一次,然后回来:好的,兄弟,晚安。这三种方法都有效。只需选择1:不想使用互操作。是否有可能以示例1为例,将Gridview从混合中排除—直接从DB获取数据到Excel?@rofans91非常感谢您为我节省了时间。可以加粗excel文件的标题以使其更美观吗?谢谢,我明天会尝试一下,然后回来:好的,兄弟,晚安。这三种方法都有效。只需选择1:不想使用互操作。是否有可能以示例1为例,将Gridview从混合中排除—直接从DB获取数据到Excel?@rofans91非常感谢您为我节省了时间。是否可以将excel文件的标题加粗以使其更美观?