Любой язык - [решено] Открытие, изменение и сохранение книг Excel
-
Vadikan
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Всем привет!
Есть рутинная задача. Имеется папка с книгами Excel, в которых разное количество листов, но в каждом есть столбец B (с ячейкой B1=Owner). Нужен скрипт, который удалит все столбцы со всех листов во всех книгах.
Макросы по удалению такого столбца из одной книги вроде нагугливаются. Но хотелось бы решить поставленную задачу, чтобы не открывать каждую книгу.
Буду признателен за любую помощь.
Вадим
Есть рутинная задача. Имеется папка с книгами Excel, в которых разное количество листов, но в каждом есть столбец B (с ячейкой B1=Owner). Нужен скрипт, который удалит все столбцы со всех листов во всех книгах.
Макросы по удалению такого столбца из одной книги вроде нагугливаются. Но хотелось бы решить поставленную задачу, чтобы не открывать каждую книгу.
Буду признателен за любую помощь.
Вадим
-
Iska
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Цитата Vadikan:
удалит все столбцы со всех листов во всех книгах.
«Все столбцы» — подходящие под условие столбцы B? Можно попробовать так:
Код:
* писалось под 2003-им Microsoft Excel, потому крайне рекомендую сначала опробовать «на свинках»;
* не рекурсивно.
удалит все столбцы со всех листов во всех книгах.
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
«Все столбцы» — подходящие под условие столбцы B? Можно попробовать так:
читать дальше »
Код:
Код: Выделить всё
Option Explicit
Const xlWorksheet = &HFFFFEFB9
Dim strFolder
Dim objFSO
Dim objFile
Dim objExcel
Dim objWorksheet
If WScript.Arguments.Count = 1 Then
strFolder = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strFolder) Then
Set objExcel = WScript.CreateObject("Excel.Application")
For Each objFile In objFSO.GetFolder(strFolder).Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "xls", "xlsx"
With objExcel.Workbooks.Open(objFile.Path)
For Each objWorksheet In .Sheets
With objWorksheet
If .Type = xlWorksheet Then
With .Cells.Item(1, 2)
If .Value = "Owner" Then
.EntireColumn.Delete
End If
End With
End If
End With
Next
.Save
.Close
End With
Case Else
' Nothing to do
End Select
Next
objExcel.Quit
Set objExcel = Nothing
Else
WScript.Echo "Folder [" & strFolder & "] not found"
End If
Else
WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " "
End If
WScript.Quit 0* писалось под 2003-им Microsoft Excel, потому крайне рекомендую сначала опробовать «на свинках»;
* не рекурсивно.
-
Vadikan
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Iska, в общем, дело в том, что Office 2013 не поддерживает VBA/Activex 

-
van1985
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Powershell
написал только что , так что без особого тестирования... Сначала лучше запустить на "кошках"
Excel 2007.
Код:
Upd. Язык Office 2013 должен совпадать с региональными стандартами
написал только что , так что без особого тестирования... Сначала лучше запустить на "кошках"
Excel 2007.
Код:
Код: Выделить всё
$xlCellTypeLastCell = 11
$xl = New-Object -com Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $False
Get-ChildItem -Path c:\temp\excelRemouveColumn -Recurse -Include *.xlsx | %{
$wb = $xl.Workbooks.Open($_.fullname)
1..$wb.Worksheets.Count | %{
$ws = $wb.Worksheets.Item($_)
if($ws.cells.item(1,2).value() -eq "Owner"){
[void]$ws.columns.item(2).delete()
}
}
$wb.Save()
$wb.Close()
}
$xl.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
Remove-Variable xlUpd. Язык Office 2013 должен совпадать с региональными стандартами
-
Vadikan
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Iska, спасибо за вариант, я ждал помощи от вас
К сожалению, получил ошибку
Код:
У меня Office 2010.
van1985, кстати, я очень хотел посмотреть, не предложит ли кто-нибудь вариант с PowerShell. Я по гуглу такое не осилил, к сожалению. Большое спасибо, ненужные мне столбцы удалились везде. Нужные, вроде, не пропали
К сожалению, получил ошибку
Код:
Код: Выделить всё
C:\Users\username\Documents\test\remove-column.vbs(31, 11) Microsoft VBScript runtime error: Type mismatch: 'Value'У меня Office 2010.
van1985, кстати, я очень хотел посмотреть, не предложит ли кто-нибудь вариант с PowerShell. Я по гуглу такое не осилил, к сожалению. Большое спасибо, ненужные мне столбцы удалились везде. Нужные, вроде, не пропали

