Oledb方式读取不规则(有合并单元格)Excel(记录)

需求分析

Web上传文件并读取成Datatable,页面展示并导入数据库中;。

相关格式

原始Excel
Oledb方式读取不规则(有合并单元格)Excel(记录)_第1张图片

Datatable读取
Oledb方式读取不规则(有合并单元格)Excel(记录)_第2张图片

相关栏位补全
Oledb方式读取不规则(有合并单元格)Excel(记录)_第3张图片

部分相关代码记录

// An highlighted block
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (FileUpload1.HasFile)
            {
                string savePath = Server.MapPath("~/upload/");//指定上传文件在服务器上的保存路径
                //检查服务器上是否存在这个物理路径,如果不存在则创建
                if (!System.IO.Directory.Exists(savePath))
                {
                    System.IO.Directory.CreateDirectory(savePath);
                }
                savePath = savePath + "\\" + FileUpload1.FileName;
                FileUpload1.SaveAs(savePath);
                DataTable dt = ReadExcelToTable(savePath,"B2","H20");

            }
        }

        /// 
        /// 
        /// 
        /// 文件路徑
        /// 文檔區域開始左上角坐標
        /// 文檔區域開始右下角坐標
        /// 
        public static DataTable ReadExcelToTable(string path,string startCoordinate,string endCoordinate)//excel存放的路径
        {
            try
            {
                //连接字符串
                //string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
                string connstring = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //Office 07以下版本 
                using (OleDbConnection conn = new OleDbConnection(connstring))
                {
                    conn.Open();
                    DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
                    string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
                    string sql = string.Format("SELECT * FROM [{0}{1}:{2}]", firstSheetName, startCoordinate, endCoordinate); //查询字符串
                    //string sql = string.Format("SELECT * FROM [{0}] WHERE [日期] is not null", firstSheetName); //查询字符串

                    OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
                    DataSet set = new DataSet();
                    ada.Fill(set);

                    DataTable dt = set.Tables[0];

                    //根據需求将需要的合併單元格进行分離
                    for (int j = 0; j < 2; j++)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            if (i == 0 && j == 0)
                            {
                                continue;
                            }
                            if (dt.Rows[i][j].ToString() == "")
                            {
                                dt.Rows[i][j] = dt.Rows[i - 1][j];
                            }
                        }
                    }
                    return dt ;
                }
            }
            catch (Exception)
            {
                return null;
            }
        }



你可能感兴趣的:(数据读取)