在C#.Net中动态选择Excel工作表中的单元格范围

时间:2011-08-05 04:25:14

标签: c# excel ole

我正在准备将数据从excel表导入到sql server 2005.当我从excel表导入数据到数据库时,我几乎没有要求。我搜索了很多但是我找不到答案而且我得到了混淆了,所以想到我在这里问我的查询.excel表格就是这样的。

     第一行包含标题“交易”
    第二行包含SubHeading“Date”
    从第三行开始,数据以列名开头,后跟resp.rows中的数据。

CustId CustName OUtlet TerminalNum   Date     DateTime               Amount<br/>
   1    Nazima   SS     770012234  1/22/2011   1/22/2011 12:34:45    1500.50<br/>

这是excel表格中数据的方式。

我试图上传图片但发布问题时显示问题。我输入了。

我的要求是,当我将数据从excel表导入数据库时​​,我必须忽略前两行,并且必须从第三行导入数据,我必须导入totalamount(62854)和总行数(11)在一个表和其他表中的数据。

我可以使用oledbcommand导入数据:

oledbcommand cmd=new oledbcommand("select * from [sheet1$]",con);

oledbcomaand cmd=new oledbcommand("select * from [sheet1$A3:H13]",con);

这两个语句正在运行,但我不希望这样,因为最终用户可以从任何单元格输入数据,所以我想动态指定工作表和范围。在最终用户开始输入数据的任何单元格中,数据沿着总数和行数应该导入到数据库中的reso.tables而没有任何问题。

而且我想知道当最终用户在excel表中输入新行而不插入表中已存在的前一行时,如何在表中插入新行。

接下来我想知道哪个是从excel导入数据到数据库的最佳方法。通过excel互操作或通过Oledb.I尝试使用导入/导出向导,SSIS,他们正在工作,但我必须这样做编程。

给我一​​些指导,我如何才能执行这些过程。

希望你理解我的怀疑。

enter image description here

1 个答案:

答案 0 :(得分:0)

使用Interop会有一种简单而且更好的方法。但是,我从未使用过它,因此不知道如何使用它。

My requirement is that when i import data from excel sheet to database i have to ignore the first two rows and have to import data from third row and i have to import totalamount(62854) and total no.of rows(11) in one table and data in other table.

  • 使用DataSet
  • 将数据加载到OleDbDataAdapter
  • 操纵DataSet,即执行所需的操作。
  • 现在将DataSet的数据插入到您想要的Database

修改

示例代码:

    public static void ExcelOperations(string ConnectionString)
    {
        try
        {
            DataTable Sheets = new DataTable();

            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                connection.Open();

                //Retrieve the Sheets
                Sheets = connection.GetSchema("Tables");

                //Display the Sheets
                foreach (DataRow sheet in Sheets.Rows)
                {
                    Console.WriteLine(sheet["TABLE_NAME"]);
                }

                //Take the First Sheet
                string firstSheet = Sheets.Rows[0][2].ToString();

                //Retrieve contents
                DataSet Contents = new DataSet();
                using (OleDbDataAdapter adapter = new OleDbDataAdapter("select FirstName,LastName,Email,Mobile from [" + firstSheet + "]", connection))
                {
                    adapter.Fill(Contents, "MyTable");
                }

                //Display the contents
                foreach (DataRow content in Contents.Tables["MyTable"].Rows)
                {
                    Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
                }
                Console.WriteLine();

                //Remove First Row; Note: This is not heading!
                Contents.Tables["MyTable"].Rows.RemoveAt(0);

                //Since the first row is removed, Second Row becames first row now.
                //Clearing the LastName of our First Row.
                Contents.Tables["MyTable"].Rows[0][1] = "";

                //Displaying the Contents
                foreach (DataRow content in Contents.Tables["MyTable"].Rows)
                {
                    Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
                }
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }