Как конвертировать файл .csv в формат .xlsx на VBScript?

Сразу к сути вопроса. Есть текстовый файл (таблица) в формате .csv. В качестве разделителей столбцов используются ";" (точка с зяпятой), например:
Column 1.1;Column 1.2;...;Column 1.N
Column 2.1;Column 2.2;...;Column 2.N

Как посредством VBScript конвертировать данный файл в формат .xlsx?
  • Вопрос задан
  • 1251 просмотр
Пригласить эксперта
Ответы на вопрос 2
honor8
@honor8
Принципы быстродействия VBA в описании
Берём какой-нибудь скрипт с заменой символов и изменяем под задачу.
Option Explicit

Const VERSION = "rev100"
Const VERSIONDATE = "17/10/2016"

Sub ProcessDir(folder)
	Dim fname, file, subfolder, i
	Const ForReading = 1
	Const ForWriting = 2
	Const xlOpenXMLWorkbook = 51
	
	For Each file In folder.Files
	If extold = LCase(fso.GetExtensionName(file)) Then
		fname = file.Path
		Set fl = fso.OpenTextFile(fname, ForReading, False)
		txt = Split(fl.ReadAll(), vbCrLf)
		For i = 0 To UBound(txt)
			txt(i) = Replace(txt(i), ";", ",")
		Next
		fl.Close
		file.Name = file.Name & "_bak"
		Set fl = fso.CreateTextFile(fname, True)
		fl.Write Join(txt, vbCrLf)
		fl.Close
	End If
	Next
	For Each file In folder.Files
	If extold = LCase(fso.GetExtensionName(file)) Then
		fname = file.Path
		Set fl = CreateObject("Excel.Application")
'		fl.Visible = True ' Debug
		With fl.Workbooks.Open(fname)
			' Do Something... '
			.SaveAs Replace(fname, extold, extnew), xlOpenXMLWorkbook: .Close False
		End With
		fso.DeleteFile(Replace(fname, extold & "_bak", extold))
	End If
	Next
	For Each file In folder.Files
	If extold & "_bak"= LCase(fso.GetExtensionName(file)) Then
		file.Name = Replace(file.Name, extold & "_bak", extold)
		MsgBox "File " & file.Name & " successfully created.", vbInformation
	End If
	Next
	For Each subfolder In folder.SubFolders
		ProcessDir (subfolder)
	Next
End Sub

Dim fso, folder, fl, txt
folder = "C:\Users\User\Desktop\"
' Change the extension in the program settings
Const extold = "csv"
' This extension can be written after changing semicolon to a comma
Const extnew = "xlsx"

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folder)
ProcessDir (folder)
Set fso = Nothing
Ответ написан
powershell

#Write-Host "Hello" -BackgroundColor Black -ForegroundColor Yellow
$objExcel = New-Object -ComObject Excel.Application
#$o = $objExcel
#$o | Get-Member
#$o.Workbooks | Get-Member
#$objExcel.Workbooks | Select-Object -Debug -Property "OpenText"

$objExcel.Workbooks.OpenText( "z:\dev\ps\1.csv", # file to open
         [Microsoft.Office.Interop.Excel.XlPlatform]::xlWindows, 
         1, # start from row 1
         [Microsoft.Office.Interop.Excel.XlTextParsingType]::xlDelimited,
         [Microsoft.Office.Interop.Excel.XlTextQualifier]::xlTextQualifierDoubleQuote,
         $false, # Consecutive Delimiter
         $false, # tab
         $false, # semicolon
         $false, # comma
         $false, # space
         $true,  # use other
         ';')

$book = $objExcel.Workbooks[1]
$book.SaveAs("z:\dev\ps\1.xlsx", [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault)

$book.Close($false)

$objExcel.Quit()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы