将Excel电子表格导入SQL Server

时间:2014-10-20 07:41:13

标签: sql excel

尝试在SQL中导入名为Clean_info241 data.xlsx的文件时出现问题

它位于:H:\ New_folder并位于服务器上

excel版本是2013年,我不想使用导入向导。

目标是能够在创建数据库的位置执行一次单击,使用电子表格中的数据并将其输入表中。我已经尝试了许多方法,没有运气,到目前为止只使用了导入向导。 所有其他代码都是写的。 数据位于excel中的2个选项卡上,名为johnKey $和davidcunliffe $

2 个答案:

答案 0 :(得分:0)

我认为你可以使用c#app做到这一点。

让我们说你的excel表就像这样。

ID姓名年龄
1 Sahan 28
2 Varanga 26

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Office.Interop.Excel; //You have to add it to reference and to add it to       reference you have to install Office package in your pc which runs the application or you can download this from Microsot

namespace ExcelImport
{
    class Program
    {
        static void Main(string[] args)
        {
            //string filePath = @"H:\New_folder\<YOUR FILE NAME>";
            string filePath = @"E:\Test.xlsx";

            Microsoft.Office.Interop.Excel.Application xlApp;
            Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;

            var missing = System.Reflection.Missing.Value;

            xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(filePath, false, true, missing, missing, missing, true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, '\t', false, false, 0, false, true, 0);
            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); //Here we say which tabs going to insert into database

            Microsoft.Office.Interop.Excel.Range xlRange = xlWorkSheet.UsedRange; //Get only worked range in excel sheet
            Array myValues = (Array)xlRange.Cells.Value2;

           int vertical = myValues.GetLength(0);
           int horizontal = myValues.GetLength(1);

           System.Data.DataTable dt = new System.Data.DataTable();

            // must start with index = 1
            // get header information
            for (int i = 1; i <= horizontal; i++)
            {
                dt.Columns.Add(new DataColumn(myValues.GetValue(1, i).ToString()));
            }


            // Get the row information
            for (int a = 2; a <= vertical; a++)
            {
                object val = myValues.GetValue(a, 1);
                if (val != null)
                {
                    object[] poop = new object[horizontal];
                    for (int b = 1; b <= horizontal; b++)
                    {
                        object colVal = null;
                        poop[b - 1] = colVal = myValues.GetValue(a, b);
                    }
                    DataRow row = dt.NewRow();
                    row.ItemArray = poop;
                    dt.Rows.Add(row);
                }
            }

            foreach (DataRow row in dt.Rows)
            {
                string id = row["ID"].ToString();
                string Name = row["Name"].ToString();
                string Age = row["Age"].ToString();

                string connectionString = "your connection string";

                SqlConnection con = new SqlConnection(connectionString);
                con.Open();

                StringBuilder insertQry = new StringBuilder();
                insertQry.AppendFormat("INSERT INTO YourTable(ID,Name,Age) VALUES({0},{1},{2})", id, Name, Age);

                SqlCommand cmd = new SqlCommand(insertQry.ToString(), con);
                cmd.ExecuteNonQuery();
            }
        }
    }
}

希望这有助于为您的问题找到解决方案。

答案 1 :(得分:0)

我会使用向导并保存为SSIS包(如果您使用的是旧版本的SQL Server,则为DTS)。 然后我会修改包,因此XLS文件名和工作表名称将是变量。

在此之后,您可以随意包装此包的执行。是一个带有按钮,VB脚本,代理作业或其他任何东西的WinForms ......