Могу ли я использовать VBScript, чтобы взять существующие CSV и сделать их вкладками одной книги Excel?

Я пытаюсь автоматизировать процесс, в котором я беру несколько CSV-файлов из каталога и делаю их каждой отдельной вкладкой в ​​книге Excel, чтобы можно было сводить их данные и тому подобное. Я пытаюсь избежать использования макросов, если это возможно... Возможно ли это сделать в VBScript? Вот что я пробовал до сих пор, прошу прощения за мои соглашения о программировании, так как я только недавно изучил основы VBS:

Call createWkbk()

Function createWkbk()
strFileName = "c:\test1.xls"

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Set objWorkbook = objExcel.Workbooks.Add()

'Adds one spreadsheet to book for each command
objExcel.ActiveWorkbook.Worksheets.Add
objExcel.ActiveWorkbook.Worksheets.Add
objExcel.ActiveWorkbook.Worksheets.Add

'This renames all the sheets to 'int#'
objExcel.Sheets(1).Name = "int1"
objExcel.Sheets(2).Name = "int2"
objExcel.Sheets(3).Name = "int3"
objExcel.Sheets(4).Name = "int4"
objExcel.Sheets(5).Name = "int5"
objExcel.Sheets(6).Name = "int6"

'To save the book
objWorkbook.SaveAs(strFileName)

objExcel.Quit
End Function

Так что теперь единственное, что мне нужно сделать, это записать те CSV, которые у меня уже есть, на эти листы или импортировать их с самого начала. Если не в VBScript, какой маршрут выбрать?

Спасибо всем заранее,

Nic

1 ответ

Вы можете использовать QueryTable чтобы быстро импортировать CSV в существующую рабочую таблицу:

Const strFile = "c:\test.csv"
Const strSheet = "Sheet1"

Set Sheet = objExcel.Sheets(strSheet)

With Sheet.QueryTables.Add("TEXT;" & strFile, Sheet.Range("A1"))
    .TextFileCommaDelimiter = True
    .Refresh
End With

Вы можете попробовать это также, Код, который я нашел и адаптировал для моего использования:

Sub ImportXlsSheets()

'On crée une variable 'wbFusion' de type Classeur Excel
Dim wbFusion As Workbook
'On l'associe au classeur à partir duquel tu lances la macro
Set wbFusion = ThisWorkbook

'On crée une variable wbCible qui va correspondre tour à tour aux classeur à importer
Dim wbCible As Workbook
Dim shCible As Worksheet

'Afin de lui affecter des fichiers, l'utilisateur va les sélectionner via une boîte de dialogue
'NOTA : le With XXXXXXXXX évite de répéter plein de fois XXXXXXXXX lorsque l'on parle de la même chose ;)
With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Choisissez le(s) classeur(s) à importer"
    .Filters.Add "Classeur Excel", "*.xls,*.xls?" 'on filtre par tous les fichiers .xls et xls? avec '?' signifiant "1 caractère"
    .ButtonName = "Importer ce(s) classeur(s)"
    .AllowMultiSelect = True 'on autorise la sélection multiple
    .Show 'on affiche la fenêtre, on attend le retour de l'utilisateur pour continuer

    'on a réglé la boîte de dialogue, maintenant il faut traiter les données de l'utilisateur :
    'si l'utilisateur n'a pas sélectionné de fichier, on met un message d'erreur
    If .SelectedItems.Count = 0 Then
        MsgBox "Veuillez sélectionner au moins un fichier", vbExclamation, "Erreur"
    'Sinon, on traite :
    Else
        For i = 1 To .SelectedItems.Count
            'On ouvre chaque classeur un par un
            Set wbCible = Workbooks.Open(.SelectedItems(i))
            CouleurOnglet = RGB(Rnd * 255, Rnd * 255, Rnd * 255) 'on va mettre toutes les pages de ce classeur importées avec l'onglet de la même couleur
            CompteurClasseur = CompteurClasseur + 1 'on incrémente un compteur, facultatif
            'Pour chaque feuille du wbCible :
            For Each shCible In wbCible.Sheets
                shCible.Tab.Color = CouleurOnglet
                'shCible.Name = Int(Rnd * 99999) 'nom aléatoire pour être certain qu'il n'y ait pas de doublon plantant la macro
                shCible.Name = i & "_" & shCible.Name ' To keep the original sheet name and concatenate it with its order
                shCible.Copy after:=wbFusion.Sheets(wbFusion.Sheets.Count) 'on la copie à la fin de wbFusion
                CompteurFeuille = CompteurFeuille + 1 'on incrémente un compteur, facultatif
            Next shCible
            'On ferme le classeur sans enregistrer (on a changé le nom des pages avant copie)
            wbCible.Close SaveChanges:=False
        'On passe au classeur suivant
        Next i
        'Facultatif, à l'aide des compteurs, on indique à l'utilisateur que tout s'est bien passé
        MsgBox CompteurFeuille & " feuilles ont bien été importées, provenant de " & CompteurClasseur & " classeurs Excel.", vbInformation, "Import réussi"
    End If
End With

End Sub
Другие вопросы по тегам