2017-07-20 3 views
0

Ich gebe meine benötigte Excel-Vorlage hier. Als mein gegenwärtiges Szenario wird dieses Excel in einem festen Pfad gespeichert. Aber CSV wird jeden Tag generieren.Customize Excel by VBScript

Mein vb-Skript sollte jeden Tag ausführen, um Daten von CSV zu sammeln und in dieses Excel schreiben, aber kleine Anpassung benötigt.

Hier sind die ersten 3 Zeilen Fixed Header, ich muss konvertieren csv und schreiben Werte in Excel aus der 4. Reihe. aber es ist offensichtlich, dass wir dort alte Daten haben. Daher sollte die 4. Zeile bis zur 7. Zeile gelöscht und der CSV-Wert wie gewünscht eingegeben werden. Mit der richtigen Grenze auch.

Jetzt sagen Sie mir, ist es möglich, meine Vbs zu ändern, um diese Art von Ausgabe zu bekommen?

das Skript wie unten laufen ... myscript.vbs: die zwei Argument braucht

cscript C:\Test\MyScript.vbs \\C:\Test\Sample.CSV \\C:\Test\Sample.xlsx 

Original-Skript unten ausführen soll. aber ich möchte wie unten Screenshot anzeigen.

srccsvfile = Wscript.Arguments(0) 
tgtxlsfile = Wscript.Arguments(1) 

'Create Spreadsheet 
'Look for an existing Excel instance. 
On Error Resume Next ' Turn on the error handling flag 
Set objExcel = GetObject(, "Excel.Application") 
'If not found, create a new instance. 
If Err.Number = 429 Then '> 0 
    Set objExcel = CreateObject("Excel.Application") 
End If 

objExcel.Visible = False 
objExcel.DisplayAlerts = False 

'Import CSV into Spreadsheet 
Set objWorkbook = objExcel.Workbooks.Open(srccsvfile) 
Set objWorksheet1 = objWorkbook.Worksheets(1) 

'Adjust width of columns 
Set objRange = objWorksheet1.UsedRange 
objRange.EntireColumn.Autofit() 
'This code could be used to AutoFit a select number of columns 
'For intColumns = 1 To 17 
' objExcel.Columns(intColumns).AutoFit() 
'Next 

'Make Headings Bold 
objExcel.Rows(1).Font.Bold = True 

'Freeze header row 
With objExcel.ActiveWindow 
    .SplitColumn = 0 
    .SplitRow = 1 
End With 
objExcel.ActiveWindow.FreezePanes = True 

'Add Data Filters to Heading Row 
objExcel.Rows(1).AutoFilter 

'set header row gray 
objExcel.Rows(1).Interior.ColorIndex = 15 
'-0.249977111117893 
aList=Array("NOT ", "NO ", "NONE", "!") 
For each item in aList 
For Each c In objWorksheet1.UsedRange 
    If InStr(1, c.Value, item) > 0 Then 
     c.Interior.ColorIndex = 6 
    End If 
Next 
next 


'Save Spreadsheet, 51 = Excel 2007-2010 
objWorksheet1.SaveAs tgtxlsfile, 51 

'Release Lock on Spreadsheet 
objExcel.Quit() 
Set objWorksheet1 = Nothing 
Set objWorkbook = Nothing 
Set objExcel = Nothing 

Header und Legende sollte als Screenshot behoben werden.

Aber es kann auch alternative Wege geben. Wenn ich ein modifiziertes vb-Skript erhalte, das Header wie im obigen Screenshot erstellen kann (d. H. Zelle zusammenfügen, Rahmen einfrieren, Gitterlinien entfernen) und unten eine Legende hinzufügen, muss ich nicht jeden Tag in existierendes Excel schreiben. Immer wenn VBS ausgeführt wird, sollte es altes Excel (falls vorhanden) durch dieses korrekte Format ersetzen.

Sample Excel output

+0

diese Zeile hinzufügen unter 'objExcel.Rows (1) .AutoFilter': **' objExcel .Columns.Autofit() '** und das sollte den Autofit Trick für Sie tun. – ian0411

Antwort

0

Datensatz ein Makro von der Header und Legende zu schaffen. dann bearbeiten Sie den Code für die Reinigung aller . Wählen Sie ... Auswahl Anweisungen. ... in Ihrem Code, den Sie geschrieben, Sie von einem dieser

mit allen Spalten mit einem Befehl Autofit können
ActiveSheet.Columns("A:Q").AutoFit 
ActiveSheet.Range(Columns(1), Columns(17)).AutoFit 
+0

Hi @jsotola kannst du den ganzen Code hier einfügen, genau wo ich Autofit Code einbauen soll .... eigentlich bin ich nicht vertraut von diesen ... – goldenbutter