建站资讯

asp.net中导出来到Excel的方式归纳及导出来Excel/C

作者:admin 发布时间:2020-11-18
中导出来到Excel的方式归纳及导出来Excel/Csv文件格式数据信息 创作者:Aisencici / / 归类:C#技术性 / 访问:3275

中导出来Execl的方式:
<中导出来Execl有二种方式,一种是将导出来的文档储放在网络服务器某一文档夹下边,随后将文档详细地址輸出在访问器上;一种是将文档立即将文档輸出流写給访问器。在Response輸出时,t隔开的数据信息,导出来execl时,等额的于分列,n等额的于换行。
1、将全部html所有輸出execl

此法将html中常有的內容,如按键,报表,照片等所有輸出到Execl中。

  Response.Clear(); 
  Response.Buffer=  true; 
  Response.AppendHeader( Content-Disposition , attachment;filename= +DateTime.Now.ToString( yyyyMMdd )+ .xls  
  Response.ContentEncoding=System.Text.Encoding.UTF8; 
  Response.ContentType  =  application/vnd.ms-excel  
  this.EnableViewState  =  false; 


这儿大家运用了ContentType特性,它默认设置的特性为text/html,这时候将輸出为HTML文件,即大家普遍的网页页面文件格式到顾客端,假如 改成ms-excel将将輸出excel文件格式,换句话说以电子器件报表的文件格式輸出到顾客端,这时候访问器将提醒你免费下载储存。ContentType的特性还包 括:image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword 。同样,大家还可以輸出(导出来)照片、word文本文档等。下边的方式,也均用了这一特性。

2、将DataGrid控制中的数据信息导出来Execl

所述方式尽管完成了导出来的作用,但同时把按键、分页查询框等html中的全部輸出信息内容导了进来。而大家一般要导出来的是数据信息,DataGrid控制上的数据信息。

System.Web.UI.Control ctl=this.DataGrid1;
//DataGrid1就是你在文本框中拖拽的控制
HttpContext.Current.Response.AppendHeader( Content-Disposition , attachment;filename=Excel.xls
HttpContext.Current.Response.Charset = UTF-8  
HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = application/ms-excel
ctl.Page.EnableViewState =false; 
System.IO.StringWriter tw = new System.IO.StringWriter() ;
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();


假如你的DataGrid用了分页查询,它导出来的是当今页的信息内容,也便是它导出来的是DataGrid中显示信息的信息内容。而并不是你select句子的所有信息内容。

为便捷应用,写出方式以下:

public void DGToExcel(System.Web.UI.Control ctl) 
{
  HttpContext.Current.Response.AppendHeader( Content-Disposition , attachment;filename=Excel.xls
  HttpContext.Current.Response.Charset = UTF-8  
  HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
  HttpContext.Current.Response.ContentType = application/ms-excel
  ctl.Page.EnableViewState =false; 
  System.IO.StringWriter tw = new System.IO.StringWriter() ;
  System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
  ctl.RenderControl(hw);
  HttpContext.Current.Response.Write(tw.ToString());
  HttpContext.Current.Response.End();
}


  使用方法:DGToExcel(datagrid1);
 
3、将DataSet中的数据信息导出来Execl

有 了上面的构思,便是将在导出来的信息内容,輸出(Response)顾客端,那样便可以导出来了。那麼把DataSet中的数据信息导出来,也便是把DataSet中的 表格中的各行信息内容,以ms-excel的文件格式Response到http流,那样就OK了。表明:主要参数ds应是添充了解据表的DataSet,文档名是全 名,包含后缀名名,如execl2006.xls


public void CreateExcel(DataSet ds,string FileName)
{
HttpResponse resp;
resp = Page.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding( GB2312
resp.AppendHeader( Content-Disposition , attachment;filename= +FileName); 
string colHeaders= , ls_item=  

//界定表目标与行目标,同时要DataSet对其值开展原始化
DataTable dt=ds.Tables[0];
DataRow[] myRow=dt.Select();//能够相近dt.Select( id 10 )之方式做到数据信息挑选目地
  int i=0;
  int cl=dt.Columns.Count;
 
//获得数据信息表各列题目,各题目中间以t切分,最终一个列题目后加回车键符
for(i=0;i i++)
{
if(i==(cl-1))//最终一列,加n
{
colHeaders +=dt.Columns[i].Caption.ToString() + n
}
else
{
colHeaders+=dt.Columns[i].Caption.ToString()+ t
}
 
}
resp.Write(colHeaders);
//向HTTP輸出流中载入获得的数据信息信息内容
 
//逐行解决数据信息 
foreach(DataRow row in myRow)
{  
//当今行数据信息载入HTTP輸出流,而且置空ls_item便于下滑数据信息 
for(i=0;i i++)
{
if(i==(cl-1))//最终一列,加n
{
ls_item +=row[i].ToString()+ n
}
else
{
ls_item+=row[i].ToString()+ t
}
 
}
resp.Write(ls_item);
ls_item=
 
}  
resp.End();
}


4、将dataview导出来execl
若想完成更为富有转变或是队伍不规律的execl导出来时,能用本法。

public void OutputExcel(DataView dv,string str)
{
  //dv为要輸出到Excel的数据信息,str为题目名字
  GC.Collect();
  Application excel;// = new Application();
  int rowIndex=4;
  int colIndex=1;

  _Workbook xBk;
  _Worksheet xSt;

  excel= new ApplicationClass();
 
  xBk = excel.Workbooks.Add(true);
 
  xSt = (_Worksheet)xBk.ActiveSheet;

  //
  //获得题目
  //
  foreach(DataColumn col in dv.Table.Columns)
  {
  colIndex++;
  excel.Cells[4,colIndex] = col.ColumnName;
  xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设定题目文件格式为垂直居中两端对齐
  }

  //
  //获得报表中的数据信息
  //
  foreach(DataRowView row in dv)
  {
  rowIndex ++;
  colIndex = 1;
  foreach(DataColumn col in dv.Table.Columns)
  {
  colIndex ++;
  if(col.DataType == System.Type.GetType( System.DateTime ))
  {
  excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString( yyyy-MM-dd
  xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设定时间型的字段名文件格式为垂直居中两端对齐
  }
  else
  if(col.DataType == System.Type.GetType( System.String ))
  {
  excel.Cells[rowIndex,colIndex] = +row[col.ColumnName].ToString();
  xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设定标识符型的字段名文件格式为垂直居中两端对齐
  }
  else
  {
  excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
  }
  }
  }
  //
  //载入一个累计行
  //
  int rowSum = rowIndex + 1;
  int colSum = 2;
  excel.Cells[rowSum,2] = 累计
  xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
  //
  //设定选定的一部分的色调
  //
  xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
  xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设定为浅淡黄色,总共有56种
  //
  //获得全部表格的题目
  //
  excel.Cells[2,2] = str;
  //
  //设定全部表格的题目文件格式
  //
  xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
  xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;
  //
  //设定表格报表为最适应总宽
  //
  xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
  xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
  //
  //设定全部表格的题目为跨列垂直居中
  //
  xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
  xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;
  //
  //绘图外框
  //
  xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
  xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设定左侧线字体加粗
  xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设定上面线字体加粗
  xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设定右侧线字体加粗
  xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设定下面线字体加粗
  //
  //显示信息实际效果
  //
  excel.Visible=true;

  //xSt.Export(Server.MapPath( . )+ +this.xlfile.Text+ .xls ,SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);
  xBk.SaveCopyAs(Server.MapPath( . )+ +this.xlfile.Text+ .xls

  ds = null;
  xBk.Close(false, null,null);
 
  excel.Quit();
  System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
  System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
  xBk = null;
  excel = null;
  xSt = null;
  GC.Collect();
  string path = Server.MapPath(this.xlfile.Text+ .xls

  System.IO.FileInfo file = new System.IO.FileInfo(path);
  Response.Clear();
  Response.Charset= GB2312
  Response.ContentEncoding=System.Text.Encoding.UTF8;
  // 加上头信息内容,为 文档免费下载/另存为 会话框特定默认设置文档名
  Response.AddHeader( Content-Disposition , attachment; filename= + Server.UrlEncode(file.Name));
  // 加上头信息内容,特定文档尺寸,让访问器可以显示信息免费下载进展
  Response.AddHeader( Content-Length , file.Length.ToString());
 
  // 特定回到的是一个不可以被顾客端载入的流,务必被免费下载
  Response.ContentType = application/ms-excel
 
  // 把文档流推送到顾客端
  Response.WriteFile(file.FullName);
  // 终止网页页面的实行
 
  Response.End();
}


 
  上边的层面,均即将导出来的execl数据信息,立即给访问器輸出文档流,下边的方式是最先将其存到网络服务器的某一文档夹中,随后把文档推送到顾客端。那样能够长久的把导出来的文档存起來,便于完成其他作用。
5、将execl文档导出来到网络服务器上,再免费下载。

二、winForm中导出来Execl的方式:

1、方式1:

  SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[ conn ]);
  SqlDataAdapter da=new SqlDataAdapter( select * from tb1 ,conn);
  DataSet ds=new DataSet();
  da.Fill(ds, table1
  DataTable dt=ds.Tables[ table1
  string name=System.Configuration.ConfigurationSettings.AppSettings[ downloadurl ].ToString()+DateTime.Today.ToString( yyyyMMdd )+new Random(DateTime.Now.Millisecond).Next(10000).ToString()+ .csv //储放到 web.config中downloadurl特定的相对路径,文档文件格式为当今时间+4位任意数
  FileStream fs=new FileStream(name,FileMode.ess.Write);
  StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding( gb2312 ));
  sw.WriteLine( 全自动序号,名字,年纪
  foreach(DataRow dr in dt.Rows)
  {
  sw.WriteLine(dr[ ID ]+ , +dr[ vName ]+ , +dr[ iAge ]);
  }
  sw.Close();
  Response.AddHeader( Content-Disposition , attachment; filename= + Server.UrlEncode(name));
  Response.ContentType = application/ms-excel // 特定回到的是一个不可以被顾客端载入的流,务必被免费下载
  Response.WriteFile(name); // 把文档流推送到顾客端
  Response.End();

public void Out2Excel(string sTableName,string url)
{
Excel.Application oExcel=new Excel.Application();
Workbooks oBooks;
Workbook oBook;
Sheets oSheets;
Worksheet oSheet;
Range oCells;
string sFile= ,sTemplate=
//
System.Data.DataTable dt=TableOut(sTableName).Tables[0];

sFile=url+ myExcel.xls
sTemplate=url+ MyTemplate.xls
//
oExcel.Visible=false;
oExcel.DisplayAlerts=false;
//界定一个新的工作中簿
oBooks=oExcel.Workbooks;
oBooks.Open(sTemplate,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing, Type.Missing, Type.Missing);
oBook=oBooks.get_Item(1);
oSheets=oBook.Worksheets;
oSheet=(Worksheet)oSheets.get_Item(1);
//取名该sheet
oSheet.Name= Sheet1

oCells=oSheet.Cells;
//启用dumpdata全过程,将数据信息导进到Excel中来
DumpData(dt,oCells);
//储存
oSheet.SaveAs(sFile,Excel.XlFileFormat.xlTemplate,Type.Missing,Type.Missing, Type.Missing, Type.Missing, essMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);
oBook.Close(false, Type.Missing,Type.Missing);
//撤出Excel,而且释放出来启用的COM資源
oExcel.Quit();

GC.Collect();
KillProcess( Excel
}

private void KillProcess(string processName)
{
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
//获得全部开启的过程
try
{
foreach (Process thisproc in Process.GetProcessesByName(processName))
{
if(!thisproc.CloseMainWindow())
{
thisproc.Kill();
}
}
}
catch(Exception Exc)
{
throw new Exception( ,Exc);
}
}

2、方式2:


protected void ExportExcel()
  {
  gridbind();
  if(ds1==null) return;

  string saveFileName=
//  bool fileSaved=false;
  SaveFileDialog saveDialog=new SaveFileDialog();
  saveDialog.DefaultExt = xls
  saveDialog.Filter= Excel文档|*.xls
  saveDialog.FileName = Sheet1
  saveDialog.ShowDialog();
  saveFileName=saveDialog.FileName;
  if(saveFileName.IndexOf( : ) 0) return; //被点了撤销
//  excelapp.Workbooks.Open  (App.path 工程项目进展表.xls)
 
  Excel.Application xlApp=new Excel.Application();
  object missing=System.Reflection.Missing.Value;


  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=Title_label .Text.Trim ();
  long totalCount=ds1.Tables[0].Rows.Count;
  long rowRead=0;
  float percent=0;

  worksheet.Cells[1,1]=Title_label .Text.Trim ();
  //载入字段名
  for(int i=0;i ds1.Tables[0].Columns.Count;i++)
  {
  worksheet.Cells[2,i+1]=ds1.Tables[0].Columns.ColumnName;
  range=(Excel.Range)worksheet.Cells[2,i+1];
  range.Interior.ColorIndex = 15;
  range.Font.Bold = true;

  }
  //载入标值
  Caption .Visible = true;
  for(int r=0;r ds1.Tables[0].Rows.Count;r++)
  {
  for(int i=0;i ds1.Tables[0].Columns.Count;i++)
  {
  worksheet.Cells[r+3,i+1]=ds1.Tables[0].Rows

­­; 
  }
  rowRead++;
  percent=((float)(100*rowRead))/totalCount; 
  this.Caption.Text= 已经导出来数据信息[ + percent.ToString( 0.00 ) + %]...
  Application.DoEvents();
  }
  worksheet.SaveAs(saveFileName,missing,missing,missing,missing,missing,missing,missing,missing);
 
  this.Caption.Visible= false;
  this.Caption.Text= oldCaption;

  range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[ds1.Tables[0].Rows.Count+2,ds1.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(ds1.Tables[0].Columns.Count 1)
  {
  range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex=Excel.XlColorIndex.xlColorIndexAutomatic;
  }
  workbook.Close(missing,missing,missing);
  xlApp.Quit();
  }


三、附表:
尽管全是完成导出来 和winform的程序中,中,是在网络服务器端载入数据信息,在网络服务器端把数据信息 以ms-execl的文件格式,以Response輸出到访问器(顾客端);而在winform中,rm运作端便是顾客 端),随后启用顾客端安裝的office部件,将读到的数据信息写在execl的工作中簿中。

<导出来Excel/Csv文件格式数据信息最佳计划方案(C#)

好长时间沒有写点甚么了,或许是太忙。一年了,累积了很多好的东西,有机化学会时就写成来与大伙儿共享。

好,大破冲霄楼。
导出来到Excel/Csc文档其实不难,因此就会有许多方式:控制立即Render、把DataSet輸出成String再 Write出去等,(自然假如启用Excel程序的库文档得话还能够应用更强的立即实际操作Excel的方式,但这类方式用以Web服务看起来有点儿规定太高:必 须让Web网络服务器安裝特定版本号的Excel或其适用库文档)。就其前二种方式,具体上也是一样的,Render也是把由DataSet变化的View转化成 为一个Table輸出到顾客端罢了,只不过是掩藏了关键点,假如不相信,你用EditPlus甚么的看一下转化成的.xls文档就了解了。

Excel的鉴别力过强了,以致于它自身的文件格式、Csv文件格式、Tab隔开符文件格式、网页页面的Table文件格式等都可以非常好的开启。可是它“太聪慧”了,以 对于全自动鉴别数据和标识符串,并且要把超出11位的数据全自动变成科学研究计数法的文件格式,你试一下键入“2”,离去哪个模块格,就成 “123457E+11”了,够聪慧的吧,但是有时候会要我们觉得麻烦,由于我键入的便是自己的真实身份证号码,尾巴上沒有“X”,原本好好地的15十位数字,得 如今成那么个计数法了。那么我就修改显示信息文件格式吧,改成把数据显示信息为文字,好啦。但是我国的真实身份证升級了,号码变为1八位,我将它键入到数据信息库,导出来来时,用 刚刚的方式解决过,1八位没有错,但是最终三位如何全是零了!Excel为大家干了过多的事,无论是应当的還是不可该的。

如何处理?可以看编码:

  public static string ExportTable(DataSet ds)
  {
  string data =
  //data = ds.DataSetName + \n

  foreach (DataTable tb in ds.Tables)
  {
  //data += tb.TableName + \n
  data += table cellspacing=\ 0\ cellpadding=\ 5\ rules=\ all\ border=\ 1\
  //写成列名
  data += tr >  foreach (DataColumn column in tb.Columns)
  {
  data += td + column.ColumnName + /td
  }
  data += /tr

  //写成数据信息
  foreach (DataRow row in tb.Rows)
  {
  data += tr
  foreach (DataColumn column in tb.Columns)
  {
  if (column.ColumnName.Equals( 有效证件序号 ) || column.ColumnName.Equals( 报考序号 ))
  data += td >  else
  data += td + row[column].ToString() + /td
  }
  data += /tr
  }
  data += /table
  }

  return data;
  }


  public static void ExportDsToXls(Page page, string sql)
  {
  ExportDsToXls(page, FileName , sql);
  }
  public static void ExportDsToXls(Page page, string fileName, string sql)
  {
  DataSet ds = DBUtil.GetDataSet(sql);
  if (ds != null) ExportDsToXls(page, fileName, ds);
  }
  public static void ExportDsToXls(Page page, DataSet ds)
  {
  ExportDsToXls(page, FileName , ds);
  }
  public static void ExportDsToXls(Page page, string fileName, DataSet ds)
  {
  page.Response.Clear();
  page.Response.Buffer = true;
  page.Response.Charset = GB2312
  //page.Response.Charset = UTF-8
  page.Response.AppendHeader( Content-Disposition , attachment;filename= + fileName + System.DateTime.Now.ToString( _yyMMdd_hhmm ) + .xls
  page.Response.ContentEncoding = System.Text.Encoding.GetEncoding( GB2312 //设定輸出流为接下来汉语
  page.Response.ContentType = application/ms-excel //设定輸出文档种类为excel文档。
  page.EnableViewState = false;
  page.Response.Write(ExportTable(ds));
  page.Response.End();
  }
// >//輸出为Table,可以较大程度的降低字段名中数据信息对转化成的文档文件格式的危害,在这里里也没有解决数据信息中带有HTML标识的状况 在网页页面后台管理中,那样应用便可以了:

  protected void lbtnToExcel_Click(object sender, EventArgs e)
  {
  string strWhere = BuildSearchWhereString();
  string strOrder = this.hidOrderString.Value;
  string sql = SELECT 报考序号, 有效证件序号, 名字, 考区考试点, 报名类型,
  + 行政部门划分名字 AS 行政部门划分, 企业名字 AS 工作中企业, 大学毕业院校名字, 大学毕业技术专业名字 AS 大学毕业技术专业, 大学毕业年月,
  + 通信详细地址, 性別
  + from [VW报考]
  if (!string.IsNullOrEmpty(strWhere)) sql += where + strWhere;
  if (!string.IsNullOrEmpty(strOrder)) sql += order by + strOrder;
  else sql += order by [报名类型]
  PageExport.ExportDsToXls(this.Page, BaoMing , sql);
  dataBind();
  }



收缩