| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 
 | 
#déclaration du dossier courant et du nom du classeur Excel
$workingDir = "C:\Users\Exemple\Desktop\powershell\"
$strFileName = $workingDir + "classeurExcel.xlsm"
#connect to data source
#connexion à la source de données
$strProvider = "Provider=Microsoft.ACE.OLEDB.12.0"
$strDataSource = "Data Source = $strFileName"
$strExtend = "Extended Properties=Excel 12.0"
$objConn = New-Object System.Data.OleDb.OleDbConnection("$strProvider;$strDataSource;$strExtend")
$objConn.open()
#stockage des en-têtes dans un tableau
#store sheet names in an array
$tables = $objConn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::Tables,$null);
$sheets = @()
foreach($t in $tables)
{
    $tableName = $t.TABLE_NAME
    $sheets = ,$tableName.substring(0, $tableName.length - 1) + $sheets
}
#création du dossier de sortie s'il n'existe pas
#create output directory if not exists
$dataDir = $workingDir + "data\"
if(!(Test-Path $dataDir))
{
    $mkdir = New-Item $dataDir -type Dir
}
#et suppression de tous les fichiers *.txt à l'intérieur
#and remove all *.txt files in it
Get-ChildItem $dataDir -Filter *.txt | Remove-Item
#itération sur le tableau des feuilles
#iterate on sheets array
$sheetIndex = 1
foreach($s in $sheets)
{
    #retrieve data from Excel sheet
    #récupération des données de la feuille
    $strSheetName = $s + "`$"
    $strQuery = "SELECT * FROM [$strSheetName]"
    $sqlCommand = New-Object System.Data.OleDb.OleDbCommand($strQuery)
    $sqlCommand.Connection = $objConn
    $DataReader = $sqlCommand.ExecuteReader()
    
    #modèle de nom de fichier : $workDir\data\sheetIndex-sheetName.txt
    #output filename will be like $workDir\data\sheetIndex-sheetName.txt
    $textFile = $dataDir + $sheetIndex + "-" + $s + ".txt"
    #itération sur les lignes de la table
    #iterate on table rows
    $header = $true
    while($DataReader.read())
    {
        $count = $DataReader.FieldCount
        #on écrit les en-têtes si c'est la première ligne
        #output field names as column headers if first row
        if($header)
        {
            $fields = @()
            for ($i = 0; $i -lt $count; $i++)
            {
                $fields += $DataReader.GetName($i)
            }
            $fields -join "," > $textFile
            $header = $false
        }
        #itération sur les cellules de la ligne
        #iterate on row cells
        $cells = @()
        for($i = 0; $i -lt $count; $i++)
        {
            $cells += $DataReader[$i]
        }
        #on écrit les cellules dans une nouvelle ligne du fichier : val1,val2,val3,val4,...
        #write val1,val2,val3,val4,... in a new row of output file
        $cells -join "," >> $textFile
    }
    $dataReader.close()
    $sheetIndex++
}
$objConn.close()
Write-Output("Text export done / Export effectué") | 
Partager