Tải dữ liệu từ Excel sang SQL Server bằng SSIS Script Task

Tôi được yêu cầu tải nhiều tệp Excel, mỗi tệp có nhiều bảng tính Excel. Tôi đã tìm thấy một cách rất dễ dàng để hoàn thành việc này trong SSIS bằng Tác vụ tập lệnh. Bài viết này sẽ giải thích làm thế nào tôi đã làm điều này

Trong ví dụ này, tôi có hai tệp Excel, File1. xlsx và File2. xlsx, như được hiển thị ở đây

Mỗi File Excel có 3 sheet là sheet1, sheet2, sheet3. Mỗi trang tính có hai cột, Tên tệp và tên trang tính và tôi đã chèn một hàng vào mỗi trang tính như hình bên dưới

Mỗi trang tính Excel phải có cùng một lược đồ cho bất kỳ dữ liệu nào được lưu trữ

Để tải dữ liệu, chúng tôi bắt đầu bằng cách tạo một bảng có cấu trúc phù hợp với từng trang tính

CREATE TABLE dbo.Excelfiledata
[ 
[Filename] varchar[50],
[Sheetname] vawrchar[50]
];

Tiếp theo, chúng tôi tạo một gói SSIS. Mở Visual Studio và tạo một dự án Dịch vụ tích hợp mới

Trong dự án, tạo hai biến kiểu dữ liệu chuỗi, như hình bên dưới. Nhập đường dẫn thư mục cho các tệp Excel trong Biến FolderPath và tên của bảng đã tạo ở trên trong biến TableName

Trong Trình quản lý kết nối, thêm một ADO mới. kết nối mạng và cung cấp tên phiên bản và tên cơ sở dữ liệu, cùng với bất kỳ thông tin xác thực nào khác cần thiết

Ghi chú. Đặt tên cho kết nối là Sqlconnection. Điều này được hiển thị dưới đây

Tiếp theo, chúng tôi kéo một Tác vụ tập lệnh vào màn hình Luồng điều khiển

Mở Tác vụ tập lệnh và trong phần Tập lệnh, chúng ta cần chỉnh sửa thuộc tính Readonlyvariables. Nhập các biến đã tạo ở trên, với User. cấu trúc tên biến. Điều này được thể hiện trong hình dưới đây

