PDA

Показать полную графическую версию : [решено] Редактирование Excel , командная строка CMD + VBS


DEDI
15-07-2014, 00:31
Нужна помощь, не пойму в чем дело. Нужно редактировать таблицу Excel из под командной строки. По моему все легко но хоть убей не могу разобраться со vbs скриптом!.

Нашел скрипт, когда стал подгонять его под себя начались проблемы, полный ппц.

Из командной строки это выглядит примерно так: edit_xls.vbs Excel.xlsx 1 2 3 "X date"
edit_xls.vbs - скрипт
Excel.xlsx - таблица
1 и 2 - координаты ячейки
3 - номер листа ( вот на номере листа он у меня и ошибку кидает)
"X date" - значение

Скрипт (Который мучаю):
xlsFileName = WScript.Arguments.Item(0)
xlsx = WScript.Arguments.Item(1)
xlsy = WScript.Arguments.Item(2)
xlssheets = WScript.Arguments.Item(3)
xlsvalue = WScript.Arguments.Item(4)
set fso = createobject("Scripting.FileSystemObject")
set a = createobject("excel.application")
set b = a.workbooks.open(xlsFileName)
WScript.Echo "Num " & xlssheets & ""
set s = b.sheets ("" & xlssheets & "")
s.Cells(""&xlsx&"", ""&xlsy&"").Value = ""&xlsvalue&""
b.save
b.close true
a.quit

Оригинал: (cyberforum, пользователь Abu)const xlsFileName = "c:\forTest\book and vbs.xls" ' тута имя xls файла
set fso = createobject("Scripting.FileSystemObject")
set a = createobject("excel.application")
set b = a.workbooks.open(xlsFileName) 'открываем книгу
set s = b.sheets(1) 'номер листа в книге
for i = 1 to 10 'заполним первые десять строк первого столбца
s.Cells(i,1).Value = i*1000
Next
b.close true 'закроем книгу, сохранив изменения
a.quit 'закроем Excel

Конкретного шаблона таблицы нет.

Думал подогнать вордовский скрипт (который мне идеально подходит) под ексель, но ни в какукую.

Скрипт: (Спасибо Iska)Option Explicit

Const wdReplaceAll = 2

Dim strDocument
Dim strACT
Dim strClient
Dim strService
Dim strDate
Dim strMobileTel
Dim strSN
Dim strNOTE

Dim objFSO

Dim arrStrings


If WScript.Arguments.Count = 8 Then
strDocument = WScript.Arguments.Item(0)
strDate = WScript.Arguments.Item(1)
strACT = WScript.Arguments.Item(2)
strClient = WScript.Arguments.Item(3)
strMobileTel = WScript.Arguments.Item(4)
strService = WScript.Arguments.Item(5)
strSN = WScript.Arguments.Item(6)
strNOTE = WScript.Arguments.Item(7)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strDocument) Then
With WScript.CreateObject("Word.Application")
With .Documents.Open(strDocument)
For Each arrStrings In Array( _
Array("Дата", strDate), _
Array("Номер акта", strACT), _
Array("Клиент", strClient), _
Array("Номер телефона", strMobileTel), _
Array("Оборудование\\Сервис", strService), _
Array("Серийный номер", strSN), _
Array("Заметка", strNOTE) _
)

With .Content.Find
.ClearFormatting
.Text = "(" & arrStrings(0) & ": )(*)(^13)"

.MatchWildcards = True
.Format = False
.MatchCase = True

With .Replacement
.ClearFormatting
.Text = "\1" & arrStrings(1) & "\3"
End With

.Execute , , , , , , , , , , wdReplaceAll
End With
Next

.Save
.Close
End With

.Quit
End With
Else
WScript.Echo "Can't find document [" & strDocument & "]."
End If
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Document> <Date> <Number ACT> <Client> <Telephone number> <Service> <Serial number> <Note>"
End If

WScript.Quit 0

За ранее огромное спасибо!

Iska
15-07-2014, 02:33
Из командной строки это выглядит примерно так: edit_xls.vbs Excel.xlsx 1 2 3 "X date"

3 - номер листа ( вот на номере листа он у меня и ошибку кидает) »
Какую именно ошибку? Где приложенный образец файла «Excel.xlsx»?

Если именно номер листа, а не имя — тогда никак не:
set s = b.sheets ("" & xlssheets & "")
а:
set s = b.sheets(xlssheets)
можете даже уточнить как:
set s = b.sheets(CLng(xlssheets))

DEDI
15-07-2014, 19:33
Iska, Спасибо!!!

Вот скрипт: (Рабочий =))

Dim xlsFileName
Dim xlsx
Dim xlsy
Dim xlssheets
Dim xlsvalue

xlsFileName = WScript.Arguments.Item(0)
xlsx = WScript.Arguments.Item(1)
xlsy = WScript.Arguments.Item(2)
xlssheets = WScript.Arguments.Item(3)
xlsvalue = WScript.Arguments.Item(4)
set fso = createobject("Scripting.FileSystemObject")
set co = createobject("excel.application")
set b = co.workbooks.open(xlsFileName)
set s = b.sheets(CLng(xlssheets))
s.Cells(CLng(xlsx),CLng(xlsy)).Value = xlsvalue
b.save
b.close true
co.quit

Но может будут еще варианты интересные?)

Iska
17-07-2014, 07:15
Но может будут еще варианты интересные?) »
Держите «интересный вариант» ;) — то же самое, но с проверками:
Option Explicit

Dim objFSO

Dim strSourceFile
Dim intWorksheetNumber
Dim intRowNumber
Dim intColumnNumber
Dim strNewValue


If WScript.Arguments.Count = 5 Then
strSourceFile = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strSourceFile) Then
Select Case LCase(objFSO.GetExtensionName(strSourceFile))
Case "xls", "xlsx"
If IsNumeric(WScript.Arguments.Item(1)) Then
intWorksheetNumber = CInt(WScript.Arguments.Item(1))

If IsNumeric(WScript.Arguments.Item(2)) Then
intRowNumber = CInt(WScript.Arguments.Item(2))

If IsNumeric(WScript.Arguments.Item(3)) Then
intColumnNumber = CInt(WScript.Arguments.Item(3))

strNewValue = WScript.Arguments.Item(4)

With WScript.CreateObject("Excel.Application")
With .Workbooks.Open(strSourceFile)
If .Worksheets.Count >= intWorksheetNumber Then
.Worksheets.Item(intWorksheetNumber).Cells.Item(intRowNumber, intColumnNumber).Value = strNewValue
Else
WScript.Echo "Worksheet number [" & WScript.Arguments.Item(1) & "] greater then worksheets count in workbook."
.Close
.Application.Quit
WScript.Quit 7
End If

.Save
.Close
End With

.Quit
End With
Else
WScript.Echo "Column number [" & WScript.Arguments.Item(3) & "] is not a numeric value."
WScript.Quit 6
End If
Else
WScript.Echo "Row number [" & WScript.Arguments.Item(2) & "] is not a numeric value."
WScript.Quit 5
End If
Else
WScript.Echo "Worksheet number [" & WScript.Arguments.Item(1) & "] is not a numeric value."
WScript.Quit 4
End If
Case Else
WScript.Echo "Source file [" & strSourceFile & "] probably is not an Excel document."
WScript.Quit 3
End Select
Else
WScript.Echo "Source file [" & strSourceFile & "] not found."
WScript.Quit 2
End If

Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source file> <Worksheet number> <Row number> <Column number> <New cell's value>"
WScript.Quit 1
End If

WScript.Quit 0




© OSzone.net 2001-2012