Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 629|回复: 0

.net-Excel导入-OleDB方式(备注:表头在第二行/不在第一行 的解决方法)

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-21 01:17:15 | 显示全部楼层 |阅读模式

    优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快。

    缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个Sheet页读取出来后(结果为Datatable)再在Datatable中根据行列数来获取指定的值。

    当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常。

    aspx代码:

    <asp:FileUpload ID="FileUpload2" runat="server" Width="265px" Style=" float:left; height:25px;" />
    <asp:Button ID="Button2" runat="server" Text="第2阶段:建议答复及评比推荐表-导入" CssClass="pl" 
    Style="margin: 10px 10px; width:250px; float:left " onclick="Button2_Click" />

     

    cs代码:

    protected void Button2_Click(object sender, EventArgs e)
    {
    if (!FileUpload2.PostedFile.FileName.Trim().ToLower().EndsWith(".xls"))
    {
    this.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('只能上传Excel文件(.xls).');", true);
    return;
    }
    string strFullName = this.FileUpload2.PostedFile.FileName.ToString();
    //先上传文件到服务器固定路径
    string FileName = FileUpload2.PostedFile.FileName;
    string FilePathName = "";
    string strFileName = "";
    if (FileName != "")
    {
    string dateStr = DateTime.Now.ToString("yyyyMMddhhmmssms");
    string filename = Path.GetFileNameWithoutExtension(FileName);
    string oldfilekz = Path.GetExtension(FileName);
    FilePathName = Server.MapPath("~") + "File\\" + filename + dateStr + oldfilekz;
    FileUpload2.PostedFile.SaveAs(FilePathName);
    strFileName = Server.MapPath("~") + "File\\" + filename + dateStr + oldfilekz;
    }
    //以Excel做为数据库导入数据
    string strCon = "Provider=Microsoft.Jet.OleDb.4.0;"
    + "data source=" + strFileName + ";"
    + "Extended Properties='Excel 8.0;HDR=NO; IMEX=1'";
    
    ArrayList list = new ArrayList();
    int updatecount = 0;
    OleDbConnection con = new OleDbConnection(strCon);
    OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet0$]", con);
    DataSet ds = new DataSet();
    da.Fill(ds, "excel");
    
    DataTable dt = new DataTable();
    dt = GetExcelTable(ds.Tables["excel"]);
    //string aa = ds.Tables["excel"].Rows[3][1].ToString();
    if (dt.Rows.Count > 0)
    {
    for (int i = 0; i < dt.Rows.Count; i++)
    {
    updatecount += 1;
    StringBuilder Sql = new StringBuilder();
    string TOPICID = dt.Rows["序列号"].ToString();
    string STATE = (dt.Rows["是否采纳"].ToString() == "") ? "5" : "5-1";
    Sql.Append(" update bbs_topic set ZN_DEPT='" + ds.Tables["excel"].Rows["答复部门"].ToString() + "',DFR='" + dt.Rows["答复人"].ToString() + "',ZXJY='" + dt.Rows["是否属于专项建议"].ToString() + "',STATE='" + STATE + "',DFYJ='" + dt.Rows["答复意见"].ToString() + "',TA_YX='" + dt.Rows["是否推荐为优秀建议"].ToString() + "',TJJX='" + dt.Rows["推荐奖项"].ToString() + "' where TOPICID='" + TOPICID + "'");
    list.Add(Sql);
    }
    if (list.Count != 0)
    {
    if (DbCommon.SqlTranList(list)) {
    this.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('信息导入成功!');", true);
    }
    }
    }
    else
    {
    this.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('导入的文件没有记录!');", true);
    return;
    }
    }
    
     
    
    /// <summary>
    /// 去除不必要的标题行
    /// </summary>
    /// <param name="table"></param>
    /// <returns></returns>
    
    public DataTable GetExcelTable(DataTable table)
    {
    foreach (DataRow row in table.Rows)
    {
    if (!(row[0].ToString()).Equals("序列号"))
    {
    row.Delete();
    }
    else
    {
    break;
    }
    }
    table.AcceptChanges();
    for (int i = 0; i < table.Columns.Count; i++)
    {
    table.Columns.ColumnName = table.Rows[0].ToString();
    }
    table.Rows[0].Delete();
    table.AcceptChanges();
    //table = table.GetChanges(DataRowState.Unchanged);
    return table;
    }

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-12 15:31 , Processed in 0.066536 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表