PowerShell

PowerShell Конвертировать файлы xlsx в csv


545

Данный скрипт поможет пересохранить файлы Excel в csv. Может быть полезно перед отправкой прайсов на хостинг для дальнейшей обработки

Представим, что у нас есть директория с файлами "\\server\Quad Solutions\hosting\". Наша задача - найти файлы, имя которых начинается с xlsxtocsv_ и сохранить их в формате csv. Также для проверки работы будем сохранять оригинальный файл.

Например, на входе файл xlsxtocsv_test.xlsx, на выходе получаем два файла test.csv и test_orig.xlsx

1. Конвертировать файлы xlsx в csv при помощи компонента DCOM Excel.Application

Distributed Component Object Model (DCOM) - программная архитектура, разработанная компанией Microsoft для распределения приложений между несколькими компьютерами в сети. Программный компонент на одной из машин может использовать DCOM для передачи сообщения (его называют удаленным вызовом процедуры) к компоненту на другой машине. DCOM автоматически устанавливает соединение, передает сообщение и возвращает ответ удаленного компонента.

#папка для поиска файлов
$folder = "\\server\Quad Solutions\hosting\" 

Get-ChildItem -File -Path "$($folder)xlsxtocsv_*" | ForEach-Object {
	$basename = $($_.Basename)	
	$basename = $basename.replace('xlsxtocsv_','')	

	$FilePath = $_.FullName
	$FilePathSave = $folder + $basename + ".csv"
	$FilePathCopy = $folder + $basename + "_orig" + $($_.Extension)
	
	try
	{
		unblock-file -path $FilePath
		$ExcelObj = New-Object -comobject Excel.Application
		$ExcelWorkBook = $ExcelObj.Workbooks.Open($FilePath)
		$ExcelWorkBook.Worksheets.Item(1).Activate()
		start-sleep -seconds 3
		if (Test-Path $FilePathSave){
			Remove-item -path $FilePathSave
		}
		$ExcelWorkBook.SaveAs($FilePathSave, 62)
		$ExcelObj.quit()
	}
	finally
	{	start-sleep -seconds 3
		Move-Item -Path $FilePath -Destination $FilePathCopy -Force
	}
}

Недостатки работы с DCOM Excel.Application:

Среди недостатков использования DCOM Excel.Application можно отметить сложности в настройке самого компонента.  

2. Конвертировать файлы xlsx в csv при помощи модуля ImportExcel

Модуль ImportExcel позволяет автоматизировать работу с Excel с помощью PowerShell без установки Microsoft Office Excel.

- для всех пользователей системы:

Install-Module ImportExcel -Scope AllUsers

- или для текущего пользователя

Install-Module ImportExcel -Scope CurrentUser
#папка для поиска файлов
$folder = "\\server\Quad Solutions\hosting\"

Get-ChildItem -File -Path "$($folder)xlsxtocsv_*" | ForEach-Object {
	$basename = $($_.Basename)	
	$basename = $basename.replace('xlsxtocsv_','')	

	$FilePath = $_.FullName
	$FilePathCopy = $folder + "orig_" + $basename + $($_.Extension)
	$FilePathSave = $folder + $basename + ".csv"
	
	try
	{
		unblock-file -path $FilePath
		Import-Excel -NoHeader -Path $FilePath | Export-Csv $FilePathSave -NoTypeInformation -Encoding utf8 -Delimiter ';' -Force
	}
	finally
	{	
		Move-Item -Path $FilePath -Destination $FilePathCopy -Force
	}
}
#папка для поиска файлов
$folder = "\\server\Quad Solutions\hosting\"

Get-ChildItem -File -Path "$($folder)xlsxtocsv_*" | ForEach-Object {
	$basename = $($_.Basename)	
	$basename = $basename.replace('xlsxtocsv_','')	

	$FilePath = $_.FullName
	$FilePathCopy = $folder + "orig_" + $basename + $($_.Extension)
	
	try
	{
		unblock-file -path $FilePath
		$i = 1;
		$sheets = (Get-ExcelSheetInfo -Path $FilePath).Name
		foreach ($sheet in $sheets) {
			if($i -eq 1){
				$FilePathSave = $folder + $basename + ".csv"
			}else{
				$FilePathSave = $folder + $basename + "_sheet" + $i + ".csv"
			}

			Import-Excel -NoHeader -WorksheetName $sheet -Path $FilePath | Export-Csv $FilePathSave -NoTypeInformation -Encoding utf8 -Delimiter ';' -Force
	
			$i = $i+1
		}
	}
	finally
	{	
		Move-Item -Path $FilePath -Destination $FilePathCopy -Force
	}
}
Добавить комментарий
Может быть интересно

В операционной системе Windows, как и в других операционных системах, интерактивные (набираемые с клавиатуры и сразу же выполняемые) команды выполняются с помощью так называемого командного интерпретатора, иначе называемого командным процессором или оболочкой командной строки (command shell).

3
Снова возвращаемся к migrate. Довольно удобный фреймворк для импорта данных в Друпал. Один из распространенных форматов источника для импорта - CSV. Поддерживается migrate из коробки. Описание и примеры работы с классом MigrateSourceCSV можно найти на drupal.org.
2

Иногда необходимо вывести в одном документе не только символы стандартной латиницы и своего национального алфавита. Например, для того, чтобы сослаться на название немецкого, французского или чешского источника, либо привести цитату на греческом языке (кстати, огромное множество символов просто отсутствует на клавиатуре).

1

В данной статье пойдет речь о таких командах, как: CD, COPY | XCOPY, DIR, MKDIR | RMDIR, DEL, REN, MOVE.

Полный список команд можно вывести набрав HELP в командной строке.

2
Те, кто использует модуль Double field могли заметить, что в текстовой области отсутствует редактор. Бывают случаи, когда для удобства наполнения он просто необходим.
1