Chọn "Chỉnh sửa tập lệnh" và sao chép mã C# sau vào hộp chỉnh sửa. Mã này sẽ lặp qua tất cả các tệp, mở từng tệp và sau đó lặp qua từng trang tính

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
public void Main[]
{
            String FolderPath = Dts.Variables["User::FolderPath"].Value.ToString[];
            String TableName = Dts.Variables["User::TableName"].Value.ToString[];
            var directory = new DirectoryInfo[FolderPath];
            FileInfo[] files = directory.GetFiles[];
            //Declare and initilize variables
            string fileFullPath = "";
            //Get one Book[Excel file at a time]
            foreach [FileInfo file in files]
            {
                fileFullPath = FolderPath + "\\" + file.Name;
                //Create Excel Connection
                string ConStr;
                string HDR;
                HDR = "YES";
                ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
                //Get sheetnames
                OleDbConnection cnn = new OleDbConnection[ConStr];                
                cnn.Open[];
                DataTable dtSheet = cnn.GetOleDbSchemaTable[OleDbSchemaGuid.Tables, null];
                string sheetname;
                sheetname = "";
                foreach [DataRow drSheet in dtSheet.Rows]
                {
                    if [drSheet["TABLE_NAME"].ToString[].Contains["$"]]
                    {
                        sheetname = drSheet["TABLE_NAME"].ToString[];
                    }
                    //ADO.NET Connection
                    SqlConnection myADONETConnection = new SqlConnection[];
                    myADONETConnection = [SqlConnection][Dts.Connections["Sqlconnection"].AcquireConnection[Dts.Transaction] as SqlConnection];

                    //Get data from Excel Sheet
                    OleDbCommand oconn1 = new OleDbCommand["select * from [" + sheetname + "]", cnn];
                    OleDbDataAdapter adp1 = new OleDbDataAdapter[oconn1];
                    DataTable dt1 = new DataTable[];
                    adp1.Fill[dt1];
                   
                    //Load data into Table  
                    using [SqlBulkCopy BC = new SqlBulkCopy[myADONETConnection]]
                    {
                        BC.DestinationTableName = "dbo." + TableName;
                        foreach [var column in dt1.Columns]
                            BC.ColumnMappings.Add[column.ToString[], column.ToString[]];
                        BC.WriteToServer[dt1];
                    }
                }
                cnn.Close[];

            }

Lưu và chạy gói. Nếu bạn có đường dẫn và tên biến chính xác, bạn sẽ thấy gói thực thi thành công

Trong mẹo cuối cùng của tôi, "Nhập dữ liệu từ Excel bằng SSIS - Phần 1", chúng tôi đã phát hiện ra rằng Trình quản lý kết nối SSIS Excel xác định loại dữ liệu của từng cột của trang tính trên cơ sở dữ liệu cho cột cụ thể đó từ 8 hàng đầu tiên. Đây là hành vi mặc định và trình quản lý kết nối sử dụng một giá trị trong khoá đăng ký để xem xét số lượng hàng để xác định kiểu dữ liệu. Chúng tôi cũng thấy rằng quá trình nhập dữ liệu không thành công nếu dữ liệu trong các hàng khác [ngoài 8 hàng đầu tiên] không tương thích hoặc có độ dài lớn hơn dữ liệu trong 8 hàng đầu tiên. Tôi đã nói về các cách khác nhau để xử lý vấn đề này để nhập dữ liệu thành công. Tôi cũng đã nói về giải pháp đơn giản nhất là thay đổi giá trị khoá đăng ký, nhưng điều này có ý nghĩa riêng của nó và do đó là câu hỏi;

Dung dịch

Trong mẹo cuối cùng của tôi, giải pháp đơn giản nhất là thực hiện thay đổi trong sổ đăng ký nhưng trong nhiều tình huống, bạn có thể không có quyền kiểm soát để thực hiện thay đổi này vì nhiều lý do. Ngay cả khi bạn có quyền kiểm soát trong việc thay đổi cài đặt này, thì thay đổi này có thể khiến các gói SSIS khác của bạn hoạt động kém [dựa trên lượng dữ liệu bạn có trong trang tính Excel] và nó cũng có thể ảnh hưởng đến các hệ thống khác ở bất kỳ nơi nào khóa đăng ký này được tham chiếu. Vì vậy, tôi có một giải pháp khác cho vấn đề này

Ý tưởng cơ bản của giải pháp này là chuyển đổi trang tính Excel thành tệp CSV và sử dụng Bộ điều hợp nguồn/Trình quản lý kết nối tệp phẳng để nhập dữ liệu từ tệp CSV. Với Trình quản lý kết nối tệp phẳng/Bộ điều hợp nguồn, chúng tôi có nhiều quyền kiểm soát hơn để xác định loại dữ liệu và độ dài của từng cột

Đây là những câu hỏi xuất hiện trong đầu khi nghĩ đến việc chuyển đổi trang tính Excel thành tệp CSV

  • Khi lưu trang tính Excel bằng tiện ích mở rộng csv, điều này có biến nó thành tệp CSV không?
  • Tệp CSV sử dụng dấu phẩy làm dấu tách cột, nhưng nếu có dấu phẩy trong chính dữ liệu thì sao?
  • Tác động của việc chuyển đổi trang tính Excel sang tệp CSV là gì?

Chà, chỉ cần lưu trang tính Excel bằng tiện ích mở rộng CSV sẽ không biến nó thành tệp CSV vì định dạng lưu trữ là khác nhau đối với cả hai loại tệp này. Thay vào đó, chúng tôi có thể sử dụng Thư viện đối tượng Excel để lưu trang tính Excel dưới dạng tệp CSV bằng Tác vụ tập lệnh trong SSIS và sau đó chúng tôi có thể nhập dữ liệu trực tiếp từ tệp CSV như được hiển thị bên dưới.  

Trong Tác vụ Script, khi viết mã để chuyển đổi, trước hết bạn cần thêm tham chiếu đến Microsoft. Văn phòng. tương tác. Excel dưới. NET như hình bên dưới.  

Sau khi thêm tham chiếu bắt buộc, nút Tham chiếu trong Solution Explorer sẽ trông như thế này

Khi bạn đã thêm tham chiếu cần thiết, bạn có thể thêm các dòng mã này. Danh sách đầy đủ mã để chuyển đổi trang tính Excel sang tệp CSV được cung cấp bên dưới. Bạn cần cung cấp vị trí và tên của trang tính Excel cùng với tên của chính trang tính đó, sau đó là vị trí và tên cho tệp CSV sẽ được tạo

/*
   Microsoft SQL Server Integration Services Script Task
   Write scripts using Microsoft Visual C# 2008.
   The ScriptMain is the entry point class of the script.
*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Excel; 
namespace ST_6dc747ff29cf41c6ac11b7c0bca33d19.csproj
{
    [System.AddIn.AddIn["ScriptMain", Version = "1.0", Publisher = "", Description = ""]]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        #region VSTA generated code
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion
        /*
  The execution engine calls this method when the task executes.
  To access the object model, use the Dts property. Connections, variables, events,
  and logging features are available as members of the Dts property as shown in the following examples.
  To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;
  To post a log entry, call Dts.Log["This is my log text", 999, null];
  To fire an event, call Dts.Events.FireInformation[99, "test", "hit the help message", "", 0, true];
  To use the connections collection use something like the following:
  ConnectionManager cm = Dts.Connections.Add["OLEDB"];
  cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";
  Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
  
  To open Help, press F1.
 */
        private static Workbook mWorkBook;
        private static Sheets mWorkSheets;
        private static Worksheet mWSheet1;
        private static Excel.Application oXL;
        private static string ErrorMessage = string.Empty;
        public void Main[]
        {
            try
            {
                string sourceExcelPathAndName = @"D:\Excel Import\Excel Import.xls";
                string targetCSVPathAndName = @"D:\Excel Import\Excel Import.csv";
                string excelSheetName = @"Sheet1";
                string columnDelimeter = @"|#|";
                int headerRowsToSkip = 0;
                if [ConvertExcelToCSV[sourceExcelPathAndName, targetCSVPathAndName, excelSheetName, columnDelimeter, headerRowsToSkip] == true]
                {
                    Dts.TaskResult = [int]ScriptResults.Success;
                }
                else
                {
                    Dts.TaskResult = [int]ScriptResults.Failure;
                }
            }
            catch [Exception ex]
            {
                Dts.TaskResult = [int]ScriptResults.Failure;
            }
        }
        public static bool ConvertExcelToCSV[string sourceExcelPathAndName, string targetCSVPathAndName, string excelSheetName, string columnDelimeter, int headerRowsToSkip]
        {
            try
            {
                oXL = new Excel.Application[];
                oXL.Visible = false;
                oXL.DisplayAlerts = false;
                Excel.Workbooks workbooks = oXL.Workbooks;
                mWorkBook = workbooks.Open[sourceExcelPathAndName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false];
                //Get all the sheets in the workbook
                mWorkSheets = mWorkBook.Worksheets;
                //Get the specified sheet
                mWSheet1 = [Worksheet]mWorkSheets.get_Item[excelSheetName];
                Excel.Range range = mWSheet1.UsedRange;
                //deleting the specified number of rows from the top
                Excel.Range rngCurrentRow;
                for [int i = 0; i < headerRowsToSkip; i++]
                {
                    rngCurrentRow = range.get_Range["A1", Type.Missing].EntireRow;
                    rngCurrentRow.Delete[XlDeleteShiftDirection.xlShiftUp];
                }
                //replacing ENTER with a space
                range.Replace["\n", " ", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing];
                //replacing COMMA with the column delimeter
                range.Replace[",", columnDelimeter, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing];
                mWorkBook.SaveAs[targetCSVPathAndName, XlFileFormat.xlCSVMSDOS,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
                Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, false];
                return true;
            }
            catch [Exception ex]
            {
                ErrorMessage = ex.ToString[];
                return false;
            }
            finally
            {
                if [mWSheet1 != null] mWSheet1 = null;
                if [mWorkBook != null] mWorkBook.Close[Type.Missing, Type.Missing, Type.Missing];
                if [mWorkBook != null] mWorkBook = null;
                if [oXL != null] oXL.Quit[];
                System.Runtime.InteropServices.Marshal.ReleaseComObject[oXL];
                if [oXL != null] oXL = null;
                GC.WaitForPendingFinalizers[];
                GC.Collect[];
                GC.WaitForPendingFinalizers[];
                GC.Collect[];
            }
        }
    }
}