-
Vadikan
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Цитата Vadikan:
потому что в Windows RT из пошика это не сделать.
Там нет PowerShell'а?
Цитата Vadikan:
Для решения текущей задачи достаточно только поочередно открыть, сохранить и закрыть все книги XLS в заданной папке.
То бишь, со «внутренностями» документа никаких операций делать больше не надо?
Примерно так:
Код:
потому что в Windows RT из пошика это не сделать.
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Там нет PowerShell'а?
Цитата Vadikan:
Для решения текущей задачи достаточно только поочередно открыть, сохранить и закрыть все книги XLS в заданной папке.
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
То бишь, со «внутренностями» документа никаких операций делать больше не надо?
Примерно так:
читать дальше »
Код:
Код: Выделить всё
Option Explicit
Dim objFSO
Dim objFile
Dim strFolder
Dim objSheet
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count = 1 Then ' Если задан аргумент скрипта…
' …используем его как имя папки для обработки
strFolder = WScript.Arguments.Item(0)
Else
' …иначе используем текущий каталог для скрипта
strFolder = objFSO.GetAbsolutePathName(".")
End If
' В принципе, можно и прямо задать потребную папку для обработки
'strFolder = "c:\temp\excelRemouveColumn"
With WScript.CreateObject("Excel.Application")
.DisplayAlerts = False
If objFSO.FolderExists(strFolder) Then
For Each objFile In objFSO.GetFolder(strFolder).Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "xls", "xlsx"
With .Workbooks.Open(objFile.Path)
'WScript.Echo objFile.Path
.Save
.Close
End With
Case Else
' Nothing to do
End Select
Next
Else
WScript.Echo "Folder [" & strFolder & "] not found."
End If
.Quit
End With
Set objFSO = Nothing
WScript.Quit-
Iska
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Цитата Iska:
Там нет PowerShell'а?
Есть, но один специалист по нему сказал, что PS там урезан, поэтому код выше завершается с ошибками.
Цитата Iska:
Примерно так:
Спасибо, работает, но выводит диалог с именем каждого обработанного файла. Как его убрать?
Там нет PowerShell'а?
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Есть, но один специалист по нему сказал, что PS там урезан, поэтому код выше завершается с ошибками.
Цитата Iska:
Примерно так:
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Спасибо, работает, но выводит диалог с именем каждого обработанного файла. Как его убрать?
-
Vadikan
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Цитата Vadikan:
Есть, но один специалист по нему сказал, что PS там урезан, поэтому код выше завершается с ошибками.
Спасибо, ясно.
Цитата Vadikan:
выводит диалог с именем каждого обработанного файла. Как его убрать?
Вариантов несколько. Проще всего закомментировать строку с «WScript.Echo …». Поправил код
Есть, но один специалист по нему сказал, что PS там урезан, поэтому код выше завершается с ошибками.
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Спасибо, ясно.
Цитата Vadikan:
выводит диалог с именем каждого обработанного файла. Как его убрать?
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Вариантов несколько. Проще всего закомментировать строку с «WScript.Echo …». Поправил код
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
.-
Iska
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Iska, да, так работает, но все равно не сработало в RT.
Цитата:
"Не удается создать объект с именем WScript.Shell".
Видимо, там и VBS какой-то не такой
Спасибо за помощь!
Цитата:
"Не удается создать объект с именем WScript.Shell".
Видимо, там и VBS какой-то не такой
Спасибо за помощь!
-
Vadikan
Re: Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Цитата Vadikan:
Iska, да, так работает, но все равно не сработало в RT.
Вот же зараза такая
!
Цитата Vadikan:
Цитата:
"Не удается создать объект с именем WScript.Shell".
Видимо, там и VBS какой-то не такой
Давайте попробуем дедовский способ получения текущего каталога — «objFSO.GetAbsolutePathName(".")» вместо использования объекта «WScript.Shell». Ещё раз
Iska, да, так работает, но все равно не сработало в RT.
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Вот же зараза такая
!Цитата Vadikan:
Цитата:
"Не удается создать объект с именем WScript.Shell".
Видимо, там и VBS какой-то не такой
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
Давайте попробуем дедовский способ получения текущего каталога — «objFSO.GetAbsolutePathName(".")» вместо использования объекта «WScript.Shell». Ещё раз
Любой язык - [решено] Открытие, изменение и сохранение книг Excel
.