内存中的一张表,如何以Excel格式输出,或者保存

gwg2368 2006-08-25 10:18:40
内存中的表结构就跟数据库的二维表一样
现在我用了一个Repeater显示数据
用户还要求把这个结果输出成Excel,请问大哥们如何办呢?

用C#


谢谢!!!
...全文
200 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxingmaxail 2006-09-06
  • 打赏
  • 举报
回复
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient ;
using System.Text;

namespace DataGrid_import_WordExcel
{
/// <summary>

/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button BtnImportWord;
protected System.Web.UI.WebControls.Button Btn_Import_Excel;
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
CreateDataSet();
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.BtnImportWord.Click += new System.EventHandler(this.BtnImportWord_Click);
this.Btn_Import_Excel.Click += new System.EventHandler(this.Btn_Import_Excel_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void ExportDataGrid(string FileType, string FileName) //从DataGrid导出
{
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode(FileName,Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState =false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw =new HtmlTextWriter(tw);
DataGrid1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
}
private void Btn_Import_Excel_Click(object sender, System.EventArgs e)
{
ExportDataGrid("application/ms-excel", "指数列表.xls"); //导到Excel
}

private void CreateDataSet() //建立DataSet
{
DataSet myDataSet = new DataSet("aNewDataSet");
DataTable table1 = MakeTable("ID", "Name");
myDataSet.Tables.Add(table1);
DataGrid1.DataSource=myDataSet;
DataGrid1.DataBind();
}


private DataTable MakeTable(String c1Name,String c2Name) //建表
{
int i;
DataTable myTable=new DataTable();
DataColumn myColumn;
// Add two DataColumns
myColumn = new DataColumn(c1Name,typeof(Int32)); //增加字段及设置类型
myTable.Columns.Add(myColumn);
myColumn = new DataColumn(c2Name,typeof(string));
myTable.Columns.Add(myColumn);
DataRow Dr;
for(i=1;i<11;i++) //表中增加数据
{
Dr=myTable.NewRow();
Dr[0]=i;
Dr[1]="Name" + i.ToString();
myTable.Rows.Add(Dr);
}
return myTable;
}

private void BtnImportWord_Click(object sender, System.EventArgs e) //导到Word
{
ExportDataGrid("application/ms-word", "指数列表.doc");

wuxingmaxail 2006-09-06
  • 打赏
  • 举报
回复
加using IO;
using Text;
我加了这两个!
boulder 2006-09-06
  • 打赏
  • 举报
回复
up
geggegeda 2006-09-06
  • 打赏
  • 举报
回复
xuexi
gwg2368 2006-08-25
  • 打赏
  • 举报
回复
好的,先谢了!
cctaiyang 2006-08-25
  • 打赏
  • 举报
回复
不复杂啊,直接调用这个函数就可以了啊,
ExportExcel("A座违约记录", ds);
gwg2368 2006-08-25
  • 打赏
  • 举报
回复
太复杂了吧,有没有简单一点的?
cctaiyang 2006-08-25
  • 打赏
  • 举报
回复
填充到dataSet中然后导出
导出示例如下:

public void ExportExcel(String FileName, DataSet ds)
{
if (ds == null) return;

string saveFileName = "";
bool fileSaved = false;
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = FileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消

Excel.Application xlApp = new Excel.Application();

if (xlApp == null)
{
MessageBox.Show("无法创建Excel对象,可能您未安装Excel");
return;
}

Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
Excel.Range range;

string oldCaption = pb_Export.Text;
long totalCount = ds.Tables[0].Rows.Count;
long rowRead = 0;
float percent = 0;

//worksheet.Cells[1, 1] = "A座销售记录";
//写入字段
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
range = (Excel.Range)worksheet.Cells[1, i + 1];
range.Interior.ColorIndex = 15;
range.Font.Bold = true;

}
//写入数值
pb_Export.Visible = true;
for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
{
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = "'" + ds.Tables[0].Rows[r][i];
}
rowRead++;
percent = ((float)(100 * rowRead)) / totalCount;
pb_Export.Position = Convert.ToInt32(percent);
pb_Export.Text = "正在导出数据[" + percent.ToString("0.00") + "%]...";
Application.DoEvents();
}
pb_Export.Visible = false;
pb_Export.Text = oldCaption;

range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[ds.Tables[0].Rows.Count + 1, ds.Tables[0].Columns.Count]);
range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);

range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;

if (ds.Tables[0].Columns.Count > 1)
{
range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
}

if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
fileSaved = true;
}
catch (Exception ex)
{
fileSaved = false;
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
else
{
fileSaved = false;
}
xlApp.Quit();
GC.Collect();//强行销毁
if (fileSaved && File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName);

}
C5662601 2006-08-25
  • 打赏
  • 举报
回复
学习
gwg2368 2006-08-25
  • 打赏
  • 举报
回复
噢, 我忘记说了
我是用 asp.net的,高手再帮帮忙
gwg2368 2006-08-25
  • 打赏
  • 举报
回复
using 哪些东西呢?
编译不通过啊!!!

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