Dưới đây bạn có thể thấy trang tính Excel mà tôi đang sử dụng làm tệp nguồn để chuyển đổi. Bạn sẽ nhận thấy hàng số 15 có một chuỗi dài và mô tả của hàng này cũng chứa dấu phẩy trong đó

Sau khi chuyển đổi, tệp CSV sẽ trông như thế này. Bạn sẽ nhận thấy nơi có dấu phẩy, bây giờ chúng tôi có một số ký tự đặc biệt ". #. "

Ý tưởng đằng sau điều này là, trước khi chuyển đổi, hãy thay thế tất cả các dấu phẩy bằng một số ký tự đặc biệt và sau khi nhập dữ liệu từ tệp CSV, hãy cập nhật các ký tự đặc biệt trở lại dấu phẩy. Điều này có thể được thực hiện bằng cách sử dụng mã như thế này

SELECT * FROM [dbo].[ProductInformation]
UPDATE [dbo].[ProductInformation]
SET [Description] = REPLACE[[Description], '|#|', ',']
SELECT * FROM [dbo].[ProductInformation] 

Để sử dụng phương pháp này, chúng tôi cần có thêm dung lượng lưu trữ để có cả tệp CSV cùng với tệp Excel. Ngoài ra, thư viện đối tượng Excel sẽ mất vài giây để lưu tệp dưới dạng tệp CSV. Tôi chưa thử trên tệp rất lớn, mặc dù tôi nghĩ việc này sẽ không mất nhiều thời gian hơn. Khi bạn đã tải dữ liệu, bạn có thể làm bất cứ điều gì khác mà bạn cần vào thời điểm đó

