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
За ранее огромное спасибо!
Нашел скрипт, когда стал подгонять его под себя начались проблемы, полный ппц.
Из командной строки это выглядит примерно так: 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
За ранее огромное спасибо!