Импорт нескольких листов Excel в таблицы SQL Server - PullRequest
0 голосов
/ 26 сентября 2018

У меня около 20 файлов, все с 20 или более листами.Мне нужно импортировать конкретные данные из всех листов в таблицы (как те же столбцы, что и таблица).Мой код импортирует только один лист.Как импортировать несколько листов?А как импортировать конкретные ячейки из Excel?Я прочитал много вопросов, но ни один не делает то, что мне нужно, и большинство из них - старые

База данных - это SQL Server.Я надеюсь, что вы можете мне помочь.Я новичок.

public ActionResult Index()
{
   return View();
}

[HttpPost]
public ActionResult Index(HttpPostedFileBase postedFile)
{
        string filePath = string.Empty;

        if (postedFile != null)
        {
            string path = Server.MapPath("~/Uploads/");

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            filePath = path + Path.GetFileName(postedFile.FileName);
            string extension = Path.GetExtension(postedFile.FileName);
            postedFile.SaveAs(filePath);

            string conString = string.Empty;

            switch (extension)
            {
                case ".xls": //Excel 97-03.
                    conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
                    break;

                case ".xlsx": //Excel 07 and above.
                    conString = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString;
                    break;
            }

            DataTable dt = new DataTable();
            conString = string.Format(conString, filePath);

            using (OleDbConnection connExcel = new OleDbConnection(conString))
            {
                using (OleDbCommand cmdExcel = new OleDbCommand())
                {
                    using (OleDbDataAdapter odaExcel = new OleDbDataAdapter())
                    {
                        cmdExcel.Connection = connExcel;

                        //Get the name of First Sheet.
                        connExcel.Open();
                        DataTable dtExcelSchema;
                        dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        string sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
                        connExcel.Close();

                        //Read Data from First Sheet.
                        connExcel.Open();
                        cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";
                        odaExcel.SelectCommand = cmdExcel;
                        odaExcel.Fill(dt);
                        connExcel.Close();
                    }
                }
            }

            conString = ConfigurationManager.ConnectionStrings["Constring"].ConnectionString;
            using (SqlConnection con = new SqlConnection(conString))
            {
                using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                {
                    //Set the database table name.
                    sqlBulkCopy.DestinationTableName = "dbo.Table_1";

                    //[OPTIONAL]: Map the Excel columns with that of the database table
                    sqlBulkCopy.ColumnMappings.Add("Rut", "Rut");
                    sqlBulkCopy.ColumnMappings.Add("Nombres", "Nombres");
                    sqlBulkCopy.ColumnMappings.Add("Malla", "Malla");

                    con.Open();
                    sqlBulkCopy.WriteToServer(dt);
                    con.Close();
                }
            }
        }

        return View();
    }
}

1 Ответ

0 голосов
/ 03 октября 2018

Я не понимаю, как вы получите SQL Server, чтобы сделать это, и если вы можете заставить C # сделать это, это, вероятно, будет намного сложнее.Я имею в виду, у вас есть варианты, подобные этой ...

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', 'SELECT * FROM [Customers$]')

, которая будет импортировать все из листа с именем «Клиенты» (вам нужно сохранить этот символ $ там).Надеюсь, между всеми этими файлами Excel существует какая-то непротиворечивая картина, но я просто догадываюсь об этом.В любом случае, на вашем месте я бы установил AddIn по ссылке ниже.Следуйте GIU и агрегируйте свои данные в Excel, так как в этой среде манипулировать ими почти наверняка будет намного проще.Затем ... отправьте его из Excel на SQL Server.

https://www.rondebruin.nl/win/addins/rdbmerge.htm

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...