Bước tiếp theo
  • Xem lại Nhập dữ liệu từ Excel bằng SSIS - Phần 1 mẹo
  • Xem lại các Dịch vụ Tích hợp và Mẹo Excel
  • Đánh giá Nhập dữ liệu unicode của Excel bằng mẹo Dịch vụ tích hợp máy chủ SQL


Những bài viết liên quan

Nhập dữ liệu unicode của Excel bằng Dịch vụ tích hợp máy chủ SQL

Truy xuất lược đồ Excel bằng dịch vụ tích hợp SQL SSIS

Sử dụng SSIS để nhập một ô của tệp Excel vào SQL Server

Tự động tìm nơi dữ liệu bảng bắt đầu trong Excel bằng SSIS

Nhập Dữ Liệu Từ Excel Bằng SSIS - Phần 1

Định cấu hình Nguồn tệp phẳng trong Dịch vụ tích hợp máy chủ SQL 2012 để đọc tệp CSV

Cách đọc dữ liệu từ tệp Excel bắt đầu từ hàng thứ n với SQL Server Integration Services

Cách đọc dữ liệu từ nhiều bảng tính Excel với SQL Server Integration Services

Cách đọc dữ liệu từ nhiều file Excel với SQL Server Integration Services

Xuất dữ liệu máy chủ SQL sang nhiều trang tính Excel với Dịch vụ tích hợp

Xuất dữ liệu máy chủ SQL sang nhiều trang tính Excel bằng Dịch vụ tích hợp máy chủ SQL

Xuất dữ liệu MySQL sang Excel bằng Dịch vụ tích hợp máy chủ SQL

Sử dụng Dịch vụ tích hợp máy chủ SQL để tạo tệp Excel dựa trên tiêu chí

Các bài viết phổ biến

Chuyển đổi ngày và giờ bằng SQL Server

Định dạng ngày máy chủ SQL với chức năng FORMAT

SQL Server ÁP DỤNG CHÉO và ÁP DỤNG NGOÀI

SQL Server DROP TABLE IF EXISTS Các ví dụ

Ví dụ về con trỏ máy chủ SQL

Toán tử SQL NOT IN

Cuộn nhiều hàng thành một hàng và cột cho dữ liệu SQL Server

Làm cách nào để biết bạn đang chạy phiên bản SQL Server nào

SQL Chuyển đổi ngày thành YYYYMMDD

Giải quyết lỗi không thể mở kết nối với SQL Server

Cộng và trừ ngày bằng cách sử dụng DATEADD trong SQL Server

Máy chủ SQL lặp qua các hàng của bảng mà không cần con trỏ

Số lượng hàng của máy chủ SQL cho tất cả các bảng trong cơ sở dữ liệu

Sử dụng MERGE trong SQL Server để chèn, cập nhật và xóa cùng một lúc

Cách lấy ngày hiện tại trong SQL Server

Nối các cột Máy chủ SQL thành một Chuỗi với CONCAT[]

Các cách so sánh và tìm sự khác biệt cho các bảng và dữ liệu SQL Server

Cơ sở dữ liệu máy chủ SQL bị kẹt trong trạng thái khôi phục

Định dạng số trong SQL Server

