|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Как написать скрипт для преобразования файла в формате excel .xls в формат .csv |
|
PowerShell - [решено] Как написать скрипт для преобразования файла в формате excel .xls в формат .csv
|
Забанен Сообщения: 63 |
Профиль | Сайт | Цитировать
Доброго времени суток! Как написать скрипт для преобразования файла в формате excel .xls в формат .csv
Пытался сделать скрипт для преобразования файла в формате excel .xls в формат .csv, находил скрипты где это функция реализована, но чтото до ума так и не довёл ((( Пример скрипта с этой функцией xlstocsv.ps1 $XLSSource=“c:\tmp\file.xlsx” $SharePath=“c:\tmp” #=============================================================================== #=== Конвертирование файла формата .XLSX в файл формата .CSV #=== без использования ПО MS Office Excel #=== Вызов функции: convertXLSXtoCSV “C:\file1.xlsx” [sheet1|sheet2|..] #=== На выходе одноименный файл в формате CSV: C:\file1.csv #=============================================================================== functionconvertXLSXtoCSV ([string] $xlspath, $sheet=“sheet1″) { functionINTto26 { param ([int]$x) $m=$x% 26 if($x-gt 0 -and$m-eq 0){$m= 26} if(($x-$m) -gt 0) { $d= ($x-$m)/26 $dummy= 0 intto26$d } $m } functionSTRINGto26INT ([string]$s) { ([int[]][char[]]$s.toupper())[-1..-$s.length] | %{$_-64} | %{$m= 1}{$_*$m;$m*=26} | Measure-Object-Sum | Select-Object-ExpandPropertysum } functionInt26toSTRING ([int]$i) { $ofs=“” [string][char[]]((INTto26$i) | %{$_+64}) } $mincol= 16384 $maxcol= 1 $minrow= [int]::MaxValue $maxrow= 1 $shellApplication=new-object-comshell.application $file=Get-Item$xlspath $destination=Split-Path$xlspath if(!(Test-Path“$destination\temp”)){ [void] (New-Item-Path$destination-Nametemp-ItemTypedirectory) } Rename-Item$xlspath“$xlspath.zip” $zipPackage=$shellApplication.NameSpace(“$xlspath.zip”) $destinationFolder=$shellApplication.NameSpace(“$destination\temp”) $destinationFolder.CopyHere($zipPackage.Items().item(2)) # $sharedstr= ([xml] (Get-Content“$destination\temp\xl\sharedStrings.xml”-Encodingutf8)).sst.si | Select-Object-ExpandPropertyt | %{ if($_-is [System.Xml.XmlElement]){$_.“#text”}else{$_} } # $sh= [xml](Get-Content“$destination\temp\xl\worksheets\$sheet.xml”-Encodingutf8) $basedata=$sh.worksheet.sheetData | %{$_.row} | %{$_.c} | %{ $col=$_.r -replace“\d+”,“” if((STRINGto26INT$col) -gt$maxcol){$maxcol= (STRINGto26INT$col)} if((STRINGto26INT$col) -lt$mincol){$mincol= (STRINGto26INT$col)} $row=$_.r -replace“[a-z]+”,“” if([int]$row-gt [int]$maxrow){$maxrow=$row} if([int]$row-lt [int]$minrow){$minrow=$row} $value=if($_.t -eq“s”){$sharedstr[($_.v)]}elseif($_.t -ne“E”){$_.v} New-Object-TypeNamePSObject-Property @{col =$col; row =$row; value =$value} } # Remove-Item“$destination\temp”-Confirm:$false-Force-Recurse Rename-Item“$xlspath.zip”$xlspath # $h= @{} $mincol..$maxcol | %{Int26toSTRING$_} | %{$h.$_=“”} $th= @{} $minrow..$maxrow | %{$th.$_=New-Object-TypeNamepsobject-Property$h} $basedata | %{ ($th.([int]$_.row)).($_.col) =$_.value } # $th.keys | Sort-Object |%{$th.$_}| Select-Object-Property ($mincol..$maxcol | %{Int26toSTRING$_} ) | Export-Csv-Path ($xlspath-replace‘xlsx$’,“csv”) -NoTypeInformation-UseCulture-Encodingutf8 } Ошибка при выполнении: PS C:\tmp> C:\tmp\xlstocsv.ps1 Неожиданный токен "destination" в выражении или инструкции. C:\tmp\xlstocsv.ps1:45 знак:34 + if(!(Test-Path“$destination <<<< \temp”)){ [void] (New-Item-Path$destination-Nametemp-ItemTypedirectory) } + CategoryInfo : ParserError: (destination:String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken |
|
Отправлено: 05:08, 01-09-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать sea707, Вам что — надо без участия самого Excel сие делать?
|
Отправлено: 05:57, 01-09-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать Мне надо в автоматическом режиме переобразовать файл excel в формат csv, в принципе даже не важно с помощью какого скриптового языка... главное, на выходе должен быть файл csv...
Значение не имеет, с использование офисного пакета или без, другие дополнительные компонеты... установить не проблема... |
Отправлено: 15:03, 01-09-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать sea707, если на машине есть установленный Office — то можно просто использовать Excel, наподобие:
|
Последний раз редактировалось Iska, 01-09-2012 в 18:14. Причина: Добавил скобки Отправлено: 15:44, 01-09-2012 | #4 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать То же самое (.vbs-скрипт)
Set XL = CreateObject("Excel.Application") XL.Visible = False XL.Workbooks.Open "E:\DDDDD\ExcelFile.xls" XL.ActiveWorkbook.SaveAs "E:\DDDDD\ExcelFile.csv",6 XL.ActiveWorkbook.Saved = True XL.ActiveWindow.Close XL.Quit XL.ActiveWorkbook.Saved = True Чтобы эксел не переспрашивал сохранение |
|
------- Отправлено: 16:40, 01-09-2012 | #5 |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать Цитата Iska:
P.S.: Чтоб ексел не спрашивал, сохранить изменения в файле... Цитата Iska:
Цитата megaloman:
Цитата megaloman:
И ещё, один, важный момент: по умолчанию - открывает и сохраняет текущий лист файла, а как указать другой лист в книге excel? $oExcel.Workbooks | get-member Sheets Property Sheets Sheets () {get} OnSheetActivate Property string OnSheetActivatчтe () {get} {set} Что есть, но не пойму как этим воспользоваться ((( Цитата megaloman:
По умолчанию, если файл существуют - оба скрипта говорят о перезаписи файла... |
|||||
Последний раз редактировалось sea707, 02-09-2012 в 12:51. Отправлено: 12:42, 02-09-2012 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата sea707:
Цитата:
Цитата sea707:
Цитата sea707:
$oWorkbook.Sheets.Item("Лист5").SaveAs("C:\Documents and Settings\User\Мои документы\Some Workbook.csv", 6) Цитата sea707:
а) проверить существование файла и удалить его перед записью; б) отключить предупреждения приложения. Итого: $oExcel = New-Object -ComObject "Excel.Application" $oExcel.DisplayAlerts = $false $oWorkbook = $oExcel.Workbooks.Open("C:\Documents and Settings\User\Мои документы\Some Workbook.xls") $oWorkbook.Sheets.Item("Лист5").SaveAs("C:\Documents and Settings\User\Мои документы\Some Workbook.csv", 6) $oWorkbook.Close($false) $oExcel.Quit() |
|||||
Отправлено: 13:30, 02-09-2012 | #7 |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать Отлично ))) Всё работает )))
|
Отправлено: 13:45, 02-09-2012 | #8 |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать блин, тока кодировка файла должна быть utf-8 для далнейшей работы с powershell
|
Отправлено: 16:07, 02-09-2012 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Не должна.
|
Отправлено: 04:10, 03-09-2012 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. | E.v.g | Программирование и базы данных | 7 | 03-05-2018 22:18 | |
2007 - Создание таблицы с защищенными ячейками (Excel 2007) v2 | -KeyMaster- | Microsoft Office (Word, Excel, Outlook и т.д.) | 6 | 14-06-2012 16:11 | |
2003/XP/2000 - excel таблица из другой excel таблицы | sesves | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 16-03-2012 01:24 | |
2003/XP/2000 - Excel 2003 | Как напечатать определённые строки таблицы? | ondo | Microsoft Office (Word, Excel, Outlook и т.д.) | 3 | 13-07-2010 17:12 | |
excel , повтор шапки таблицы на каждой странице | bool | Хочу все знать | 2 | 15-12-2007 19:14 |
|