ASP.NET读取Excel中的数据转存到数据库(二)

上回说到读取excel表格的时候,读取到的第一个表在实际运行中并不是Sheet1这个表,可能是一个中文表名,也可能是Sheet1。所以首先可以改进这个地方,代码如下:

 

DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"}); //得到所有sheet的名字
                string firstSheetName=null;
                for(int n=0;n<sheetsName.Rows.Count;n++)
                    if(sheetsName.Rows[n][2].ToString()=="Sheet1$")
                        firstSheetName = sheetsName.Rows[n][2].ToString(); //得到第一个sheet的名字


我们可以用if来判断找这个表名,这样就可以节省部分时间和精力。

 

 

在aspx页面上,可以设置一个label标签来显示后台处理过程中的提示信息。

 

后来出现了列数或者行数过多的情况,所以在处理数据的过程中,又对处理语句中进行了修改。根据上回的代码,此次修改后的代码如下所示:

 

            int i, j;
            int region = 0;
            //获取作物ID值
            cropnumber = int.Parse(CropID.Text.ToString());
            //获得更新数据库类型
            if (mianji.Checked == true)  //遇到播种面积时新增数据库条目
            {
                if (exceldt.Rows.Count == 40&&exceldt.Columns.Count==60)
                {
                    for (i = 2; i < 40; i++)   //省份
                    {
                        if (i == 3 || i == 9 || i == 13 || i == 21 || i == 28 || i == 34)  //跳过空白区域
                            continue;
                        //读取地域ID值
                        string proname = exceldt.Rows[i][0].ToString().Replace(" ", "");
                        string sqlstr = "select Region_ID from [DimRegion] where Province_Name='" + proname + "'";
                        DataTable dt = new DataTable();
                        dt = BaseClass1.ReadTable(sqlstr);
                        region = int.Parse(dt.Rows[0][0].ToString());
                        float area = 0;
                        for (j = 1; j < 60; j++)  //时间
                        {
                            if (exceldt.Rows[i][j].ToString() == "")
                                area = 0;
                            else
                                area = float.Parse(exceldt.Rows[i][j].ToString());
                            string str = "insert into[FactCropProducts](Time_ID,Region_ID,Croptype_ID,Area) values(" + j + "," + region + "," + cropnumber + "," + area + ")";
                            BaseClass1.execsql(str);
                        }
                    }
                    InfoExcel.Text = "播种面积信息添加成功!";
                }
                else
                { InfoExcel.Text = "Excel表格列数或者行数错误!行数为:"+exceldt.Rows.Count+",列数为:"+exceldt.Columns.Count; }
            }


此处可以首先对要处理的数据表进行列数与行数判断。如果过多或者过少则不进行数据库的添加或者修改,否则处理过程中发现问题则需要对数据库再进行删除操作,费时费力。

 

 

【发现的问题】在实际操作过程中,读取的表格数据可能会出现空白换行或者其他字符的形式。而这里需要的是一个浮点数,于是处理过程中会报异常情况。这个地方的处理还是比较不太好处理的。有些单元格的数据为“.”或者“0.4.”,所以现在还是需要一个思路去处理类似于这样的异常数据。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值