Thực thi các lệnh SQL động trong SQL Server








Giới thiệu về tác giả

Arshad Ali là Nhà phát triển SQL và BI tập trung vào các dự án Kho dữ liệu cho Microsoft.

Xem tất cả mẹo của tôi



Bài viết được cập nhật lần cuối. 2012-10-02

Nhận xét cho bài viết này

Thêm nhận xét


Thứ ba, ngày 12 tháng 4 năm 2016 - 6. 35. 14 giờ chiều - Bruce Hendry [41207]

Gửi Pablo và bất kỳ ai khác đang sử dụng mã trong bài viết và gặp lỗi "không thể tìm thấy một hoặc nhiều loại cần thiết để biên dịch biểu thức động". thêm một tham chiếu đến Microsoft. CSharp. NET trong tài liệu tham khảo dự án

Bài báo được viết tốt và mẫu mã chất lượng tốt, cảm ơn

 

 


Chủ nhật, ngày 14 tháng 2 năm 2016 - 11. 53. 51 giờ chiều - Douglas [40680]

 

Tìm thấy vấn đề tôi đang gặp phải. Tôi đã thực hiện tìm và thay thế thủ công trong tệp để xóa dấu phẩy và Excel cho biết, 'Bạn đang cố thay đổi công thức phải không?'

Các công thức ở cuối hàng thứ hai của tôi. Vì vậy, tôi đã loại bỏ các công thức và không gặp vấn đề gì với quy trình này nữa.  

 

Cảm ơn bạn rất nhiều vì mã này


Chủ nhật, ngày 14 tháng 2 năm 2016 - 7. 59. 50 giờ chiều - Douglas [40677]

Cảm ơn vì mã

Trong một số tệp, phạm vi. thay thế ',' không tìm thấy tất cả dấu phẩy. Nó luôn chỉ thực hiện thay thế trong hai hàng đầu tiên. Để gỡ lỗi, tôi kiểm tra ngay phạm vi đã sử dụng sau bước thay thế và thấy rằng nó bao gồm 2.000 hàng như tôi mong đợi

Điều này không hoạt động đối với nhiều tệp khác có cùng định dạng. Có ai khác có vấn đề này? .  

 

 


Thứ ba, ngày 14 tháng 4 năm 2015 - 5. 50. 21h - Pablo Guereca [36936]

Xin chào, tôi đang gặp lỗi với mã này trong phần

 

mWSheet1 = [Bảng tính]mWorkSheets. get_Item[excelSheetName];

 

không thể tìm thấy một hoặc nhiều loại cần thiết để biên dịch biểu thức động. bạn có mất tích không"

 

Tôi đang sử dụng SSIS 2012

 

 


Chủ nhật, ngày 12 tháng 4 năm 2015 - 2. 37. 45 giờ sáng - SQL2008 [36908]

xin chào Arshad, cảm ơn vì bài đăng về chuyển đổi xl sang csv một cách linh hoạt, tôi đang nghiên cứu một khái niệm tương tự về tải tệp xl có nhiều trang tính vào bảng SQL bằng c#, tôi muốn thay thế kết nối ["Excel"] được chuyển từ một

// Nhận chuỗi kết nối từ Trình quản lý kết nối Excel và sử dụng nó để kết nối thông qua OLE DB

OleDbConnection excelConnection = new OleDbConnection[Dts. Kết nối["Excel"]. Chuỗi kết nối];

kết nối excel. Mở[];

bạn có thể hướng bất kỳ tài liệu tham khảo nào về loại tình huống này không, đánh giá cao phản hồi của bạn,

cảm ơn


Thứ tư, 29 Tháng mười 2014 - 12. 30. 23:00 - Hussaini [35112]

Xin chào Arshad,

Cảm ơn Arshad đã giải thích rất rõ ràng và chi tiết. Tôi biết câu hỏi của mình không liên quan đến chủ đề này nhưng tương tự hơn. Tôi muốn nhập dữ liệu từ MS Access và tôi đã thử vài lần nhưng không thành công. Bạn có chủ đề hoặc ghi chú nào có thể giúp chúng tôi không

 

Cảm ơn,

hussaini.  


Thứ hai, 31 Tháng ba 2014 - 7. 21. 24h - rick [29931]

Làm cách nào để chúng tôi chạy cái này từ Công việc Tác nhân Máy chủ SQL như Curly đã nói?


Thứ tư, ngày 18 tháng 12 năm 2013 - 2. 23. 45 giờ chiều - Scott Coleman [27833]

