none
Загрузить данные из CSV RRS feed

  • Вопрос

  • Коллеги, добрый день!

    есть CSV файл:

    "Title",
    "ТЕСТ1",


    есть скрипт:

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    #
    $ActualDailyTasks = Import-Csv "F:\CSV\sec-1.csv"   
    #
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    #
    $list = $web.Lists["ActualDailyTasks"]    
    #
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add();  
       $item["Title"] = $row.Title; 
       $item.Update();
    }  

    нужно чтобы каждый день записывались данные из файла в список , но выходит ошибка, что делаю не так ?

    Ошибка:

    Невозможно вызвать метод для выражения со значением NULL.
    C:\Scripts\WS\Task\AddTaskSec.ps1:10 знак:4
    +    $item = $list.Items.Add();
    +    ~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull
     
    Не удается индексировать в объект типа System.Management.Automation.PSObject.
    C:\Scripts\WS\Task\AddTaskSec.ps1:11 знак:4
    +    $item["Title"] = $row.Title;
    +    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : CannotIndex

    Заранее благодарю!

    17 апреля 2018 г. 22:54

Ответы

  • Добрый день

    вы уверены, что название списка указано в скрипте верное?

    попробуйте так проверить

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    #
    $ActualDailyTasks = Import-Csv "F:\CSV\sec-1.csv"   
    #
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    #
    $list = $web.Lists["ActualDailyTasks"]    
    $list.ID

    должно быть похоже на это



    мой блог не много о SharePoint


    • Изменено Kaplin VladimirModerator 18 апреля 2018 г. 6:53
    • Помечено в качестве ответа Trusilya 18 апреля 2018 г. 8:29
    18 апреля 2018 г. 6:52
    Модератор
  • попробуйте так

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    		$ActualDailyTasks = Import-Csv -Delimiter ";" "F:\CSV\DailyTask.csv" -Encoding "UTF8"
    		$web = Get-SPWeb -Identity "http://sp.corp.su/SEC/"    
    		$list = $web.Lists["Фактические ежедневные задачи"]    
    		foreach ($row in $ActualDailyTasks) {  
    		   $item = $list.Items.Add(); 
    			if ($row.Title -ne $null)
    		   {
    		   $item["Title"] = $row.Title;
    		   $item["FIO"] = $row.FIO; 
    		   if($row.Date_Work_Started -ne ""){
    				$dStr = Date($row.Date_Work_Started )      
    				$item["Date_Work_Started"] =  $dStr.ToString('MM.dd.yyyy HH:mm')
    			 }		   
    			if($row.Date_Work_Order_Completed -ne ""){
    				$dCmp = Date($row.Date_Work_Order_Completed )      
    				$item["Date_Work_Order_Completed"] =  $dCmp.ToString('MM.dd.yyyy HH:mm')
    			}
    		   #$item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd/MM/yyyy hh:mm", $null)
    		   #$item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd/MM/yyyy hh:mm", $null)
    		   }
    		   $item.Update();
    		}
    и какие данные в поле FIO?


    мой блог не много о SharePoint

    • Помечено в качестве ответа Trusilya 19 апреля 2018 г. 8:09
    19 апреля 2018 г. 5:50
    Модератор

