zoukankan      html  css  js  c++  java
  • (转) 数据导出到Excel(或Word)源代码大全

    数据导出到Excel(或Word)源代码大全

    在日常工作中,大家都习惯Office作为办公软件,因此,在开发软件的时,常常会有把数据导出到Excel等Office软件的需求。在此,收集一些常用的导出文件的源程序,希望给大家带来方便。(不断更新)

    一、DataSet数据集内数据转化为Excel

    [csharp] view plain copy
    1. // 作用:把DataSet数据集内数据转化为Excel、Word文件   
    2. // 描述:这些关于Excel、Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后   
    3. //       生成Xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。      
    4. // 备注:请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性。   
    5. public void DataSetToExcel(DataSet ds,string FileName)   
    6. {   
    7.    try   
    8.    {   
    9.       //Web页面定义   
    10.       //System.Web.UI.Page mypage=new System.Web.UI.Page();   
    11.   
    12.       HttpResponse resp;   
    13.       resp=HttpContext.Current.Response;   
    14.       resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");   
    15.       resp.AppendHeader("Content-disposition","attachment;filename="+FileName+".xls");   
    16.       resp.ContentType="application/ms-excel";   
    17.   
    18.       //变量定义   
    19.       string colHeaders=null;   
    20.       string Is_item=null;   
    21.   
    22.       //显示格式定义////////////////   
    23.   
    24.   
    25.       //文件流操作定义   
    26.       //FileStream fs=new FileStream(FileName,FileMode.Create,FileAccess.Write);   
    27.       //StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));   
    28.   
    29.       StringWriter sfw=new StringWriter();   
    30.       //定义表对象与行对象,同时用DataSet对其值进行初始化   
    31.       System.Data.DataTable dt=ds.Tables[0];   
    32.       DataRow[] myRow=dt.Select();   
    33.       int i=0;   
    34.       int cl=dt.Columns.Count;   
    35.   
    36.       //取得数据表各列标题,各标题之间以/t分割,最后一个列标题后加回车符   
    37.       for(i=0;i<cl;i++)   
    38.       {   
    39.          //if(i==(cl-1))  //最后一列,加/n   
    40.          // colHeaders+=dt.Columns[i].Caption.ToString();   
    41.          //else   
    42.          colHeaders+=dt.Columns[i].Caption.ToString()+"/t";   
    43.       }   
    44.       sfw.WriteLine(colHeaders);   
    45.       //sw.WriteLine(colHeaders);   
    46.   
    47.       //逐行处理数据   
    48.       foreach(DataRow row in myRow)   
    49.       {   
    50.          //当前数据写入   
    51.          for(i=0;i<cl;i++)   
    52.          {   
    53.           //if(i==(cl-1))   
    54.           //   Is_item+=row[i].ToString()+"/n";   
    55.           //else   
    56.           Is_item+=row[i].ToString()+"/t";   
    57.          }   
    58.          sfw.WriteLine(Is_item);   
    59.          //sw.WriteLine(Is_item);   
    60.          Is_item=null;   
    61.       }   
    62.       resp.Write(sfw);   
    63.       //resp.Clear();   
    64.       resp.End();   
    65.    }   
    66.    catch(Exception e)   
    67.    {   
    68.       throw e;   
    69.    }   
    70. }  

    二、DataSet数据集内数据转化为Excel文件(2)

    [csharp] view plain copy
    1. /// ExportFiles 的摘要说明。   
    2. /// 作用:把DataSet数据集内数据转化为Excel文件   
    3. /// 描述:导出Excel文件      
    4. /// 备注:请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性。   
    5. /// </summary>   
    6. public class ExportFiles   
    7. {   
    8.     private string filePath = "";   
    9.     public ExportFiles(string excel_path)   
    10.     {   
    11.         //   
    12.         // TODO: 在此处添加构造函数逻辑   
    13.         //   
    14.         filePath = excel_path;   
    15.     }   
    16.     /// <summary>   
    17.     /// 将指定的Dataset导出到Excel文件   
    18.     /// </summary>   
    19.     /// <param name="dt"></param>   
    20.     /// <returns></returns>   
    21.     public bool ExportToExcel(System.Data.DataSet ds, string ReportName)   
    22.     {   
    23.         if (ds.Tables[0].Rows.Count == 0)   
    24.         {   
    25.             MessageBox.Show("数据集为空");   
    26.         }   
    27.         Microsoft.Office.Interop.Excel._Application xlapp = new ApplicationClass();   
    28.         Workbook xlbook = xlapp.Workbooks.Add(true);   
    29.         Worksheet xlsheet = (Worksheet)xlbook.Worksheets[1];   
    30.         Range range = xlsheet.get_Range(xlapp.Cells[1, 1], xlapp.Cells[1, ds.Tables[0].Columns.Count]);   
    31.         range.MergeCells = true;   
    32.         xlapp.ActiveCell.FormulaR1C1 = ReportName;   
    33.         xlapp.ActiveCell.Font.Size = 20;   
    34.         xlapp.ActiveCell.Font.Bold = true;   
    35.         xlapp.ActiveCell.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;   
    36.         int colIndex = 0;   
    37.         int RowIndex = 2;   
    38.         //开始写入每列的标题   
    39.         foreach (DataColumn dc in ds.Tables[0].Columns)   
    40.         {   
    41.             colIndex++;   
    42.             xlsheet.Cells[RowIndex, colIndex] = dc.Caption;   
    43.         }   
    44.         //开始写入内容   
    45.         int RowCount = ds.Tables[0].Rows.Count;//行数   
    46.         for (int i = 0; i < RowCount; i++)   
    47.         {   
    48.             RowIndex++;   
    49.             int ColCount = ds.Tables[0].Columns.Count;//列数   
    50.             for (colIndex = 1; colIndex <= ColCount; colIndex++)   
    51.             {   
    52.                 xlsheet.Cells[RowIndex, colIndex] = ds.Tables[0].Rows[i][colIndex - 1];//dg[i, colIndex - 1];   
    53.                 xlsheet.Cells.ColumnWidth = ds.Tables[0].Rows[i][colIndex - 1].ToString().Length;   
    54.             }   
    55.         }   
    56.   
    57.         xlbook.Saved = true;   
    58.         xlbook.SaveCopyAs(filePath);   
    59.         xlapp.Quit();   
    60.         GC.Collect();   
    61.         return true;   
    62.     }   
    63.   
    64.     public bool ExportToExcelOF(System.Data.DataSet ds, string ReportName)   
    65.     {   
    66.         if (ds.Tables[0].Rows.Count == 0)   
    67.         {   
    68.             MessageBox.Show("数据集为空");   
    69.         }   
    70.         string FileName = filePath;   
    71.   
    72.         //System.Data.DataTable dt = new System.Data.DataTable();   
    73.         FileStream objFileStream;   
    74.         StreamWriter objStreamWriter;   
    75.         string strLine = "";   
    76.         objFileStream = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write);   
    77.         objStreamWriter = new StreamWriter(objFileStream, System.Text.Encoding.Unicode);   
    78.   
    79.         strLine = ReportName;   
    80.         objStreamWriter.WriteLine(strLine);   
    81.         strLine = "";   
    82.   
    83.         for (int i = 0; i < ds.Tables[0].Columns.Count; i++)   
    84.         {   
    85.             strLine = strLine + ds.Tables[0].Columns[i].ColumnName.ToString() + "          " + Convert.ToChar(9);   
    86.         }   
    87.         objStreamWriter.WriteLine(strLine);   
    88.         strLine = "";   
    89.   
    90.         for (int i = 0; i < ds.Tables[0].Rows.Count; i++)   
    91.         {   
    92.             strLine = strLine + (i + 1) + Convert.ToChar(9);   
    93.             for (int j = 1; j < ds.Tables[0].Columns.Count; j++)   
    94.             {   
    95.                 strLine = strLine + ds.Tables[0].Rows[i][j].ToString() + Convert.ToChar(9);   
    96.             }   
    97.             objStreamWriter.WriteLine(strLine);   
    98.             strLine = "";   
    99.         }   
    100.         objStreamWriter.Close();   
    101.         objFileStream.Close();   
    102.   
    103.         //Microsoft.Office.Interop.Excel._Application xlapp = new ApplicationClass();   
    104.         //Workbook xlbook = xlapp.Workbooks.Add(true);   
    105.         //Worksheet xlsheet = (Worksheet)xlbook.Worksheets[1];   
    106.         //Range range = xlsheet.get_Range(xlapp.Cells[1, 1], xlapp.Cells[1, ds.Tables[0].Columns.Count]);   
    107.         //range.EntireColumn.AutoFit();   
    108.         //xlapp.Quit();   
    109.         return true;   
    110.     }        
    111. }  

     

    三、生成XML然后转换成Excel方式

    参考资源:http://www.codeproject.com/office/Excel_Export.asp?df=100&forumid=329437&fr=51 (源程序) 优点:  a. 服务端不用安装Excel程序。  b. 支持一定的Excel文件格式设置,比如字体大小、颜色、合并单元格等。  缺点:  a. 与Excel 2000不兼容:由于Excel 2000不支持XML,所以以这种方法生成的Excel文件可能在Excel2000中不兼容(毕竟目前还有不少用户的电脑装的是Excel 2000)。  b. 可能不支持Excel文件页边距的设置;不支持Excel文件横向、纵向的设置;不支持Excel模板;  c. 编程工作量比较大;  d. 生成的文件本质上是XML文件,需要“另存为xls”才能变成真正的Excel文件。  e. 性能是好是坏还不清楚,目前还没真正在项目中用过。希望有用过此方案的朋友能介绍一下这个方案的性能。

    四、导出GridView到Excel

    [csharp] view plain copy
    1. //导出GridView到Excel中的关键之处   
    2. //用法: ToExcel(GVStaff, TextBox1.Text);   
    3.   
    4. public static void ToExcel(System.Web.UI.Control ctl,string FileName)   
    5. {   
    6.     HttpContext.Current.Response.Charset ="UTF-8";   
    7.     HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;   
    8.     HttpContext.Current.Response.ContentType ="application/ms-excel";   
    9.     HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+""+FileName+".xls");   
    10.     ctl.Page.EnableViewState =false;   
    11.     System.IO.StringWriter  tw = new System.IO.StringWriter();   
    12.     HtmlTextWriter hw = new HtmlTextWriter(tw);   
    13.     ctl.RenderControl(hw);   
    14.     HttpContext.Current.Response.Write(tw.ToString());   
    15.     HttpContext.Current.Response.End();   
    16. }           
    17.         
    18. 必须有下面这句!否则不会通过!   
    19. public override void VerifyRenderingInServerForm(Control control)   
    20. {   
    21.     // Confirms that an HtmlForm control is rendered for   
    22. }  

     

    五、DataTable导出到Excel

    [csharp] view plain copy
    1. using System;   
    2. using Microsoft.Office.Interop.Excel;   
    3. using System.Windows.Forms;   
    4. namespace DongVI   
    5. {   
    6.  /// <summary>   
    7.  /// DataTable导出到Excel   
    8.  /// 整理:dongVi   
    9.  /// </summary>   
    10.  public class DataTableToExcel   
    11.  {   
    12.   private DataTableToExcel()   
    13.   {   
    14.   
    15.   }   
    16.   /// <summary>   
    17.   /// 导出Excel   
    18.   /// </summary>   
    19.   /// <param name="dt">要导出的DataTable</param>   
    20.   public static void ExportToExcel(System.Data.DataTable dt )   
    21.   {   
    22.    if (dt == null) return;   
    23.       
    24.    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();   
    25.    if (xlApp == null)   
    26.    {   
    27.     // lblMsg.Text = "无法创建Excel对象,可能您的电脑未安装Excel";   
    28.     MessageBox.Show( "无法创建Excel对象,可能您的电脑未安装Excel" );   
    29.     return;   
    30.    }   
    31.    System.Windows.Forms.SaveFileDialog saveDia = new SaveFileDialog();   
    32.    saveDia.Filter = "Excel|*.xls";   
    33.    saveDia.Title = "导出为Excel文件";   
    34.    if(saveDia.ShowDialog()== System.Windows.Forms.DialogResult.OK   
    35.     && !string.Empty.Equals(saveDia.FileName))   
    36.    {   
    37.     Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;   
    38.     Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);   
    39.     Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1   
    40.     Microsoft.Office.Interop.Excel.Range range = null;   
    41.     long totalCount = dt.Rows.Count;   
    42.     long rowRead = 0;   
    43.     float percent = 0;   
    44.     string fileName = saveDia.FileName;   
    45.     //写入标题   
    46.     for (int i = 0; i < dt.Columns.Count; i++)   
    47.     {   
    48.      worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;   
    49.      range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];   
    50.      //range.Interior.ColorIndex = 15;//背景颜色   
    51.      range.Font.Bold = true;//粗体   
    52.      range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//居中   
    53.      //加边框   
    54.      range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);   
    55.      //range.ColumnWidth = 4.63;//设置列宽   
    56.      //range.EntireColumn.AutoFit();//自动调整列宽   
    57.      //r1.EntireRow.AutoFit();//自动调整行高   
    58.     }   
    59.     //写入内容   
    60.     for (int r = 0; r < dt.DefaultView.Count; r++)   
    61.     {   
    62.      for (int i = 0; i < dt.Columns.Count; i++)   
    63.      {   
    64.       worksheet.Cells[r + 2, i + 1] = dt.DefaultView[r][i];   
    65.       range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r + 2, i + 1];   
    66.       range.Font.Size = 9;//字体大小   
    67.       //加边框   
    68.       range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);   
    69.       range.EntireColumn.AutoFit();//自动调整列宽   
    70.      }   
    71.      rowRead++;   
    72.      percent = ((float)(100 * rowRead)) / totalCount;   
    73.      System.Windows.Forms.Application.DoEvents();   
    74.     }   
    75.     range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;   
    76.     if (dt.Columns.Count > 1)   
    77.     {   
    78.      range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;   
    79.     }   
    80.     try   
    81.     {   
    82.      workbook.Saved = true;   
    83.      workbook.SaveCopyAs(fileName);   
    84.     }   
    85.     catch (Exception ex)   
    86.     {   
    87.      //lblMsg.Text = "导出文件时出错,文件可能正被打开!/n" + ex.Message;   
    88.      MessageBox.Show( "导出文件时出错,文件可能正被打开!/n" + ex.Message );   
    89.      return;   
    90.     }   
    91.   
    92.     workbooks.Close();   
    93.     if (xlApp != null)   
    94.     {   
    95.      xlApp.Workbooks.Close();   
    96.      xlApp.Quit();   
    97.      int generation = System.GC.GetGeneration(xlApp);   
    98.      System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);   
    99.      xlApp = null;   
    100.      System.GC.Collect(generation);   
    101.     }   
    102.     GC.Collect();//强行销毁   
    103.     #region 强行杀死最近打开的Excel进程   
    104.     System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");   
    105.     System.DateTime startTime = new DateTime();   
    106.     int m, killId = 0;   
    107.     for (m = 0; m < excelProc.Length; m++)   
    108.     {   
    109.      if (startTime < excelProc[m].StartTime)   
    110.      {   
    111.       startTime = excelProc[m].StartTime;   
    112.       killId = m;   
    113.      }   
    114.     }   
    115.     if (excelProc[killId].HasExited == false)   
    116.     {   
    117.      excelProc[killId].Kill();   
    118.     }   
    119.     #endregion   
    120.     MessageBox.Show( "导出成功!" );   
    121.    }   
    122.   }   
    123.  }   
    124. }  

     

    六、DataTable导出到excel(2)

    [csharp] view plain copy
    1. StringWriter stringWriter = new StringWriter();   
    2. HtmlTextWriter htmlWriter = new HtmlTextWriter( stringWriter );   
    3. DataGrid excel = new DataGrid();   
    4. System.Web.UI.WebControls.TableItemStyle AlternatingStyle = new TableItemStyle();   
    5. System.Web.UI.WebControls.TableItemStyle headerStyle = new TableItemStyle();   
    6. System.Web.UI.WebControls.TableItemStyle itemStyle = new TableItemStyle();   
    7. AlternatingStyle.BackColor = System.Drawing.Color.LightGray;   
    8. headerStyle.BackColor =System.Drawing.Color.LightGray;   
    9. headerStyle.Font.Bold = true;   
    10. headerStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;   
    11. itemStyle.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;;    
    12.   
    13. excel.AlternatingItemStyle.MergeWith(AlternatingStyle);   
    14. excel.HeaderStyle.MergeWith(headerStyle);   
    15. excel.ItemStyle.MergeWith(itemStyle);    
    16. excel.GridLines = GridLines.Both;   
    17. excel.HeaderStyle.Font.Bold = true;   
    18. excel.DataSource = dt.DefaultView;//输出DataTable的内容   
    19. excel.DataBind();   
    20. excel.RenderControl(htmlWriter);   
    21.      
    22. string filestr = "d://data//"+filePath;  //filePath是文件的路径   
    23. int pos = filestr.LastIndexOf( "//");   
    24. string file = filestr.Substring(0,pos);   
    25. if( !Directory.Exists( file ) )   
    26. {   
    27.   Directory.CreateDirectory(file);   
    28. }   
    29. System.IO.StreamWriter sw = new StreamWriter(filestr);   
    30. sw.Write(stringWriter.ToString());   
    31. sw.Close();  

     

    七、通过SQL直接导出到Excel数据库

    [csharp] view plain copy
    1. exec master..xp_cmdshell @# bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout c:/test.xls -c -S"soa" -U"sa" -P"sa" @#  

    注意:参数的大小写,另外这种方法写入数据的时候没有标题。

        关于通过SQL读取EXCEL的方法请参见:http://blog.csdn.net/wonsoft/archive/2008/11/16/3312320.aspx

    八、用OleDB 把 DataSet 数据导出到 Excel文件里

    [csharp] view plain copy
    1. //dt为数据源(数据表)    
    2. //ExcelFileName 为要导出的Excle文件   
    3. //ModelFile为模板文件,该文件与数据源中的表一致。否则数据会导出失败。   
    4. //ModelFile文件里,需要有一张 与 dt.TableName 一致的表,而且字段也要一致。   
    5. //注明:如果不用ModelFile的话,可以用一个空白Excel文件,不过,要去掉下面创建表的注释,让OleDb自己创建一个空白表。   
    6. public static string TableToExcelFile(DataTable dt,string ExcelFileName,string ModelFile)   
    7. {   
    8.     File.Copy(ModelFile,ExcelFileName);  //复制一个空文件,提供写入数据用   
    9.        
    10.     if(File.Exists(ExcelFileName)==false)   
    11.     {   
    12.         return "系统创建临时文件失败,请与系统管理员联系!";   
    13.     }   
    14.   
    15.     if(dt == null)   
    16.     {   
    17.         return "DataTable不能为空";   
    18.     }   
    19.   
    20.     int rows = dt.Rows.Count;   
    21.   
    22.     int cols = dt.Columns.Count;   
    23.     StringBuilder sb;   
    24.     string connString;   
    25.   
    26.     if(rows == 0)   
    27.     {   
    28.         return "没有数据";   
    29.     }   
    30.   
    31.     sb = new StringBuilder();       
    32.     connString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ExcelFileName+";Extended Properties=Excel 8.0;";       
    33.        
    34.     //生成创建表的脚本   
    35.     //----sb.Append("DROP TABLE "+dt.TableName);   
    36.        
    37.     /*  
    38.     sb.Append("CREATE TABLE ");  
    39.     sb.Append(dt.TableName + " ( ");  
    40.     for(int i=0;i<cols;i++)  
    41.     {  
    42.         if(i < cols - 1)  
    43.         sb.Append(string.Format("{0} varchar,",dt.Columns[i].ColumnName));  
    44.         else  
    45.         sb.Append(string.Format("{0} varchar)",dt.Columns[i].ColumnName));  
    46.     }      
    47.     */   
    48.        
    49.     //return sb.ToString();   
    50.   
    51.     OleDbConnection objConn = new OleDbConnection(connString);   
    52.     OleDbCommand objCmd = new OleDbCommand();   
    53.     objCmd.Connection = objConn;   
    54.     //objCmd.CommandText=sb.ToString();   
    55.   
    56.     try   
    57.     {   
    58.         objConn.Open();   
    59.         //objCmd.ExecuteNonQuery();   
    60.     }   
    61.     catch(Exception e)   
    62.     {   
    63.         return "在Excel中创建表失败,错误信息:" + e.Message;   
    64.     }   
    65.   
    66.     sb.Remove(0,sb.Length);   
    67.   
    68.     sb.Append("INSERT INTO ");   
    69.     sb.Append(dt.TableName + " ( ");   
    70.   
    71.     for(int i=0;i<cols;i++)   
    72.     {   
    73.         if(i < cols - 1)   
    74.             sb.Append(dt.Columns[i].ColumnName + ",");   
    75.         else   
    76.             sb.Append(dt.Columns[i].ColumnName + ") values (");   
    77.     }   
    78.   
    79.     for(int i=0;i<cols;i++)   
    80.     {   
    81.         if(i < cols - 1)   
    82.             sb.Append("@" + dt.Columns[i].ColumnName + ",");   
    83.         else   
    84.             sb.Append("@" + dt.Columns[i].ColumnName + ")");   
    85.     }   
    86.   
    87.     //建立插入动作的Command   
    88.     objCmd.CommandText = sb.ToString();   
    89.     OleDbParameterCollection param = objCmd.Parameters;   
    90.   
    91.     for(int i=0;i<cols;i++)   
    92.     {   
    93.         param.Add(new OleDbParameter("@" + dt.Columns[i].ColumnName, OleDbType.VarChar));   
    94.     }   
    95.   
    96.     //遍历DataTable将数据插入新建的Excel文件中   
    97.     foreach (DataRow row in dt.Rows)   
    98.     {      
    99.         for (int i=0; i<param.Count; i++)   
    100.         {   
    101.             param[i].Value = row[i];   
    102.         }   
    103.   
    104.         objCmd.ExecuteNonQuery();   
    105.     }   
    106.   
    107.     return "数据已成功导入Excel";   
    108. }    
    109. //   Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=754176  

     

    九、利用OLEDB,以excel为数据库,把dataset中的数据导入到excel文件中

    [csharp] view plain copy
    1. public static void exportToExcelByDataset(string filePath, DataSet ds,XmlNode node)   
    2. {   
    3.     string sqlstr;    
    4.   
    5.     if(fi.Exists)   
    6.     {   
    7.          fi.Delete();   
    8.          //throw new Exception("文件删除失败");       
    9.     }   
    10.     else   
    11.     {   
    12.          fi.Create();   
    13.     }   
    14.       
    15.     string mailto:sqlcon=@%22Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended ProPerties=Excel 8.0;";   
    16.     OleDbConnection olecon = new OleDbConnection(sqlcon);   
    17.     OleDbCommand olecmd = new OleDbCommand();   
    18.     olecmd.Connection = olecon;   
    19.     olecmd.CommandType = CommandType.Text;   
    20.   
    21.     try   
    22.     {   
    23.         olecon.Open();   
    24.                
    25.         XmlNode nodec=node.SelectSingleNode("./Method/ShowField");   
    26.         int ii = 0;   
    27.         sqlstr = "CREATE TABLE sheet1(";   
    28.         foreach(XmlNode xnode in nodec.ChildNodes )   
    29.         {   
    30.            if(ii == nodec.ChildNodes.Count - 1)   
    31.            {   
    32.                if(xnode.Attributes["type"].Value.ToLower() == "int"||xnode.Attributes["type"].Value.ToLower() == "decimal")   
    33.                {   
    34.                    sqlstr=sqlstr + xnode.Attributes["displayname"].Value + " number)";          
    35.                }   
    36.                else   
    37.                {   
    38.                    sqlstr=sqlstr + xnode.Attributes["displayname"].Value + " text)";   
    39.                }   
    40.                // sqlstr=sqlstr + xnode.Attributes["displayname"].Value + " text)";   
    41.            }   
    42.            else   
    43.            {   
    44.                if(xnode.Attributes["type"].Value.ToLower() == "int"||xnode.Attributes["type"].Value.ToLower() == "decimal")   
    45.                {   
    46.                     sqlstr=sqlstr + xnode.Attributes["displayname"].Value + " number,";          
    47.                }   
    48.                else   
    49.                {   
    50.                     sqlstr=sqlstr + xnode.Attributes["displayname"].Value + " text,";   
    51.                }   
    52.            }   
    53.            //  sqlstr =sqlstr + xnode.Attributes["displayname"].Value + " text";          
    54.            ii++;   
    55.        }   
    56.        olecmd.CommandText = sqlstr;   
    57.        olecmd.ExecuteNonQuery();   
    58.        for(int i=0;i<ds.Tables[0].Rows.Count;i++)   
    59.        {   
    60.            sqlstr = "INSERT INTO sheet1 VALUES(";   
    61.            int jj=0;   
    62.            foreach(XmlNode inode in nodec.ChildNodes )   
    63.            {   
    64.                 if(jj == nodec.ChildNodes.Count-1)   
    65.                 {   
    66.                     if(inode.Attributes["type"].Value.ToLower() == "int"||inode.Attributes["type"].Value.ToLower() == "decimal")   
    67.                     {   
    68.                          sqlstr = sqlstr + isnull(ds.Tables[0].Rows[i].ItemArray[jj].ToString()) + ")" ;     
    69.                     }   
    70.                     else   
    71.                     {   
    72.                          sqlstr = sqlstr + "'" + isnull(ds.Tables[0].Rows[i].ItemArray[jj].ToString().Replace("'","''")) + "')" ;   
    73.                     }   
    74.                 }   
    75.                 else   
    76.                 {   
    77.                     if(inode.Attributes["type"].Value.ToLower() == "int"||inode.Attributes["type"].Value.ToLower() == "decimal")   
    78.                     {   
    79.                          sqlstr = sqlstr + isnull(ds.Tables[0].Rows[i].ItemArray[jj].ToString()) + "," ;   
    80.                     }   
    81.                     else   
    82.                     {   
    83.                          sqlstr = sqlstr + "'" + isnull(ds.Tables[0].Rows[i].ItemArray[jj].ToString().Replace("'","''")) + "'," ;   
    84.                     }   
    85.                 }   
    86.                 jj++;   
    87.            }   
    88.            olecmd.CommandText = sqlstr;   
    89.            olecmd.ExecuteNonQuery();   
    90.         }     
    91.         MessageBox.Show(@"Excel文件:" + filePath + " 导出成功!");   
    92.     }   
    93.     catch(Exception ex)   
    94.     {   
    95.         MessageBox.Show(ex.Message);   
    96.     }   
    97.     finally   
    98.     {   
    99.         olecmd.Dispose();   
    100.         olecon.Close();   
    101.         olecon.Dispose();   
    102.     }   
    103. }   
    104.   
    105. // 判断对象为空   
    106. private static string isnull(string obj)   
    107. {   
    108.     if(obj.Length >0)   
    109.     {   
    110.      return obj;   
    111.     }   
    112.     else   
    113.     {   
    114.      return "null";   
    115.     }    
    116. }  
  • 相关阅读:
    手机端布局
    雪碧图优缺点
    es6的基本数据详解
    react生命周期函数
    第七周作业-使用Python实现抽样分布的验证(正态分布、卡方分布、T分布等)
    第六章统计量及其抽样分布
    Python实现概率分布(二项分布、伯努利分布、泊松分布、几何分布、正态分布等)
    4.概率与概率分布
    3.描述性统计
    统计学小组
  • 原文地址:https://www.cnblogs.com/iDennis/p/5816783.html
Copyright © 2011-2022 走看看