Nếu bạn định sử dụng Excel interop để tải bảng tính, tại sao bạn không chuyển mã từ Tác vụ tập lệnh sang Thành phần nguồn tập lệnh? . Sau đó, bạn có toàn quyền kiểm soát cách mọi cột được diễn giải


Thứ hai, ngày 14 tháng 10 năm 2013 - 2. 45. 50 giờ chiều - Robert Mitchell [27146]

Stuart,

 

Có vẻ như việc thêm "IMEX=1" sẽ giải quyết được mọi thứ, nhưng thực tế thì không phải vậy. Ngay cả khi IMEX được đặt thành 1, nếu một cột có dữ liệu mà trình điều khiển ISAM của Excel hiểu là số trong tám hàng đầu tiên, thì nó vẫn sẽ đặt kiểu dữ liệu cột là "số" cho dù IMEX có = 1 hay không và sẽ vẫn trả về NULL nếu . Ví dụ của tôi là trường số đơn đặt hàng của khách hàng trong đó mười lăm mục nhập đầu tiên là số, chẳng hạn như 65088976 và mục nhập thứ mười sáu là C65098787. Nguồn Excel trả về ô này và bất kỳ ô nào khác giống như nó, dưới dạng NULL. Việc tăng số lượng hàng để sử dụng cho dự đoán là không cần thiết, vì tôi không thể can thiệp vào cài đặt đăng ký trên máy chủ sản xuất. [Tôi đã thử nó trên máy trạm cục bộ của mình để xem nó có hoạt động không và dù sao thì nó cũng không hoạt động, vì vậy nó vẫn không phải là một giải pháp. ] Tôi đã thử chèn các tác vụ chuyển đổi dữ liệu, tác vụ cột dẫn xuất, v.v., nhưng việc giảm giá trị ô thực tế xảy ra tại thời điểm nguồn Excel đọc hàng.  


Thứ hai, 29 Tháng bảy 2013 - 4. 39. 19 AM - Abhi Desai [26040]

Xin chào Arshad,

Cảm ơn cho bài viết tuyệt vời như vậy và ngôn ngữ đơn giản của bạn

Cả Phần 1 và Phần 2 của bạn đều thực sự hữu ích

Ragards,
Abhi Desai


Thứ ba, ngày 4 tháng 6 năm 2013 - 11. 25. 42 giờ sáng - Arshad [25280]

Xin chào Stuart và Izhar,

Xin vui lòng có một cái nhìn này

http. //xã hội. msd. Microsoft. com/Forums/en-US/sqlintegrationservices/thread/78b87712-8ffe-4c72-914b-f1c031ba6c75


Thứ hai, 03 Tháng sáu 2013 - 10. 32. 55 giờ sáng - Stuart Steedman [25254]

Điều này xuất hiện như một bài báo nổi bật ngày hôm nay. Tuy nhiên, những lý do cho nó và giải pháp cho vấn đề đều được hình thành kém

 

Giải pháp cho vấn đề là đặt chuỗi kết nối bằng cờ phụ. IMEX=1

[Như Izhar Azati đã đề cập trong phần bình luận ở Phần 1]

Điều này làm cho toàn bộ mục đích của bài viết này lỗi thời

 

Thứ hai, việc chuyển đổi sổ làm việc nhiều trang tính thành CSV sẽ không hoạt động và ngay cả khi đó chỉ là một trang tính duy nhất, đây là một chi phí lớn mà không có lý do chính đáng


Chủ nhật, 2 Tháng sáu 2013 - 11. 40. 26 AM - Faran [25241]

Chào các cậu

tôi đã thử nó. Đã cài đặt excel. Vấn đề là tôi không thể thêm tài liệu tham khảo Microsoft. Văn phòng. tương tác. Excel dưới. NET  trong Tác vụ tập lệnh,  bởi vì nó không có trong danh sách. Bất kỳ trợ giúp sẽ được đánh giá cao?

 

Trân trọng

 

Faran


Thứ sáu, 24 Tháng năm 2013 - 2. 29. 44 giờ sáng - tro [25116]

 

Chào

tôi đã tạo tệp excel từ bảng sql nhưng đối với các cột varchar

tôi nhận được dấu nháy đơn trước văn bản chẳng hạn

