• .net excel 导入 导出


    哎,好好的代码今天说来个实验,结果用的是office15 气死人了,网上最高office14.dll 文章转自2012年 QQ群:13615607 MR.Young
     1  protected void BtnLoad_Click(object sender, EventArgs e)
     2         {
     3             //dataDR datadr = new dataDR();
     4             //datadr.delete("delete from dbo.yuepingjueyuerbiao");
     5             string fileName = DateTime.Now.ToString("yyMMddhhmmss") + ".xls";
     6             string path = Server.MapPath("~/upload/excel/") + fileName;
     7 
     8             FileUpload1.SaveAs(path);
     9             if (path != null)
    10             {
    11                DataSet ds=loadSouce(path);
    12             }
    13             else
    14             {
    15                 Response.Write("<script>alert('没有上传文件')</script>");
    16             }
    17         }
    18 
    19         protected void Button1_Click(object sender, EventArgs e)
    20         {
    21             CreateExcel(helps.GetDataTable("select * from tb_teacher"), "Test.xls");
    22         }
    View Code
    1  <div>
    2 
    3             <asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="BtnLoad" runat="server" Text="上传" OnClick="BtnLoad_Click" />
    4 
    5         </div>
    6 
    7         <asp:Button ID="Button1" runat="server" Text="下载" style="height: 21px" OnClick="Button1_Click" />
    View Code
    经过第二天想了以后,其实连接字符串什么都没有问题,最后得出来的结论是因为导出并非标准格式的excel,不行的粘贴一下即可

     导入方法

     1  private DataSet loadSouce(string path)
     2         {
     3 
     4 
     5             //连接EXCEL数据源
     6             //string strPath = this.getPath();
     7             //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=" + """ + "Excel 8.0;HDR=Yes;IMEX=1" + """;
     8 
     9             // string strConn = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source =" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
    10             string strConn = "Provider = Microsoft.ACE.OLEDB.15.0;Data Source =" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
    11             //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
    12             //备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。
    13             //      "IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。 
    14 
    15             OleDbConnection conn = new OleDbConnection(strConn);
    16 
    17             conn.Open();
    18 
    19             /*
    20              如果用户把sheet表名改了就是报下面的错:
    21             'sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。 
    22             如果可以动态获得Excel中各个sheet的名称能动态的选中返回哪个sheet的数据,
    23             即使用户更改了名称也不怕,完全可以把所有sheet的名称列出来供用户选择: 
    24             下面就把解决问题的代码列出来,主要用到了OleDbConnection.GetOleDbSchemaTable()方法
    25              */
    26 
    27             //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
    28             System.Data.DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
    29 
    30             //包含excel中表名的字符串数组
    31             string[] strTableNames = new string[dtSheetName.Rows.Count];
    32             for (int k = 0; k < dtSheetName.Rows.Count; k++)
    33             {
    34                 strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
    35             }
    36 
    37             //OleDbDataAdapter myCommand = null;
    38             System.Data.DataTable dt = new System.Data.DataTable();
    39 
    40             //从指定的表明查询数据,可先把所有表明列出来供用户选择
    41             string strExcel = "select * from [" + strTableNames[0] + "]";
    42 
    43 
    44 
    45             OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
    46 
    47             DataSet myDataSet = new DataSet();
    48 
    49 
    50             myCommand.Fill(myDataSet);
    51 
    52             return myDataSet;
    53         }
    View Code

    导出方法

     1  private void CreateExcel(System.Data.DataTable dt, string fileName)
     2         {
     3             HttpResponse resp;
     4             resp = Page.Response;
     5 
     6             resp.Buffer = true;
     7             resp.ClearContent();
     8             resp.ClearHeaders();
     9             resp.Charset = "GB2312";
    10 
    11 
    12             //  resp.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
    13             resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
    14             resp.ContentEncoding = System.Text.Encoding.Default;//设置输出流为简体中文   
    15             resp.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
    16 
    17 
    18 
    19             string colHeaders = "", ls_item = "";
    20 
    21             ////定义表对象与行对象,同时用DataSet对其值进行初始化
    22             //DataTable dt = ds.Tables[0];
    23             DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
    24 
    25             int i = 0;
    26             int cl = dt.Columns.Count;
    27 
    28 
    29             // colHeaders += "tttttttt" + "
    ";
    30             //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
    31             for (i = 0; i < cl; i++)
    32             {
    33                 if (i == (cl - 1))//最后一列,加n
    34                 {
    35                     colHeaders += dt.Columns[i].Caption.ToString().Trim() + "
    ";
    36                 }
    37                 else
    38                 {
    39                     colHeaders += dt.Columns[i].Caption.ToString().Trim() + "	";
    40                 }
    41 
    42             }
    43             resp.Write(colHeaders);
    44 
    45             //向HTTP输出流中写入取得的数据信息
    46 
    47 
    48 
    49             //逐行处理数据 
    50             foreach (DataRow row in myRow)
    51             {
    52                 //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据   
    53                 for (i = 0; i < cl; i++)
    54                 {
    55                     if (i == (cl - 1))//最后一列,加n
    56                     {
    57                         ls_item += row[i].ToString().Trim() + "
    ";
    58                     }
    59                     else
    60                     {
    61                         ls_item += row[i].ToString().Trim() + "	";
    62                     }
    63 
    64                 }
    65                 resp.Write(ls_item);
    66                 ls_item = "";
    67 
    68             }
    69             resp.End();
    70 
    71         }
    View Code

     记得引用Micorosoft.office.Interop.Excel

  • 相关阅读:
    Failed to convert WOFF 2.0 font to SFNT 字体图标显示不出来
    每日一字:困
    每日一字:biáng
    sqlserver数据类型简记
    每日一字:天
    可以作为今生目标的一句话
    每日一字:惑
    [转载]优秀程序员的12中能力
    每日一字:怒
    [转载]像树一样活着
  • 原文地址:https://www.cnblogs.com/yuanjiehot/p/4349255.html
Copyright © 2020-2023  润新知