2016-03-17 7 views
0

У меня возникла проблема с экспортом данных из Text.File в книгу Excel, содержащую данные за месяц. В конце концов, код открывает новую рабочую книгу с именем и титром листа под названием «Geraldine3-16-2016», я не против, но он никогда не добавляется и не копируется в основную книгу , Поэтому в итоге единственное, что меняется в основной книге, это то, что создается новый лист, называемый «Лист 1», но нет данных из текстового файла. Любая помощь очень ценится, спасибо заранее!Копирование текстовых файлов в существующую книгу Excel с помощью PowerShell

function Release-Ref ($ref) { 
([System.Runtime.InteropServices.Marshal]::ReleaseComObject( 
[System.__ComObject]$ref) -gt 0) 
[System.GC]::Collect() 
[System.GC]::WaitForPendingFinalizers() 
} 

$File='C:\users\cesar.sanchez\downloads\Returns data 2-16-15.xlsx' 
$TextFile='C:\Users\cesar.sanchez\downloads\Geraldine3-16-2016.txt' 

$Excel = New-Object -C Excel.Application 
$Excel.Visible=$true #For troubleshooting purposes only. 
# $Excel.DisplayAlerts = $false 
$TextData = $Excel.Workbooks.Opentext($TextFile,$null,$true) 
$ExcelData = $Excel.Workbooks.Open($File) # Open Template 
$NewS_ExcelData=$ExcelData.sheets.add() 
$TexttoCopy=$TextData.Sheets.item(1) 
$TexttoCopy.copy($NewS_ExcelData) 

Я считаю, что это связано с чем-то в этой части кода, но я не совсем уверен.

$NewS_ExcelData=$ExcelData.sheets.add() 
$TexttoCopy=$TextData.Sheets.item(1) 
$TexttoCopy.copy($NewS_ExcelData) 

ответ

2

.OpenText не то же самое, как .Open. Он не возвращает объект. (Узнал твердый путь!)

$TexttoCopy=$TextData.Sheets.item(1) бросает ошибку:

You cannot call a method on a null-valued expression. 

Альтернативный код:

$File='C:\users\cesar.sanchez\downloads\Returns data 2-16-15.xlsx' 
$TextFile='C:\Users\cesar.sanchez\downloads\Geraldine3-16-2016.txt' 

$Excel = New-Object -C Excel.Application 
$Excel.Visible=$true #For troubleshooting purposes only. 
# $Excel.DisplayAlerts = $false 
$Excel.Workbooks.Opentext($TextFile,$null,$true) # Open Text file 
$TextData  = $Excel.ActiveWorkbook   # Assign active workbook 
$ExcelData  = $Excel.Workbooks.Open($File)  # Open Template 

$NewS_ExcelData = $ExcelData.sheets.add() 
$TexttoCopy  = $TextData.Sheets.item(1) 

$TexttoCopy.copy($NewS_ExcelData) 

Вы также можете найти $TexttoCopy.move($NewS_ExcelData) полезным.