Все ответы

  • Видимо вы пытаетесь выгрузить из csv-файла данные, в которых есть значение NULL в столбец Title списка ActualDailyTasks в настройках списка, который является обязательным для заполнения.
    18 апреля 2018 г. 6:25
  • У меня в списке пока только один столбец Title, в CSV файле один столбец с шапкой Title и вторя строка Текст

    "Title",
    "ТЕСТ1",

    Убрал ограничение чтобы столбец Title был обязательным, ошибка остается.

    Заранее благодарю!

    18 апреля 2018 г. 6:30
  • Добрый день

    вы уверены, что название списка указано в скрипте верное?

    попробуйте так проверить

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    #
    $ActualDailyTasks = Import-Csv "F:\CSV\sec-1.csv"   
    #
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    #
    $list = $web.Lists["ActualDailyTasks"]    
    $list.ID

    должно быть похоже на это



    мой блог не много о SharePoint


    • Изменено Kaplin VladimirModerator 18 апреля 2018 г. 6:53
    • Помечено в качестве ответа Trusilya 18 апреля 2018 г. 8:29
    18 апреля 2018 г. 6:52
    Модератор
  • Попробуйте так:

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    $ActualDailyTasks = Import-Csv "F:\CSV\sec-1.csv" -Header Title,ТЕСТ1
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    $list = $web.Lists["ActualDailyTasks"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title; 
       }
       $item.Update();
    }  
    18 апреля 2018 г. 7:21
  • Добрый день

    вы уверены, что название списка указано в скрипте верное?

    попробуйте так проверить

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    #
    $ActualDailyTasks = Import-Csv "F:\CSV\sec-1.csv"   
    #
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    #
    $list = $web.Lists["ActualDailyTasks"]    
    $list.ID

    должно быть похоже на это



    мой блог не много о SharePoint


    Владимир, добрый день!

    Спасибо! В адресной строке список пишется по английски но если указываю по Русски название все работает.

    18 апреля 2018 г. 8:33
  • Попробуйте так:

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    $ActualDailyTasks = Import-Csv "F:\CSV\sec-1.csv" -Header Title,ТЕСТ1
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    $list = $web.Lists["ActualDailyTasks"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title; 
       }
       $item.Update();
    }  
    Тоже не сразу сработало, в значении поле Title выходило "Без названия", далее если указать как в этом решении -Header Title и значение null пропускает, сейчас работает без проблем, спасибо!
    • Изменено Lion SP 18 апреля 2018 г. 8:45
    18 апреля 2018 г. 8:44
  • Подскажите как правильно заносить дату ?

    Ошибка:

    PS C:\Scripts> C:\Scripts\WS\Task\AddTask.ps1
    Строка не распознана как действительное значение DateTime.
    C:\Scripts\WS\Task\AddTask.ps1:11 знак:4
    +    $item["INDATE"] = $row.INDATE;
    +    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], FormatException
        + FullyQualifiedErrorId : System.FormatException
     
    Строка не распознана как действительное значение DateTime.
    C:\Scripts\WS\Task\AddTask.ps1:12 знак:4
    +    $item["ENDDATE"] = $row.ENDDATE;
    +    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], FormatException
        + FullyQualifiedErrorId : System.FormatException

    CSV -

    "Title","FIO","INDATE","ENDDATE"
    ТЕСТ_СПИСКА2,ФИО,18.04.2018 18:00,18.04.2018 19:00

    Скрипт:

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    $ActualDailyTasks = Import-Csv "F:\CSV\sec.csv"
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    $list = $web.Lists["Фактические ежедневные задачи"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title;
       $item["FIO"] = $row.FIO;
       $item["INDATE"] = $row.INDATE;
       $item["ENDDATE"] = $row.ENDDATE; 
       }
       $item.Update();
    }  

    Что делаю не так ?

    18 апреля 2018 г. 13:35
  • Делаю вот так:

    $list = $web.Lists["Фактические ежедневные задачи"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title;
       $item["FIO"] = $row.FIO; 
       }
       if ($row.Date_Work_Started -ne $null)
       {$dd = Get-Date $row.Date_Work_Started -format d
       $dd=$dd.ToString()
       $item["Date_Work_Started"] = $dd}
       if ($row.Date_Work_Order_Completed.Length -ne 0)
       {$dd = Get-Date $row.Date_Work_Order_Completed -format d
       $dd=$dd.ToString()
       $item["Date_Work_Order_Completed"] = $dd}
       $item.Update();
    }  

    CSV:

    Title;FIO;Date_Work_Started;Date_Work_Order_Completed
    TASK_NAME;FIO_SEC;18.04.2018 17:00;19.04.2018 18:00

    Создается документ но без данных:

    Что делаю не так ? Заранее благодарен !

    18 апреля 2018 г. 14:14
  • Значение поля DateTime, нужно писать в таком формате:

    $spItem["DateCreated"] = [datetime]::ParseExact($row.StartDate, "dd/MM/yyyy hh:mm:ss", $null)

    18 апреля 2018 г. 14:51
  • Спасибо, не получается, выходят пустые поля, делаю так:

    $list = $web.Lists["Фактические ежедневные задачи"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title;
       $item["FIO"] = $row.FIO; 
       $item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd/MM/yyyy hh:mm:ss", $null)
       $item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd/MM/yyyy hh:mm:ss", $null)
       }
       $item.Update();
    }  
    

    в список добавляются пустые строки:

    Заранее благодарен!

    18 апреля 2018 г. 15:34
  • Попробуйте такой вариант:

    $ActualDailyTasks = Import-Csv "F:\CSV\sec.csv" -Header Title;FIO;Date_Work_Started;Date_Work_Order_Completed
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    $list = $web.Lists["Фактические ежедневные задачи"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title;
       $item["FIO"] = $row.FIO; 
       $item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd.MM.yyyy HH:mm", $null).ToString('yyyy-MM-ddThh:mm:ssZ')
       $item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd.MM.yyyy HH:mm", $null).ToString('yyyy-MM-ddThh:mm:ssZ')
       }
       $item.Update();
    }  
    18 апреля 2018 г. 15:54
  • Разобрался почему создавались пустые строки, надо было добавить делитель, скрипт сейчас такой:

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    $ActualDailyTasks = Import-Csv -Delimiter ";" "F:\CSV\DailyTask.csv" -Encoding "UTF8"
    $web = Get-SPWeb -Identity "http://sp.corp.su/SEC/"    
    $list = $web.Lists["Фактические ежедневные задачи"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title;
       $item["FIO"] = $row.FIO; 
       $item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd/MM/yyyy hh:mm", $null)
       $item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd/MM/yyyy hh:mm", $null)
       }
       $item.Update();
    }  

    Но почему-то не срабатывает кодировка и не ставится дата:

    Ошибка даты:

    Исключение при вызове "ParseExact" с "3" аргументами: "Строка не распознана как действительное значение DateTime."
    C:\Scripts\WS\DailyTask.ps1:12 знак:4
    +    $item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Or ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FormatException

    CSV созданный в Excel 2016:

    title;fio;Date_Work_Started;Date_Work_Order_Completed
    пожарная тревога;Иванов И.И.;18.04.18 11:30;18.04.18 11:45

    Что не так делаю ?

    18 апреля 2018 г. 15:55
  • $ActualDailyTasks = Import-Csv "F:\CSV\sec.csv" -Header Title;FIO;Date_Work_Started;Date_Work_Order_Completed -Encoding unicode -Delimiter "`t"
    $web = Get-SPWeb -Identity "http://sp.corp.domain.su/sec/"    
    $list = $web.Lists["Фактические ежедневные задачи"]    
    foreach ($row in $ActualDailyTasks) {  
       $item = $list.Items.Add(); 
        if ($row.Title -ne $null)
       {
       $item["Title"] = $row.Title;
       $item["FIO"] = $row.FIO; 
       if ($row.Date_Work_Started -ne 'Date_Work_Started') {
       $item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd.MM.yyyy HH:mm", $null)
       }
       if ($row.Date_Work_Order_Completed -ne 'Date_Work_Order_Completed') {
       $item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd.MM.yyyy HH:mm", $null)
       }
       $item.Update();
    }
    18 апреля 2018 г. 16:12
  • Дата выгружается но не все:

    CSV:

    Дату как-то криво подставляет не то что в файле плюс не все. =((

    18 апреля 2018 г. 16:29
  • попробуйте так

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    		$ActualDailyTasks = Import-Csv -Delimiter ";" "F:\CSV\DailyTask.csv" -Encoding "UTF8"
    		$web = Get-SPWeb -Identity "http://sp.corp.su/SEC/"    
    		$list = $web.Lists["Фактические ежедневные задачи"]    
    		foreach ($row in $ActualDailyTasks) {  
    		   $item = $list.Items.Add(); 
    			if ($row.Title -ne $null)
    		   {
    		   $item["Title"] = $row.Title;
    		   $item["FIO"] = $row.FIO; 
    		   if($row.Date_Work_Started -ne ""){
    				$dStr = Date($row.Date_Work_Started )      
    				$item["Date_Work_Started"] =  $dStr.ToString('MM.dd.yyyy HH:mm')
    			 }		   
    			if($row.Date_Work_Order_Completed -ne ""){
    				$dCmp = Date($row.Date_Work_Order_Completed )      
    				$item["Date_Work_Order_Completed"] =  $dCmp.ToString('MM.dd.yyyy HH:mm')
    			}
    		   #$item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd/MM/yyyy hh:mm", $null)
    		   #$item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd/MM/yyyy hh:mm", $null)
    		   }
    		   $item.Update();
    		}
    и какие данные в поле FIO?


    мой блог не много о SharePoint

    • Помечено в качестве ответа Trusilya 19 апреля 2018 г. 8:09
    19 апреля 2018 г. 5:50
    Модератор
  • попробуйте так

    Add-PSSnapin Microsoft.SharePoint.PowerShell  
    		$ActualDailyTasks = Import-Csv -Delimiter ";" "F:\CSV\DailyTask.csv" -Encoding "UTF8"
    		$web = Get-SPWeb -Identity "http://sp.corp.su/SEC/"    
    		$list = $web.Lists["Фактические ежедневные задачи"]    
    		foreach ($row in $ActualDailyTasks) {  
    		   $item = $list.Items.Add(); 
    			if ($row.Title -ne $null)
    		   {
    		   $item["Title"] = $row.Title;
    		   $item["FIO"] = $row.FIO; 
    		   if($row.Date_Work_Started -ne ""){
    				$dStr = Date($row.Date_Work_Started )      
    				$item["Date_Work_Started"] =  $dStr.ToString('MM.dd.yyyy HH:mm')
    			 }		   
    			if($row.Date_Work_Order_Completed -ne ""){
    				$dCmp = Date($row.Date_Work_Order_Completed )      
    				$item["Date_Work_Order_Completed"] =  $dCmp.ToString('MM.dd.yyyy HH:mm')
    			}
    		   #$item["Date_Work_Started"] = [datetime]::ParseExact($row.Date_Work_Started, "dd/MM/yyyy hh:mm", $null)
    		   #$item["Date_Work_Order_Completed"] = [datetime]::ParseExact($row.Date_Work_Order_Completed, "dd/MM/yyyy hh:mm", $null)
    		   }
    		   $item.Update();
    		}
    и какие данные в поле FIO?


    мой блог не много о SharePoint

    Спасибо, работает ! в поле FIO текст.
    19 апреля 2018 г. 8:09