Scenario: Download Script
Sometime we have to read the cell value from given Excel file and then make decision either to load that file or not or perform some actions. While back, I wrote a post How to read Excel Cell Value from Excel Sheet by using Execute SQL Task, you can check the link here. The post was shared on different forums and few people had problem with reading Date type value from Excel Cell.
As I am working on Dynamic Excel Source and Destination now a days, I thought why not to write the same post by using Script Task.
In this post, we will read the cell value from Excel Sheet by using Script Task. We will insert the value into sql table so we can take a look if we like later on. Also we will save the value of cell to variable to control next tasks or use in precedence constraint or any where in our SSIS Package.
Sample Excel Files look like below
How to read Excel Cell Value in SSIS Package by using Script Task - SSIS Tutorial
Solution:
Instead of always reading single excel file. I thought I would write an SSIS Package that should read multiple files if exists and then read cell value from excel sheet.Just to notice, Script will read multiple sheets if there. It will insert the values into table but it will return you last sheet cell value for your variable to use in SSIS Package.
If you have single sheet per Excel File, you don't need to worry. If you always want to read Cell Sheet from specific Sheet, you can simply change in script, instead of using sheetname from foreach loop.
Step 1:
Create table in your database to log Cell value and Excel file with sheet name
CREATE TABLE dbo.CellInfo (
id INT Identity(1, 1)
,CellValue VARCHAR(100)
,ExcelFileName VARCHAR(100)
)
Step 2:
Create your SSIS Package and create below variables as shown.
CellToRead : Provide the cell which you would like to read. I am reading C4 that is date value
CellValueOutput : This is the variable that we will set the value from Script task so we can use further in other tasks/expressions in our SSIS Package. As I am making this package to read any type of Cell value. I created this variable as string. Once you have the value you can convert to date only etc.
ExcelFileFullPath : This variable is used in Foreach Loop Container to save Excel file full path.
FolderPath : This the folder path where your excel files will be dropped
LogFolder : In case of error in Script Task, error information will be written to log file and it should be in LogFolder path.
TableName : Provide the name of Table where you would like to insert Cell value and Excel File name with sheet
How to read Excel Cell Value by using Script Task in SSIS Package - SSIS Tutorial
Step 3:
Bring the For-each Loop Container and configure as shown below.
How to read Cell value from Excel Sheet in SSIS Package by using Script Task - SSIS Tutorial
Click on Variable Mapping and use ExcelFileFullPath variables as shown below and then hit ok.
Create Cell value from Excel sheet and insert into SQL table by using SSIS Package -SSIS Tutorial
Step 4:
Click in Connection Manager Pane and then Create ADO.NET Connection by providing Server Name and database Name. After creating I have renamed it to DBConn.
Create ADO.NET Connection so we can use in Script Task to load the data to Destination Table
Step 5:
Bring the Scrip Task in For-each Loop Container and then open it and add the user variables we have created above. Click on Edit Script once variables are added.
Add variables to Script Task to read Excel Cell Value in SSIS Package - SSIS Tutorial
Step 6: Add Script to Script task Editor in SSIS Package to read Excel Cell Value and Insert into SQL Server Table
Click Edit Button and it will open Script Task Editor.
Under #region Namespaces, I have added below code
using System.IO;
using System.Data.OleDb; using System.Data.SqlClient;
Under public void Main() {
I have added below code.
string datetime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { string CellToRead = Dts.Variables["User::CellToRead"].Value.ToString(); string TableName = Dts.Variables["User::TableName"].Value.ToString(); string CellName = ""; Int32 CellNumber; string fileFullPath = Dts.Variables["User::ExcelFileFullPath"].Value.ToString();var alphanumericstring = new System.Text.RegularExpressions.Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)");
var match = alphanumericstring.Match(CellToRead);
CellName = match.Groups["Alpha"].Value;
int.TryParse(match.Groups["Numeric"].Value, out CellNumber);
//use ADO.NET Connection created in SSIS Package
SqlConnection myADONETConnection = new SqlConnection();
myADONETConnection = (SqlConnection)(Dts.Connections["DB_Conn_TechBrothersIT"].AcquireConnection(Dts.Transaction) as SqlConnection);
//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\"";
OleDbConnection cnn = new OleDbConnection(ConStr);
//MessageBox.Show(TableName);
//Get Sheet Name
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();
//Read the Cell value from Excel Sheet
OleDbCommand oconn = new OleDbCommand("select * from [" + sheetname + CellName + (CellNumber - 1).ToString() + ":" + CellToRead + "]", cnn);
OleDbDataAdapter adp = new OleDbDataAdapter(oconn);
DataTable dt = new DataTable();
adp.Fill(dt);
cnn.Close();
string CellValue = "";
foreach (DataRow row in dt.Rows)
{
object[] array = row.ItemArray;
CellValue = array[0].ToString();
}
//Insert data into table if you like
//Prepare Insert Query
string InsertQuery = "";
InsertQuery = " Insert into " + TableName + "(";
InsertQuery += "[ExcelFileName],[CellValue])";
InsertQuery += "Values('ExcelFile:" + fileFullPath + " SheetName: " + sheetname + "','" + CellValue + "')";
//MessageBox.Show(InsertQuery);
//Run Insert Query to Insert Data into SQL Server Table
SqlCommand cmd = myADONETConnection.CreateCommand();
cmd.CommandText = InsertQuery;
cmd.ExecuteNonQuery();
//Set the value to CellValueOutput to use in SSIS Package
Dts.Variables["User::CellValueOutput"].Value = CellValue;
}
}
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception exception)
{
// Create Log File for Errors
using (StreamWriter sw = File.CreateText(Dts.Variables["User::LogFolder"].Value.ToString()
+ "\\" + "ErrorLog_" + datetime + ".log"))
{
sw.WriteLine(exception.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
Step 7:
Save the Script and close the editor window. Bring Second Script Task so we can check if value was read correctly and set to CellValueOutput.
Inside Second Script Task , write below statement as shown, this will just print message for us with value of variable which was set in Script Task 1.
How to save Excel Cell Value to Variable by using Script Task in SSIS Package - SSIS Tutorial
use MessageBox.Show to print the value of variable that has Excel Cell value, which we saved in Script Task 1.
How to read Excel Cell Value and save to SSIS Variable in SSIS Package - SSIS Tutorial
Step 8:
Finally we are done :) close the editor windows. Run your SSIS Package. The package should read each Excel file and then read the cell value from Sheet and insert into SQL server Table and also print the value as we did by using Script Task 2.
How to read cell value from an Excel Sheet in SSIS Package by using Script Task - SSIS Tutorial
Let's check the data in the table and it should have the cell values from each excel file.
How to read Excel Cell value and write to SQL Server Table in SSIS Package - SSIS Tutorial
Video demo : How to Read Cell Value from Excel Sheet in SSIS Package by using Script Task
Check out our other posts/videos for Dynamic Excel Source and Destination
- How to Load Data from Excel Files when Number of Columns can decrease or order is changed in Excel Sheet
- How to Load Only Matching Column Data to SQL Server Table from Multiple Excel Files (Single Sheet per file) Dynamically in SSIS Package
- How to Load Excel File Names with Sheet Names ,Row Count,Last Modified Date, File Size in SQL Server Table
- How to Load Multiple Excel Files with Multiple Sheets to Single SQL Server Table by using SSIS Package
- How to Load Matching Sheets from Excel to Table and Log Not Matching Sheets Information in SQL Server Table
- How to create Table for each sheet in Excel Files and load data to it dynamically in SSIS Package
- How to Create Table per Excel File and Load all Sheets Data Dynamically in SSIS Package by using Script Task
- How to create CSV file per Excel File and Load All Sheets from Excel File to it in SSIS Package
- How to Create CSV File for Each Excel Sheet from Excel Files in SSIS Package
- How to Load Excel File Name and Sheet Name with Data to SQL Server in SSIS Package
- How to Import data from Multiple Excel Sheets with a pattern of sheet names from Multiple Excel File in SSIS Package
- How to import Data from Excel Files for specific Sheet Name to SQL Server Table in SSIS Package
- Load Data To Tables according to Excel Sheet Names from Excel Files dynamically in SSIS Package
- How to Load Excel Files with Single/ Multiple Sheets to SQL Server Tables according to Excel File Name Dynamically
- How to Read Excel Sheet Data after Skipping Rows in SSIS Package by using Script Task
- How to read data from Excel Sheet and Load to Multiple Tables by using Script Task in SSIS Package
- How to create Excel File Dynamically from SQL server Table/View by using Script Task in SSIS Package
- How to create Excel File Dynamically for Stored Procedure Results in SSIS Package by using Script Task
- How to Export SQL Server Tables from Database to Excel File Dynamically in SSIS Package by using Script Task
- How to Convert CSV/Text Files to Excel Files in SSIS Package by using Script Task
- How to Load All CSV Files to Excel Sheets ( Sheet Per CSV) in single Excel File in SSIS Package
- How to Load All CSV Files to Single Excel Sheet with File Names in an Excel File Dynamically in SSIS Package
- How to Create Sample Excel file with Sheet from each table with Top 1000 Rows per sheet in SSIS Package
- How to Export Data to Multiple Excel Sheets from Single SQL Server Table in SSIS Package
- How to split large table data into multiple Excel Sheets on Single Excel File by using SSIS Package
- How to Export All tables of a database to Excel Files with Date-time in SSIS Package
- How to read Cell Value from Excel by using Script Task in SSIS Package
In the vast realm of data-driven decision-making and automation, VBA occupies a pivotal role. This platform, regarded by many as the definitive gateway to VBA excellence, combines the robust functionality of Microsoft Excel with the sheer power of programming. For those eager to unlock new horizons in data manipulation and vba code help, this is the destination. Beyond mere knowledge, the platform provides hands-on experience and expert advice, ensuring users are well-equipped to face real-world challenges.
ReplyDelete"From smartphones to electric vehicles, batteries power our world." smart lithium ion battery pack
ReplyDelete