网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 软件教学 > 网络办公 > Excel教学
办公软件:Office,Word教程,Excel教程,Powerpoint教程,Wps Office
Tag:函数,日期,时间,格式,技巧,表格,插入,,筛选,导入,导出,单元格,图表,打印,数据分析,排序,统计,公式
本月文章推荐
.Excel XP技巧.
.比较常用的25条Excel技巧整理放送.
.常用办公软件 Excel技巧整理讲解.
.浅析Excel 2003中多张表格同时显.
.将Excel中存储为文本的数字转换为.
.让Excel按人头打出工资条.
.Excel表格中的序号操作技巧.
.Excel 2007默认的数据排序规则列.
.动画图解:Excel单元格的合并.
.excel无法访问 该文档可能为只读.
.Excel 2007中隐藏或显示行和列的.
.用Excel和DOS命令批量修改文件名.
.Office2003实战秘笈之Excel轻松制.
.编辑管理Excel工作簿到外部数据的.
.巧妙移走Excel中不请自来的超链接.
.Office Excel与图表幻灯片的完美.
.教你如何在Excel中轻轻松松查看数.
.Excel2007中的单元格定位快捷键.
.在Excel中将人民币金额小写转成大.
.好用的工具 最深入分析Excel强大.

导出数据到Excel的几种方法

发表日期:2008-12-4


