2015-03-24 1 views
-1

J'ai trois fichiers Excel qui mettront à jour chaque semaine avec le nom, y compris mis à jour Date.xlsx. J'ai besoin de charger ces trois fichiers Excel dans mes trois tables en utilisant SSIS Package. Je dois également automatiser cela car je dois planifier un travail pour cela.Comment charger trois fichiers Excel différents dans différentes tables

Comment puis-je automatiser la sélection d'Excel particulier et charger dans un tableau particulier. par exemple.

  1. workanalysis_21032015.xlsx
  2. analytics_21032015.xlsx
  3. googleprobes_21032015.xlsx

Je en ai besoin Excelle données à charger dans trois tableaux que ces mises à jour Excel avec le nouveau nom que (1.workanalysis_28032015 .xlsx) en particulier Dossier pour chaque semaine. J'ai besoin de sélectionner l'analyse de workanalysis et vider les données dans la table, même pour rester deux.

Répondre

0

Si vous vous demandez comment faire l'importation automatique (package SSIS) des fichiers Excel au serveur SQL, voici une bonne étape par étape avec des captures d'écran: https://www.simple-talk.com/sql/ssis/moving-data-from-excel-to-sql-server---10-steps-to-follow/

Vous devez le faire trois fois . Copier-coller est votre meilleur ami :)

En ce qui concerne la logique qui tient compte de la date et de la structure des dossiers, je suggère d'écrire une tâche de script C#. Voici un exemple mal commenté (désolé, commets où en norvégien et je ne tenais pas à traduire ainsi je les ai enlevés) d'un script qui trouve le nom du nouveau fichier xml qui utilise une convention de nommage très spécifique incluant datatime, beaucoup comme le vôtre sur un ftpserver, puis l'écrit dans une variable SSIS nommée User: newFile. Les fichiers xml ont des noms: Something_YYYYMMDD.xml, d'où la logique dans la fonction fileIsNew.

using System; 
using System.Data; 
using Microsoft.SqlServer.Dts.Runtime; 
using System.Windows.Forms; 
using System.Net; 
using System.IO; 
using System.Text; 
using System.Globalization; 

namespace ST_59d80f6857bc4a6197af798be478f308.csproj 
{ 
[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
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 
    public string[] GetDirectory() 
    { 
     StringBuilder result = new StringBuilder(); 

     System.Net.FtpWebRequest requestDir = (FtpWebRequest)WebRequest.Create("ftp://someftpserver.com"); 
     requestDir.Method = WebRequestMethods.Ftp.ListDirectory; 

     requestDir.Credentials = new System.Net.NetworkCredential("User", "password"); 
     FtpWebResponse responseDir = (FtpWebResponse)requestDir.GetResponse(); 
     StreamReader readerDir = new StreamReader(responseDir.GetResponseStream()); 

     string line = readerDir.ReadLine(); 
     while (line != null) 
     { 
      result.Append(line); 
      result.Append("\n"); 
      line = readerDir.ReadLine(); 
     } 

     result.Remove(result.ToString().LastIndexOf('\n'), 1); 
     responseDir.Close(); 
     return result.ToString().Split('\n'); 
    } 

    public bool fileIsNew(string file, string newestFile) 
    { 
     if (file.EndsWith(".xml", System.StringComparison.CurrentCultureIgnoreCase) && file.Length >= 11) 
     { 
      decimal test; 
      if(decimal.TryParse(file.Substring(file.Length - 12, 8), out test)) 
      { 
       if (Convert.ToInt32(file.Substring(file.Length - 12, 8)) > Convert.ToInt32(newestFile.Substring(newestFile.Length - 12, 8))) 
       { 
        return true; 
       } 
       return false; 
      } 
      return false; 
     } 
     return false; 
    } 

    public void Main() 
    { 
     string newestFile = "19900101.xml"; 

     foreach (string file in GetDirectory()) 
     { 
      if (fileIsNew(file, newestFile)) 
      { 
       newestFile = file; 
       // TEST!!!! 
       // MessageBox.Show(newestFile); 
      } 

     } 
     Dts.Variables["User::newFile"].Value = newestFile; 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
} 
} 

J'imagine que vous pourriez avoir à faire quelque chose de similaire :)

1

une utilisation pour chaque boucle. le nom de fichier qui est traité pour cette instance sera/peut être stocké dans une variable, prenez seulement la partie chaîne du nom de fichier (vous pouvez utiliser la tâche de script). Mettez les validations dans les contraintes de précédence (par exemple @var = "workanalysis"), puis passez-la à la destination particulière requise.