读取Excel资料并存入数据库的方法介绍

 

这里讨论的是如何将Excel中存放的资料存入数据库中相应栏位的方法

例如:

这是原始的Excel资料

  

这是导入到数据库中的存放形式

 


首先需要对Excel的内容进行修改操作,使其能够符合DB的基本格式,修改的方法可以在上传Excel文件的时候就执行,让上传后的文件是正确的格式。如果系统不需要实现上传功能,也必须将修改后的文件存放在某个位置。

 

下面举例说明如何修改

因为在将数据读入到DataTable的时候,会默认其中的第一行为表头,因此就需要对下面这样的Excel的第一行数据进行修改:

 

修改后需要变成这样的形式:

 

 

修改Excel方法如下(参考):

string sourceFile="phs_expense_summary.xls";//文件名

string templatePath=Server.MapPath("..")+"""Files""";//路径

string downloadPath=Server.MapPath("..");

string tempFileName="Test"+".xls";

Excel.Application   myExcel=new   Excel.Application();

myExcel.Visible=true;

            myExcel.Application.Workbooks.Open(templatePath+""""+sourceFile,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

Excel.Workbook   myBook=myExcel.Workbooks[1];  

Excel.Worksheet curSheet = (Excel.Worksheet)myBook.Sheets[1];

 

string   downloadFilePath=downloadPath+""""+tempFileName;

//Sheet重命名

curSheet.Name="Sheet1";

Excel.Range   range;    

 

//   取C1这个格的值  

range = curSheet.get_Range("C1",Type.Missing);  

range = range.get_Resize(1,1);  

string s = range.get_Value(Type.Missing).ToString();

 

if(s!="C"&&s!="c")

{

//删除Excel文件第一行数据

Range row=(Range)curSheet.Cells[1,Type.Missing];

    row.EntireRow.Delete(Excel.XlDirection.xlUp);

    //将现在第一行每列赋值

    myExcel.Cells[1,1]="A";

    myExcel.Cells[1,2]="B";

    myExcel.Cells[1,3]="C";

    myExcel.Cells[1,4]="D";

    myExcel.Cells[1,5]="E";

    myExcel.Cells[1,6]="F";

}

 

    int t=curSheet.UsedRange.Rows.Count;

    Excel.Range r;

    for(int i=1;i<=curSheet.UsedRange.Rows.Count;i++)

    {

        r=curSheet.get_Range(curSheet.Cells[i,3],curSheet.Cells[i,3]);

        string str=r.Text.ToString();

                                                 if(str==""||str==null||str=="aaaaaaa"||str=="bbbbbbb"||str=="ccccccc"||str=="ddddddd"||str=="eeeeeee"||str=="fffffff")

        {

((Excel.Range)curSheet.Rows[i,   Missing.Value]).Delete(Excel.XlDeleteShiftDirection.xlShiftUp);

                        i=i-1;

        }

    }

foreach (Excel.Workbook book in myExcel.Application.Workbooks)

{

      book.Save();

}

 

    myBook.Close(false,Type.Missing, Type.Missing);

    GC.Collect();

 

 

 

处理完对Excel内容的修改后,就可以对其进行读取。

在项目中创建一个读取Excel的类(ReadExcel.cs):

using System;

using System.Data;

using System.Data.OleDb;

 

namespace AUOITMS.Component.ObtainExcelTool

{

    /// <summary>

    /// 读文件

    /// </summary>

    /// <param "fileName">导入文件名称</param>

    /// <param "tableName">Excel中Sheet的名称 </param>

    public interface IReadExcel

    {

        DataTable ReadExcel(string fileName,string tableName);

    }

 

    /// <summary>

    /// ReadFile 的摘要说明。

    /// </summary>

    public class OleDbReadExcel:IReadExcel

    {

        public OleDbReadExcel()

        {

        }

        public DataTable ReadExcel(string fileName,string tableName)

        {

            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";

            strConn = strConn + fileName+";";

            strConn = strConn + "Extended Properties=Excel 8.0;";

            string strSql = "Select* from [" + tableName + "$]";

            try

            {

                OleDbConnection conn = new OleDbConnection(strConn);

 

                OleDbDataAdapter myCommand = new OleDbDataAdapter(strSql, strConn);

                DataSet myDataSet = new DataSet();

                myCommand.Fill(myDataSet,"Table");

                return myDataSet.Tables["Table"];

            }

            catch

            {

                throw new Exception("Please_Sure_ExcelName_And_Table_Are_Correct");

            }

        }

    }

}

Manager中定义:

public IReadExcel GetReadExcel()

{

    return new OleDbReadExcel();

}

 

这样,在页面上定义该Manager就可以进行读取:

AUOITMSAssetManager AUOITMS = new AUOITMSAssetManager(this);

IReadExcel obtainTable = AUOITMS.GetReadExcel();

DataTable dt = obtainTable.ReadExcel(strConn,txtTableName.Text.Trim());

注:这里的ReadExcel的两个参数分别对应Excel存放的路径和该Excel中相应的Sheet名称。需要注意的是,这里读取的应该是经过修改后的文件。

 

这样就完成了将Excel中的内容读取到DataTable中,Excel中的第一行数据将会默认为表头。接下来就可以对GridView进行绑定,或者将数据存入数据库中相应的Table

 

posted @ 2008-11-27 16:11  只想做好  阅读(2918)  评论(0编辑  收藏  举报