1.首先声明,这些方法也都是本人搜集的资料,然后为已所用,程序中不足之处,还请高手指点.  
  2.网上有好多关于用SQL语句导入导出的例子,这里不再重复写了。  
   
  方法1:调用com组件,导出access数据到Excel,就是直接调用access的导出功能,此方法速度超级快  
  using   Access;  
   
  Access.ApplicationClass   oAccess   =   new   Access.ApplicationClass();  
  oAccess.Visible   =   false;  
  try  
  {  
  //ACCESS9:  
  oAccess.OpenCurrentDatabase("d:\\wcf.mdb",false,"");  
  //导出到excel  
  oAccess.DoCmd.TransferSpreadsheet(Access.AcDataTransferType.acExport,Access.AcSpreadSheetType.acSpreadsheetTypeExcel9,"工作表名","d:\\wcf.xls",true,null,null);  
  //导入txt  
  // oAccess.DoCmd.TransferText(Access.AcTextTransferType.acExportDelim,"","Enterprise","d:\\wcf.txt",true,"",0);  
  oAccess.CloseCurrentDatabase();  
  oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);  
  System.Runtime.InteropServices.Marshal.ReleaseComObject   (oAccess);  
  oAccess   =   null;  
  MessageBox.Show("导入成功");  
  }  
  catch(Exception   ex)  
  {  
  MessageBox.Show(ex.ToString());  
  }  
  finally  
  {  
  GC.Collect();  
  }  
  方法2:此方法速度也是超级快,只不过导出的格式非标准的Excel格式,默认工作表名与文件名相同  
  string   FileName="d:\\abc.xls";  
  System.Data.DataTable   dt=new   System.Data.DataTable();  
  FileStream   objFileStream;  
  StreamWriter   objStreamWriter;  
  string   strLine="";  
  objFileStream   =   new   FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Write);  
  objStreamWriter   =   new   StreamWriter(objFileStream,System.Text.Encoding.Unicode);  
   
  for(int   i=0;i<dt.Columns.Count;i++)  
  {  
  strLine=strLine+dt.Columns[i].ColumnName.ToString()+Convert.ToChar(9);  
  }  
  objStreamWriter.WriteLine(strLine);  
  strLine="";  
   
  for(int   i=0;i<dt.Rows.Count;i++)  
  {  
  strLine=strLine+(i+1)+Convert.ToChar(9);  
  for(int   j=1;j<dt.Columns.Count;j++)  
  {  
  strLine=strLine+dt.Rows[i][j].ToString()+Convert.ToChar(9);  
  }  
  objStreamWriter.WriteLine(strLine);  
  strLine="";  
  }  
  objStreamWriter.Close();  
  objFileStream.Close();  
   
  方法3:用Ado.net   此方法速度较以上两个显得慢了一些,数据量越大越明显  
  int   Id=0;  
  string   Name="测试";  
  string   FileName="d:\\abc.xls";  
  System.Data.DataTable   dt=new   System.Data.DataTable();  
  long   totalCount=dt.Rows.Count;  
  long   rowRead=0;  
  float   percent=0;  
  OleDbParameter[]   parm=new   OleDbParameter[dt.Columns.Count];  
  string   connString   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="   +   FileName   +";Extended   Properties=Excel   8.0;";  
  OleDbConnection   objConn   =   new   OleDbConnection(connString);  
  OleDbCommand   objCmd   =   new   OleDbCommand();  
  objCmd.Connection   =   objConn;  
  objConn.Open();  
  //建立表结构  
  objCmd.CommandText   =   @"CREATE   TABLE   Sheet1(序号   Integer,名称   varchar)";  
  objCmd.ExecuteNonQuery();  
  //建立插入动作的Command  
  objCmd.CommandText   =   "INSERT   INTO   Sheet1("+Id+","+Name+")";  
  parm[0]=new   OleDbParameter("@Id",   OleDbType.Integer);  
  objCmd.Parameters.Add(parm[0]);  
  parm[1]=new   OleDbParameter("@Company",   OleDbType.VarChar);  
  objCmd.Parameters.Add(parm[1]);  
  //遍历DataTable将数据插入新建的Excel文件中  
  for(int   i=0;i<dt.Rows.Count;i++)  
  {        
  parm[0].Value=i+1;  
  for(int   j=1;j<parm.Length;j++)  
  {  
  parm[j].Value   =dt.Rows[i][j];  
  }  
  objCmd.ExecuteNonQuery();  
  rowRead++;  
  percent=((float)(100*rowRead))/totalCount;        
  // this.FM.CaptionText.Text   =   "正在导出数据,已导出["   +   percent.ToString("0.00")   +   "%]...";  
  if(i==dt.Rows.Count-1)  
  // this.FM.CaptionText.Text   =   "请稍后......";  
  System.Windows.Forms   .Application.DoEvents();  
  }  
  objConn.Close();  
  //this.FM.CaptionText.Text   =   "";  
   
  方法4:此方法调用com组件,速度都慢于以上3个方法  
  using   Excel;  
   
  System.Data.DataTable   dt=new   System.Data.DataTable();  
  string   FileName="d:\\abc.xls";  
   
  long   totalCount=dt.Rows.Count;  
  long   rowRead=0;  
  float   percent=0;  
  Excel.Application   xlApp=null;  
  xlApp=new   Excel.Application();  
  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;  
   
  //写入字段    
  for(int   i=0;i<dt.Columns.Count;i++)  
  {  
  worksheet.Cells[1,i+1]=dt.Columns[i].ColumnName;      
  range=(Excel.Range)worksheet.Cells[1,i+1];    
  }  
  for(int   r=0;r<dt.Rows.Count;r++)  
  {  
  worksheet.Cells[r+2,1]=r+1;  
  for(int   i=0;i<dt.Columns.Count;i++)  
  {  
  // worksheet.Cells[r+2,i+1]=dt.Rows[r][i];  
  if(i+1!=dt.Columns.Count)  
  worksheet.Cells[r+2,i+2]=dt.Rows[r][i+1];  
  }  
  rowRead++;  
  percent=((float)(100*rowRead))/totalCount;        
  // this.FM.CaptionText.Text   =   "正在导出数据,已导出["   +   percent.ToString("0.00")   +   "%]...";  
  System.Windows.Forms   .Application.DoEvents();  
  }  
  range=worksheet.get_Range(worksheet.Cells[2,1],worksheet.Cells[dt.Rows.Count+2,dt.Columns.Count]);  
  workbook.Saved   =true;  
  workbook.SaveCopyAs(FileName);  
  //this.FM.CaptionText.Text   =   "";  
   
  方法5:利用剪贴板   ,有人说此方法很快,但是我用时,这种方法最慢,请高手指点.  
  System.Data.DataTable   dt=new   System.Data.DataTable();  
  string   filePath=@"d:\abc.xls";  
   
  object   oMissing   =   System.Reflection.Missing.Value;  
  Excel.ApplicationClass   xlApp   =   new   Excel.ApplicationClass();  
  try  
  {  
  xlApp.Visible   =   false;  
  xlApp.DisplayAlerts   =   false;  
  Excel.Workbooks   oBooks   =   xlApp.Workbooks;  
  Excel._Workbook   xlWorkbook   =   null;  
  xlWorkbook   =   oBooks.Open(filePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,  
  oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);  
   
  Excel.Worksheet   xlWorksheet;  
  //   添加入一个新的Sheet页。  
  xlWorksheet   =   (Excel.Worksheet)xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing);  
  //   以TableName作为新加的Sheet页名。  
  xlWorksheet.Name   ="企业名录";  
  //   取出这个DataTable中的所有值,暂存于stringBuffer中。  
  string   stringBuffer   =   "";  
   
  for(   int   j=0;   j<dt.Rows.Count;   j++   )  
  {  
  for(   int   k=0;   k<dt.Columns.Count;   k++   )  
  {  
  stringBuffer   +=   dt.Rows[j][k].ToString();  
  if(   k   <   dt.Columns.Count   -   1   )  
  stringBuffer   +=   "\t";  
  }  
  stringBuffer   +=   "\n";  
  }  
  //   利用系统剪切板  
  System.Windows.Forms.Clipboard.SetDataObject("");  
  //   将stringBuffer放入剪切板。  
  System.Windows.Forms.Clipboard.SetDataObject(stringBuffer);  
  //   选中这个sheet页中的第一个单元格  
  ((Excel.Range)xlWorksheet.Cells[1,1]).Select();  
  //   粘贴!  
  xlWorksheet.Paste(oMissing,oMissing);  
  //   清空系统剪切板。  
  System.Windows.Forms.Clipboard.SetDataObject("");  
   
  //   保存并关闭这个工作簿。  
  xlWorkbook.Close(   Excel.XlSaveAction.xlSaveChanges,   oMissing,   oMissing   );  
  System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);  
  xlWorkbook   =   null;  
   
  这些方法都没有关闭Excel进程,这种资料很多,在此不多写了,希望这些能对一些人带来方便.

上一篇:使用宏来限制Excel 2007文件打印 人气:281
下一篇:最近有人咨询的几个excel问题 人气:248
浏览全部Excel的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