none
Создание сценария, который переводит .xls в .csv RRS feed

  • Вопрос

  • Добрый день. Буду рад помощи.

    Итак, есть база,в ней около 1000 документов в xls формате. Для загрузки в SP2012 папку нужно первести в формат CSV.

    Скажите, пожалуйста, можно ли написать какой-ть батник или еще что-то,чтобы делать это было не так тяжело?Проще говоря, переводить автоматически?

    25 марта 2015 г. 12:43

Ответы

  • Как то так :

    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xls" | ForEach-Object{
        $Workbook
    = $ExcelWB.Workbooks.Open($_.Fullname)
        $newName
    = ($_.Fullname).Replace($_.Extension,".csv")
        $Workbook
    .SaveAs($newName,6)
        $Workbook
    .Close($false)
    }
    $ExcelWB
    .quit()


    Печенкин Николай

    • Предложено в качестве ответа lokise 25 марта 2015 г. 14:43
    • Помечено в качестве ответа KazunEditor 29 марта 2015 г. 6:45
    25 марта 2015 г. 12:57

Все ответы

  • Как то так :

    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xls" | ForEach-Object{
        $Workbook
    = $ExcelWB.Workbooks.Open($_.Fullname)
        $newName
    = ($_.Fullname).Replace($_.Extension,".csv")
        $Workbook
    .SaveAs($newName,6)
        $Workbook
    .Close($false)
    }
    $ExcelWB
    .quit()


    Печенкин Николай

    • Предложено в качестве ответа lokise 25 марта 2015 г. 14:43
    • Помечено в качестве ответа KazunEditor 29 марта 2015 г. 6:45
    25 марта 2015 г. 12:57
  • Как то так :

    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xls" | ForEach-Object{
        $Workbook
    = $ExcelWB.Workbooks.Open($_.Fullname)
        $newName
    = ($_.Fullname).Replace($_.Extension,".csv")
        $Workbook
    .SaveAs($newName,6)
        $Workbook
    .Close($false)
    }
    $ExcelWB
    .quit()


    Печенкин Николай

    Записал вот что

    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path C:\Беспалевная папка\DSR\Продажи -Filter "*.xls" | ForEach-Object{
        $Workbook = $ExcelWB.Workbooks.Open($_.Fullname)
        $newName = ($_.Fullname).Replace($_.Extension,".csv")
        $Workbook.SaveAs($newName,6)
        $Workbook.Close($false)
    }
    $ExcelWB.quit(

    Ошибка:

    Отсутствует ">" в вызове метода.
    строка:7 знак:24
    + $ExcelWB.quit($ExcelWB  <<<< = new-object -comobject excel.application

    + CategoryInfo          : ParserError: (CloseParenToken:TokenId) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

    25 марта 2015 г. 13:25
  • 25 марта 2015 г. 14:28
    Модератор
  • Вы забыли скобку закрыть -- $ExcelWB.quit( -- $ExcelWB.quit(). Только что проверил, все работает.

    Печенкин Николай

    • Помечено в качестве ответа Mansitto 26 марта 2015 г. 5:00
    • Снята пометка об ответе Mansitto 26 марта 2015 г. 5:03
    25 марта 2015 г. 14:34
  • Вы забыли скобку закрыть -- $ExcelWB.quit( -- $ExcelWB.quit(). Только что проверил, все работает.

    Печенкин Николай


    Да. Работает.Спасибо. Но е сть одно но. У меня несколько тысяч файлов. По этому скрипту обрабатывается только 1. Как можно реализовать обработку хотя бы 500 файлов?
    • Изменено Mansitto 26 марта 2015 г. 5:04
    26 марта 2015 г. 5:00
  • Добрый день.

    Вы делаете что то не то... Скрипт берет все файлы по одному по пути C:\Беспалевная папка\DSR\Продажи

    с расширением xls и пересохраняет. Т.е. ВСЕ файлы. Либо напутали с путем, либо с расширением. На картинке результат прохода.  


    Печенкин Николай

    26 марта 2015 г. 5:18
  • Добрый день.

    Вы делаете что то не то... Скрипт берет все файлы по одному по пути C:\Беспалевная папка\DSR\Продажи

    с расширением xls и пересохраняет. Т.е. ВСЕ файлы. Либо напутали с путем, либо с расширением. На картинке результат прохода.  


    Печенкин Николай

    Да. Не заметил - у меня там файлы с расширением xlsx и xls. Как можно подкорректировать скрипт, в связи с новыми обстоятельствами?
    26 марта 2015 г. 5:21
  • Добрый день

    Поменяйте в скрипте -Filter "*.xls" на  -Filter "*.xlsx"


    Печенкин Николай

    26 марта 2015 г. 5:23
  • И опять же. Создал специально папку c:\folder,удалил все xlsx,оставил xls.

    Вывожу

    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xls" | ForEach-Object{
        $Workbook = $ExcelWB.Workbooks.Open($_.Fullname)
        $newName = ($_.Fullname).Replace($_.Extension,".csv")
        $Workbook.SaveAs($newName,6)
        $Workbook.Close($false)
    }
    $ExcelWB.quit()

    и ничего.

    попробовал добавить еще xlsx

    Вывожу

    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xls","*.xlsx" | ForEach-Object{
        $Workbook = $ExcelWB.Workbooks.Open($_.Fullname)
        $newName = ($_.Fullname).Replace($_.Extension,".csv")
        $Workbook.SaveAs($newName,6)
        $Workbook.Close($false)
    }
    $ExcelWB.quit()

    так же ничего

    26 марта 2015 г. 5:23
  • Добрый день

    Поменяйте в скрипте -Filter "*.xls" на  -Filter "*.xlsx"


    Печенкин Николай


    Да, пробовал. Не помогает,и добавлял новый, к xls
    26 марта 2015 г. 5:25
  • Добрый день.

    Я прям не знаю как вы делаете, вот, только что проверил )


    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xlsx" | ForEach-Object{
         $Workbook = $ExcelWB.Workbooks.Open($_.Fullname)
         $newName = ($_.Fullname).Replace($_.Extension,".csv")
         $Workbook.SaveAs($newName,6)
         $Workbook.Close($false)
     }
     $ExcelWB.quit()

    Только что пришло в голову ))) а Excel то умеет открывать xlsx на машине на которой запускаете ?


    Печенкин Николай


    • Изменено lokise 26 марта 2015 г. 6:01 Добавление
    26 марта 2015 г. 5:55
  • Добрый день.

    Я прям не знаю как вы делаете, вот, только что проверил )


    $ExcelWB = new-object -comobject excel.application

    Get-ChildItem -Path c:\folder -Filter "*.xlsx" | ForEach-Object{
         $Workbook = $ExcelWB.Workbooks.Open($_.Fullname)
         $newName = ($_.Fullname).Replace($_.Extension,".csv")
         $Workbook.SaveAs($newName,6)
         $Workbook.Close($false)
     }
     $ExcelWB.quit()

    Только что пришло в голову ))) а Excel то умеет открывать xlsx на машине на которой запускаете ?


    Печенкин Николай


    Да,конечно
    26 марта 2015 г. 8:13
  • Ну результат в предыдущем посте. У меня работает

    Печенкин Николай

    26 марта 2015 г. 8:31
  • Ну результат в предыдущем посте. У меня работает

    Печенкин Николай


    Теперь вообще перестало работать
    26 марта 2015 г. 8:49
  • Я дал вам рабочий скрипт, больше не знаю чем помочь )

    Печенкин Николай

    26 марта 2015 г. 9:44