2016-05-23 4 views
-1

Мне нужно манипулировать несколькими файлами excel, и в соответствии с моим исследованием powershell был бы лучшим способом сделать это. Вот мой вопрос.Несколько манипуляций Excel с использованием Powershell

У меня есть, вероятно, более 500 файлов Excel, содержащих аналогичный формат для скриншота ниже.

Sample Excel File Screenshot

Каждый Excel файл имеет 2 листов. На самом деле важны данные на листе 2, который содержит данные. Я хотел бы авто вставить значение для столбца Branch, который вы могли видеть, пустым. Ветвь будет взята из ячейки B2. Я бы очень помог, я мог бы управлять всеми 500 + excel файлами за один проход. Надеюсь, ты сможешь помочь. Кроме того, 500+ файлов excel имеют разные имена файлов, но имеют одинаковый формат.

ответ

2

PowerShell действительно может сделать это довольно легко. Сначала вы получаете список файлов, затем запускаете Excel, а в цикле ForEach вы открываете файл, находите значение B2, применяете его во всех ячейках столбца B для строк 5 и более, которые используются. Затем сохраните и закройте этот файл и перейдите к следующему. В конце мы закрываем Excel.

#Get list of files 
$Files = Get-ChildItem c:\Path\To\Files\*.xlsx 

#Launch Excel 
$XL = New-Object -ComObject Excel.Application 

ForEach($File in $Files){ 
    #Open the file and get the Data sheet 
    $WB = $XL.Workbooks.Open($File.Fullname) 
    $Sheet = $WB.Worksheets.Item('Data') 

    #Get the value from B2 
    $Branch = $Sheet.Rows.Item(2).Cells.Item(2).Value2 

    #Loop through rows, skipping the first 4, and set the branch value 
    $($Sheet.UsedRange.Rows) | Select -Skip 4 | ForEach{ $_.Cells.Item(2).Value2 = $Branch } 

    #Save and close the file 
    $WB.Save() 
    $WB.Close($true) 
} 

#Close Excel 
$XL.Quit() 
+0

работает как шарм @ TheMadTechnician –

0

Я написал код в vba. Он нуждается в вводе в виде имен файлов и путей, и он откроет каждый файл Excel, напишет необходимые данные в нужном месте, а затем сохранит его и закроет. (Учитывая, что все 500 файлов находятся в одной папке, и в этой папке нет других файлов.) В обновленной части я пытаюсь сделать get filesnames along with paths для всех 500 файлов, которые находятся в одной папке, и продолжить открытие и редактирование. Не забудьте обновить путь к папке.

Sub Open_n_Edit() 
Application.EnableEvents = False 
Dim objFSO As Object 
Dim objFolder As Object 
Dim objFile As Object 
Dim filenames(500) As String 

'Updated portion' 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("Put here the path for the folder containing 500 excel files without \ at end") 
i = 1 
For Each objFile In objFolder.Files 
    filenames(i) = objFile.Path 
    i = i + 1 
Next objFile 
'updated portion' 

For i = 1 To 500 
    Workbooks.Open Filename:=filenames(i) 
    Lastrow = ActiveWorkbook.Sheets("Data").Range("A4").End(xlDown).Row 
    Range("B5:B" & Lastrow) = Range("B2").Value 
    ActiveWorkbook.Save 
    ActiveWorkbook.Close 
Next 

Application.EnableEvents = True 
End Sub 
+0

спасибо большое @ Ethun_Hunt .. Я бы попытался изучить это, так как у меня нет опыта работы с VBA. –

+0

обновления: ошибка времени выполнения '1004': определяемая приложением или объектная ошибка –

+0

@ Michelle Santos, ошибка, скорее всего, из-за того, что вы не указали имена файлов в массиве. Чтобы облегчить задачу получения списка файлов, я включил код для этого в vba. Надеюсь, теперь это сработает для вас. –

Смежные вопросы