['Tên của tôi]

Tại sao nó như vậy ?

tôi đã sử dụng ado. nguồn net và đích excel


Thứ hai, ngày 15 tháng 4 năm 2013 - 11. 47. 27 giờ sáng - KevH [23356]

Điều này có xử lý dấu lời nói, dấu phẩy và cột trống không?


Thứ năm, 21 Tháng ba 2013 - 10. 36. 03:00 - Kashif [22935]

Xin chào Arshad,

Tôi đang cố tải một đường ống'. ' tệp được phân tách bằng SSIS, tôi gặp phải lỗi sau liên quan đến trang mã đích. Tôi đánh giá cao nếu bạn có thể cung cấp một số trợ giúp

Lỗi. 0xC02020A1 tại Nhiệm vụ luồng dữ liệu 1, Nguồn - Account_txt [1]. Chuyển đổi dữ liệu không thành công. Chuyển đổi dữ liệu cho cột "FORMULA0,Tài khoản" đã trả về giá trị trạng thái 4 và văn bản trạng thái "Văn bản bị cắt bớt hoặc một hoặc nhiều ký tự không khớp trong trang mã đích. ".
Lỗi. 0xC020902A tại Nhiệm vụ luồng dữ liệu 1, Nguồn - Account_txt [1]. "Cột đầu ra "FORMULA0,Tài khoản" [26]" không thành công do xảy ra cắt bớt và bố trí hàng cắt ngắn trên "cột đầu ra "FORMULA0,Tài khoản" [26]" chỉ định lỗi khi cắt bớt. Đã xảy ra lỗi cắt ngắn trên đối tượng được chỉ định của thành phần được chỉ định.


Thứ ba, ngày 8 tháng 1 năm 2013 - 9. 17. 56 AM - Imane [21314]

Xin chào,

Tôi đang cố gắng tìm cách chuyển từ tệp Excel sang tệp văn bản bằng mã SQL

Nó giống như một công cụ chuyển đổi từ Excel sang. txt với các quy tắc mà tôi có thể thêm vào tệp txt đó để có cấu trúc mà tôi muốn

Ai có thể giúp tôi không?

 

Cảm ơn

 


Thứ tư, ngày 19 tháng 12 năm 2012 - 7. 20. 37 giờ sáng - xoăn [21026]

Chris, bạn phải cài đặt Excel trên máy chủ, không có gì khác hoạt động. Tôi đã cố thêm  Microsoft. Văn phòng. tương tác. Excel. dll vào windows\assembly 10 cách khác nhau mà không gặp may. Cài đặt Excel sẽ đưa dll vào asembly để bạn có thể sử dụng nó. Gói sẽ chọn và xây dựng tập lệnh tốt, nhưng sẽ không thực thi chính xác nếu dll không có trong tập hợp.

Vấn đề của tôi bây giờ là gói của tôi sẽ không chạy tập lệnh từ công việc. mặc dù nó chạy chính xác trong chế độ gỡ lỗi. Tôi thấy khó gỡ lỗi vì mã của Arshad không có bất kỳ đầu ra lỗi mô tả nào với nó. Tôi là một anh chàng SQL, không phải là một lập trình viên C#. Ai đó có thể trợ giúp với một số mã để sửa lỗi trong tập lệnh này không?

Arshad - Công việc tuyệt vời với giải pháp này. Điều này đã giúp tôi rất nhiều


Thứ ba, ngày 27 tháng 11 năm 2012 - 12. 20. 22h - Chris [20567]

Chào Arshad. Cảm ơn bạn đã đăng giải pháp được mô tả ở trên. tôi có một câu hỏi. Có sử dụng Microsoft. Văn phòng. tương tác. Excel dll yêu cầu Office phải được cài đặt trên máy chủ? . Cảm ơn

Cảm ơn. Chris


Thứ hai, ngày 15 tháng 10 năm 2012 - 8. 39. 39 AM - jcidge [19926]

Có ai biết, trong một vòng lặp SSIS để đọc nhiều tệp Excel, trình quản lý kết nối excel có quét N hàng đầu tiên của MỖI tệp mà nó mở ra để đặt loại dữ liệu cho mỗi lần vượt qua HAY nó chỉ sử dụng trên tệp đầu tiên mà nó tìm thấy không?


Thứ hai, ngày 8 tháng 10 năm 2012 - 2. 17. 40 giờ chiều - Megan Brooks [19823]

Tôi đã phải giải quyết những vấn đề này trong nhiều năm. Khi tôi viết blog trở lại vào năm 2009, giải pháp của tôi là chuyển đổi thủ công từng tệp Excel thành văn bản được phân định bằng tab và sau đó đọc dữ liệu bằng cách sử dụng nguồn dữ liệu tệp phẳng với cài đặt siêu dữ liệu phù hợp. Tôi đã tránh sử dụng CSV vì khả năng xử lý không chính xác các dấu phẩy được nhúng. CSV có thể hoạt động nếu dữ liệu được đặt đúng cách trong dấu ngoặc kép và dấu ngoặc kép được chỉ định làm dấu phân cách văn bản trong nguồn tệp phẳng, nhưng như tôi nhớ lại, Excel không phải lúc nào cũng ghi hoặc đọc dữ liệu chính xác. Bây giờ tôi không nhớ chi tiết, nhưng có vẻ như hoạt động Nhập/Xuất đã bị hỏng về vấn đề này. Hoặc có thể là Open/Save As. Luôn kiểm tra

Tôi chưa nghĩ đến việc thực hiện chuyển đổi từ Excel sang văn bản ngay trong gói SSIS. Hiện tại tôi không có đủ khối lượng dữ liệu nên đây là một vấn đề [hầu hết dữ liệu Excel của tôi đến một hoặc hai lần một năm và không có nhiều tệp khác nhau như vậy], nhưng nếu có nhiều hơn trong tương lai thì . Cảm ơn bạn


Thứ hai, ngày 8 tháng 10 năm 2012 - 6. 12. 23AM - Marce [19818]

Này người đàn ông tốt cảm ơn bạn rất nhiều vì thông tin này. Như tôi đã thấy bạn khá thống trị khi kết xuất các tệp excel trong SSIS, id muốn hỏi bạn xem bạn có biết cách bảo vệ bảng tính bằng mật khẩu sau khi tạo không. Dòng chảy sẽ như thế này. lấy xls từ một thư mục cụ thể, mở nó, mật khẩu bảo vệ nó, đóng nó. Tôi đã thấy một số bộ tiện ích mở rộng ssis nhưng theo như tôi biết thì nên có một cách để đưa một số mã vào gói m để tệp được xử lý có thể được tự động hóa. tôi sẽ vô cùng đánh giá cao điều này, Chúc mừng

Làm cách nào để nhập dữ liệu từ Excel sang SQL Server bằng SSIS?

Trên menu SSIS, chọn Kết nối mới. Trong hộp thoại Thêm trình quản lý kết nối SSIS, chọn EXCEL rồi chọn Thêm. Tạo trình quản lý kết nối cùng lúc với việc bạn định cấu hình Nguồn Excel hoặc Đích Excel trên trang Trình quản lý kết nối của Trình chỉnh sửa nguồn Excel hoặc Trình chỉnh sửa đích Excel

Làm cách nào để đọc giá trị ô từ Excel bằng cách sử dụng tác vụ tập lệnh trong SSIS?

đóng cửa sổ soạn thảo. Chạy Gói SSIS của bạn. Gói sẽ đọc từng tệp Excel, sau đó đọc giá trị ô từ Trang tính và chèn vào Bảng máy chủ SQL, đồng thời in giá trị như chúng tôi đã làm bằng cách sử dụng Script Task 2. Hãy kiểm tra dữ liệu trong bảng và nó phải có các giá trị ô từ mỗi tệp excel

Chúng tôi có thể tải dữ liệu từ Excel sang SQL Server không?

Nhập dữ liệu trực tiếp từ các tệp Excel bằng cách sử dụng Trình hướng dẫn Nhập và Xuất SQL Server . Bạn cũng có tùy chọn lưu cài đặt dưới dạng gói Dịch vụ tích hợp máy chủ SQL [SSIS] mà bạn có thể tùy chỉnh và sử dụng lại sau này. Trong SQL Server Management Studio, hãy kết nối với một phiên bản của Công cụ cơ sở dữ liệu máy chủ SQL.

Làm cách nào để tải dữ liệu từ tệp CSV sang SQL Server bằng SSIS?

Thêm các thành phần. Để bắt đầu, hãy thêm nguồn CSV mới và SQL Server ADO. NET đến một tác vụ luồng dữ liệu mới
Tạo Trình quản lý kết nối mới. Thực hiện theo các bước bên dưới để lưu thuộc tính kết nối CSV trong trình quản lý kết nối. .
Định cấu hình Nguồn CSV. .
Định cấu hình Đích máy chủ SQL. .
Chạy dự án

Chủ Đề