将中包含页眉和子页眉的Excel文件导入数据库

本文关键字:文件 Excel 导入 数据库 包含页 | 更新日期: 2023-09-27 18:01:11

我有如下的excel表

Condom  Lubricant
dic_code    condom_receive  lubricant_receive
3   100 50
1   150 0
2   270 78

我想导入到数据库像下面的方式

dic_code    condom_receive  lubricant_receive
3   100 0
3   0   50
1   150 0
1   0   0
2   270 0
2   0   78

我已经用C#和ASP.net编写了代码,但它不起作用。请帮帮我。

    protected void importBtn_Click(object sender, EventArgs e)
    {
        var folder = Server.MapPath("~/temp/");
        if (!Directory.Exists(folder))
        {
            Directory.CreateDirectory(folder);
        }
        if (FileUpload1.HasFile)
        {
            string path = string.Concat((Server.MapPath("~/temp/" + FileUpload1.FileName)));

            FileUpload1.PostedFile.SaveAs(path);
            OleDbConnection OleDbcon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;");
            OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", OleDbcon);
            OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
            OleDbcon.Open();

            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            objAdapter1.Fill(ds);
            dt = ds.Tables[0];
            OleDbcon.Close();
            int number_of_columns = dt.Columns.Count;
            int number_of_rows = ds.Tables[0].Rows.Count;
            string[,] sheetEntries = new string[number_of_rows, number_of_columns];
            string[] columnNames = new string[number_of_columns];
            for (int j = 0; j < number_of_columns; j++)
            {
                columnNames[j] = dt.Columns[j].ToString();
            }
            for (int i = 0; i < number_of_rows; i++)
            {
                for (int j = 0; j < number_of_columns; j++)
                    sheetEntries[i, j] = dt.Rows[i].ItemArray.GetValue(j).ToString();
            }
            string strSQL1 = null;        
            for (int i1 = 0; i1 < number_of_rows; i1++)
            {
                if (sheetEntries[0, 1] == "Condom")
                {
                     strSQL1 = "INSERT INTO [import_test]([dic_code],[condom_receive],[lubricant_receive]) VALUES ("
                            + sheetEntries[i1, 0] + ",'" + sheetEntries[i1, 1] + "'," + 0 + ");";
                     SqlCommand cmd1 = new SqlCommand(strSQL1);
                     dc.Open();
                     cmd1.Connection = dc.GetConnection();
                     cmd1.ExecuteNonQuery();
                     Array.ForEach(Directory.GetFiles((Server.MapPath("~/temp/"))), File.Delete);
                     Label1.ForeColor = Color.Green;
                     Label1.Text = "Successfully inserted";
                     dc.Close();
                }
                if (sheetEntries[0, 2] == "Lubricant")
                {
                    strSQL1 = "INSERT INTO [import_test]([dic_code],[condom_receive],[lubricant_receive]) VALUES ("
                           + sheetEntries[i1, 0] + ",'" + 0 + "'," + sheetEntries[i1, 1] + ");";
                    SqlCommand cmd1 = new SqlCommand(strSQL1);
                    dc.Open();
                    cmd1.Connection = dc.GetConnection();
                    cmd1.ExecuteNonQuery();
                    Array.ForEach(Directory.GetFiles((Server.MapPath("~/temp/"))), File.Delete);
                    Label1.ForeColor = Color.Green;
                    Label1.Text = "Successfully inserted";
                    dc.Close();
                }
            }


        }
        else
        {
            Label1.ForeColor = Color.Red;
            Label1.Text = "Please select the File";
        }
    }

将中包含页眉和子页眉的Excel文件导入数据库

我已经按照以下方式更改了代码。及其工作

protected void importBtn_Click(object sender, EventArgs e)
{
    var folder = Server.MapPath("~/temp/");
    if (!Directory.Exists(folder))
    {
        Directory.CreateDirectory(folder);
    }
    if (FileUpload1.HasFile)
    {
        string path = string.Concat((Server.MapPath("~/temp/" + FileUpload1.FileName)));

        FileUpload1.PostedFile.SaveAs(path);
        OleDbConnection OleDbcon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;");
        OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", OleDbcon);
        //OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$a2:j]", OleDbcon);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
        OleDbcon.Open();

        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        objAdapter1.Fill(ds);
        dt = ds.Tables[0];
        OleDbcon.Close();
        int number_of_columns = dt.Columns.Count;

        string[] columnNames = new string[number_of_columns];
        int k;
        for (k = 0; k < number_of_columns; k++)
        {
            columnNames[k] = dt.Columns[k].ToString();
        }
        if (columnNames[0] == "v"|| columnNames[1] == "Condom" || columnNames[2] == "Lubricant")
        {
            OleDbCommand cl_cmd = new OleDbCommand("SELECT * FROM [Sheet1$a2:j]", OleDbcon);
            OleDbDataAdapter objAdapter2 = new OleDbDataAdapter(cl_cmd);
            OleDbcon.Open();

            DataSet ds1 = new DataSet();
            DataTable dt1 = new DataTable();
            objAdapter2.Fill(ds1);
            dt1 = ds1.Tables[0];
            OleDbcon.Close();
            int number_of_columns1 = dt1.Columns.Count;
            string[] columnNames1 = new string[number_of_columns1];
            int number_of_rows = ds1.Tables[0].Rows.Count;
            string[,] sheetEntries = new string[number_of_rows, number_of_columns];
            for (int j = 0; j < number_of_columns1; j++)
            {
                columnNames1[j] = dt1.Columns[j].ToString();
            }
            for (int i = 0; i < number_of_rows; i++)
            {
                for (int j = 0; j < number_of_columns1; j++)
                    sheetEntries[i, j] = dt1.Rows[i].ItemArray.GetValue(j).ToString();
            }
            string strSQL1 = null;
            for (int i1 = 0; i1 < number_of_rows; i1++)
            {
                if (columnNames[1] == "Condom")
                {
                    strSQL1 = "INSERT INTO [import_test]([dic_code],[condom_receive],[lubricant_receive]) VALUES ("
                           + sheetEntries[i1, 0] + ",'" + sheetEntries[i1, 1] + "'," + 0 + ");";
                    SqlCommand cmd1 = new SqlCommand(strSQL1);
                    dc.Open();
                    cmd1.Connection = dc.GetConnection();
                    cmd1.ExecuteNonQuery();
                    Array.ForEach(Directory.GetFiles((Server.MapPath("~/temp/"))), File.Delete);
                    Label1.ForeColor = Color.Green;
                    Label1.Text = "Successfully inserted";
                    dc.Close();
                }
                if (columnNames[2] == "Lubricant")
                {
                    strSQL1 = "INSERT INTO [import_test]([dic_code],[condom_receive],[lubricant_receive]) VALUES ("
                           + sheetEntries[i1, 0] + ",'" + 0 + "'," + sheetEntries[i1, 1] + ");";
                    SqlCommand cmd1 = new SqlCommand(strSQL1);
                    dc.Open();
                    cmd1.Connection = dc.GetConnection();
                    cmd1.ExecuteNonQuery();
                    Array.ForEach(Directory.GetFiles((Server.MapPath("~/temp/"))), File.Delete);
                    Label1.ForeColor = Color.Green;
                    Label1.Text = "Successfully inserted";
                    dc.Close();
                }
            }
        }

    }
    else
    {
        Label1.ForeColor = Color.Red;
        Label1.Text = "Please select the File";
    }
}